欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java快速實現(xiàn)PDF轉(zhuǎn)圖片功能實例代碼

 更新時間:2024年09月25日 09:12:41   作者:知識淺談  
PDFBox是一個開源Java類庫,用于讀取和創(chuàng)建PDF文檔,它支持文本提取、表單處理、文檔加密解密、合并分割、內(nèi)容覆蓋追加、文檔打印和轉(zhuǎn)換等功能,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

前言

PDFBox是一個BSD許可下的源碼開放項目,它是一個專門為開發(fā)人員讀取和創(chuàng)建PDF文檔而準備的純Java類庫。

  • 文本提取:PDFBox可以從PDF文檔中提取文本,包括Unicode字符。
  • 表單處理:PDFBox支持從PDF表單中提取數(shù)據(jù),或者是填充PDF表單。
  • 加密與解密:可以對PDF文檔進行加密和解密操作。
  • 合并與分割:可以將多個PDF文檔合并成一個,也可以將一個PDF文檔分割成多個。
  • 覆蓋與追加:可以覆蓋PDF文檔的內(nèi)容,或者向已有的PDF文檔中追加內(nèi)容。
  • 打印:利用Java的打印API,PDFBox可以將PDF文檔輸出到打印機。
  • 轉(zhuǎn)換:PDFBox可以將PDF文檔轉(zhuǎn)換成映像文件,如PNG或JPEG格式。
  • 創(chuàng)建PDF:可以從頭開始創(chuàng)建新的PDF文檔,包括添加圖像和字體。
  • 集成Lucene搜索引擎:PDFBox與Jakarta Lucene等文本搜索引擎的整合過程十分簡單,可以用于PDF文檔的索引和搜索。

引入依賴

<!--pdf轉(zhuǎn)圖片-->
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.29</version>
</dependency>

編寫PdfToImageUtil 工具類

import lombok.extern.slf4j.Slf4j;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @Author: 公眾號:知識淺談
 * @Description: pdf轉(zhuǎn)圖片工具類
 * @Version: 1.0
 */
@Slf4j
public class PdfToImageUtil {
    /*dpi 越大圖片越清晰*/
    private static final Integer DPI = 100;

    /*轉(zhuǎn)換后圖片類型*/
    private static final String IMG_TYPE = "jpg";

    /**
     * PDF轉(zhuǎn)圖片(多頁)
     * @param fileContent pdf文件的二進制流
     * @return 圖片文件的二進制流
     * @throws Exception
     */
    public static List<byte[]> pdfToImage(byte[] fileContent) throws Exception {
        List<byte[]> imageList = new ArrayList<byte[]>();
        PDDocument document=null;
        try{
            document = PDDocument.load(fileContent);
            PDFRenderer pdfRenderer = new PDFRenderer(document);
            for (int i = 0; i < document.getNumberOfPages(); i++) {
                BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(i, DPI);
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                ImageIO.write(bufferedImage, IMG_TYPE, out);
                imageList.add(out.toByteArray());
            }
        }finally {
            document.close();
        }
        return imageList;
    }


    /**
     * PDF轉(zhuǎn)圖片(單頁)
     * @param fileContent pdf文件的二進制流
     * @return 圖片文件的二進制流
     * @throws Exception
     */
    public static byte[] pdfToImageOne(byte[] fileContent) throws Exception {
        byte[] image = null;
        PDDocument document=null;
        try{
            document = PDDocument.load(fileContent);
            PDFRenderer pdfRenderer = new PDFRenderer(document);
            BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(0, DPI);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ImageIO.write(bufferedImage, IMG_TYPE, out);
            image = out.toByteArray();
        }finally {
            document.close();
        }
        return image;
    }

    public static Boolean saveImage(byte[] imageBytes, String savePath,String fileName) throws Exception {
        try {
            BufferedImage image = ImageIO.read(new ByteArrayInputStream(imageBytes));
            File directory = new File(savePath);
            if(!directory.exists()){
                directory.mkdirs();
            }
            File file1 = new File(directory,fileName);
            return ImageIO.write(image, IMG_TYPE, file1);
        } catch (IOException e) {
            log.error("保存文件錯誤");
            return false;
        }
    }
}

方法實現(xiàn)

 * pdf轉(zhuǎn)圖片
 */
@GetMapping(value = "/pdfToPng")
@Log(title = "證件模板", businessType = BusinessType.OTHER)
public void pdfToPng(HttpServletRequest request,HttpServletResponse response) {
    try {
        File file = new File("D:\\pdf\\test.pdf");
        FileInputStream fileInputStream = new FileInputStream(file);
        byte[] pdfBytes = new byte[(int) file.length()];
        fileInputStream.read(pdfBytes);
        fileInputStream.close();

        byte[] bytes = PdfToImageUtil.pdfToImageOne(pdfBytes);
        ServletOutputStream outputStream = response.getOutputStream();
        response.setContentType("image/jpeg");
        response.setContentLength(bytes.length);
        outputStream.write(bytes);
    }catch (Exception e){
        log.error("pdf轉(zhuǎn)圖片異常{}", e.getMessage());
    }
}

運行之后顯示的結(jié)果如下

總結(jié) 

到此這篇關于Java快速實現(xiàn)PDF轉(zhuǎn)圖片功能的文章就介紹到這了,更多相關Java PDF轉(zhuǎn)圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解java nio中的select和channel

    詳解java nio中的select和channel

    這篇文章主要介紹了java nio中的select和channel
    2019-05-05
  • Springboot打包代碼,反編譯后代碼混淆方式(防止還原代碼)

    Springboot打包代碼,反編譯后代碼混淆方式(防止還原代碼)

    文章主要介紹了如何對Spring Boot項目進行jar包混淆,以防止反編譯還原原始代碼,通過在項目中添加proguard.cfg文件并配置Maven插件,可以實現(xiàn)代碼混淆,從而增加反編譯的難度
    2024-11-11
  • Java實現(xiàn)經(jīng)典游戲黃金礦工的示例代碼

    Java實現(xiàn)經(jīng)典游戲黃金礦工的示例代碼

    《黃金礦工》游戲是一個經(jīng)典的抓金子小游戲,它可以鍛煉人的反應能力。本文將用Java實現(xiàn)這一經(jīng)典的游戲,感興趣的小伙伴可以了解一下
    2022-02-02
  • Java適配器模式之如何靈活應對不匹配的接口

    Java適配器模式之如何靈活應對不匹配的接口

    本文介紹了Java中的適配器模式,包括對象適配器模式和接口適配器模式,適配器模式通過將一個類的接口轉(zhuǎn)換成客戶期望的另一個接口,解決了不同接口之間的不兼容問題,它提高了系統(tǒng)的靈活性、復用性和解耦性,需要的朋友可以參考下
    2024-10-10
  • 實例講解分布式緩存軟件Memcached的Java客戶端使用

    實例講解分布式緩存軟件Memcached的Java客戶端使用

    這篇文章主要介紹了分布式緩存軟件Memcached的Java客戶端使用,Memcached在GitHub上開源,作者用其Windows平臺下的版本進行演示,需要的朋友可以參考下
    2016-01-01
  • SpringBoot中RestTemplate的使用詳解

    SpringBoot中RestTemplate的使用詳解

    這篇文章主要介紹了SpringBoot中RestTemplate的使用詳解,RestTemplate是由Spring框架提供的一個可用于應用中調(diào)用rest服務的類它簡化了與http服務的通信方式,統(tǒng)一了RESTFul的標準,封裝了http連接,我們只需要傳入url及其返回值類型即可,需要的朋友可以參考下
    2023-10-10
  • java中Collections.sort排序詳解

    java中Collections.sort排序詳解

    這篇文章主要介紹了java中Collections.sort排序詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • 詳解Spring?Bean的配置方式與實例化

    詳解Spring?Bean的配置方式與實例化

    本文主要帶大家一起學習一下Spring?Bean的配置方式與實例化,文中的示例代碼講解詳細,對我們學習Spring有一定的幫助,需要的可以參考一下
    2022-06-06
  • SpringMVC和Spring的配置文件掃描包詳解

    SpringMVC和Spring的配置文件掃描包詳解

    這篇文章主要介紹了SpringMVC和Spring的配置文件掃描包,本文給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-05-05
  • Springboot整合Freemarker的實現(xiàn)詳細過程

    Springboot整合Freemarker的實現(xiàn)詳細過程

    這篇文章主要介紹了Springboot整合Freemarker的實現(xiàn)詳細過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12

最新評論