最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

  • 文本提取:PDFBox可以從PDF文檔中提取文本,包括Unicode字符。
  • 表單處理:PDFBox支持從PDF表單中提取數(shù)據(jù),或者是填充PDF表單。
  • 加密與解密:可以對(duì)PDF文檔進(jìn)行加密和解密操作。
  • 合并與分割:可以將多個(gè)PDF文檔合并成一個(gè),也可以將一個(gè)PDF文檔分割成多個(gè)。
  • 覆蓋與追加:可以覆蓋PDF文檔的內(nèi)容,或者向已有的PDF文檔中追加內(nèi)容。
  • 打印:利用Java的打印API,PDFBox可以將PDF文檔輸出到打印機(jī)。
  • 轉(zhuǎn)換:PDFBox可以將PDF文檔轉(zhuǎn)換成映像文件,如PNG或JPEG格式。
  • 創(chuàng)建PDF:可以從頭開始創(chuàng)建新的PDF文檔,包括添加圖像和字體。
  • 集成Lucene搜索引擎:PDFBox與Jakarta Lucene等文本搜索引擎的整合過程十分簡(jiǎn)單,可以用于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: 公眾號(hào):知識(shí)淺談
 * @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文件的二進(jìn)制流
     * @return 圖片文件的二進(jìn)制流
     * @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文件的二進(jìn)制流
     * @return 圖片文件的二進(jìn)制流
     * @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("保存文件錯(cuò)誤");
            return false;
        }
    }
}

方法實(shí)現(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());
    }
}

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

總結(jié) 

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

相關(guān)文章

  • Spring?Cloud?Hystrix?服務(wù)降級(jí)限流策略詳解

    Spring?Cloud?Hystrix?服務(wù)降級(jí)限流策略詳解

    這篇文章主要為大家介紹了Spring?Cloud?Hystrix?服務(wù)降級(jí)限流策略詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Spring事務(wù)框架之TransactionStatus源碼解析

    Spring事務(wù)框架之TransactionStatus源碼解析

    這篇文章主要為大家介紹了Spring事務(wù)框架之TransactionStatus源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Spring Boot 整合 Mockito提升Java單元測(cè)試的高效實(shí)踐案例

    Spring Boot 整合 Mockito提升Java單元測(cè)試的高效實(shí)踐案例

    Mockito與Spring Boot的整合為Java開發(fā)者提供了一套完整的解決方案,使得單元測(cè)試更為精準(zhǔn)、高效,從而確保了代碼質(zhì)量、降低了維護(hù)成本,并促進(jìn)了項(xiàng)目的持續(xù)集成與交付,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • Mybatis Plus LambdaQueryWrapper的具體用法

    Mybatis Plus LambdaQueryWrapper的具體用法

    Mybatis Plus 在其基礎(chǔ)上擴(kuò)展了 LambdaQueryWrapper,LambdaQueryWrapper 提供了更加簡(jiǎn)便的查詢語法,同時(shí)也避免了SQL注入的風(fēng)險(xiǎn),感興趣的可以了解一下
    2023-11-11
  • 劍指Offer之Java算法習(xí)題精講數(shù)組與字符串

    劍指Offer之Java算法習(xí)題精講數(shù)組與字符串

    跟著思路走,之后從簡(jiǎn)單題入手,反復(fù)去看,做過之后可能會(huì)忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會(huì)發(fā)現(xiàn)質(zhì)的變化
    2022-03-03
  • SpringBoot項(xiàng)目jar依賴問題報(bào)錯(cuò)解析

    SpringBoot項(xiàng)目jar依賴問題報(bào)錯(cuò)解析

    本文主要介紹了Spring Boot項(xiàng)目中常見的依賴錯(cuò)誤類型、報(bào)錯(cuò)內(nèi)容及解決方法,依賴沖突包括類找不到、方法找不到、類型轉(zhuǎn)換異常等,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • Java CAS底層實(shí)現(xiàn)原理實(shí)例詳解

    Java CAS底層實(shí)現(xiàn)原理實(shí)例詳解

    這篇文章主要介紹了Java CAS底層實(shí)現(xiàn)原理實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Java方法及數(shù)組相關(guān)原理解析

    Java方法及數(shù)組相關(guān)原理解析

    這篇文章主要介紹了Java方法及數(shù)組相關(guān)原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • springboot項(xiàng)目中idea的pom.xml文件的引用標(biāo)簽全部爆紅問題解決

    springboot項(xiàng)目中idea的pom.xml文件的引用標(biāo)簽全部爆紅問題解決

    這篇文章主要介紹了springboot項(xiàng)目中idea的pom.xml文件的引用標(biāo)簽全部爆紅問題解決,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-12-12
  • spring security獲取用戶信息的實(shí)現(xiàn)代碼

    spring security獲取用戶信息的實(shí)現(xiàn)代碼

    這篇文章主要介紹了spring security獲取用戶信息的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12

最新評(píng)論

体育| 江山市| 罗定市| 梧州市| 社旗县| 拉萨市| 嘉义市| 和林格尔县| 芒康县| 兰州市| 临猗县| 大埔区| 布尔津县| 西青区| 博野县| 太湖县| 河津市| 大洼县| 赞皇县| 汉阴县| 靖州| 康乐县| 上高县| 太和县| 逊克县| 高平市| 榆林市| 乌拉特中旗| 陇西县| 镇远县| 安丘市| 宁乡县| 镇宁| 宁远县| 肇州县| 孝昌县| 游戏| 鄯善县| 宜都市| 镇雄县| 唐河县|