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

Java實現(xiàn)PDF轉(zhuǎn)圖片的三種方法

 更新時間:2023年10月13日 11:09:40   作者:一紙紅塵輕似夢  
有些時候我們需要在項目中展示PDF,所以我們可以將PDF轉(zhuǎn)為圖片,然后已圖片的方式展示,效果很好,Java使用各種技術(shù)將pdf轉(zhuǎn)換成圖片格式,并且內(nèi)容不失幀,本文給大家介紹了三種方法實現(xiàn)PDF轉(zhuǎn)圖片的案例,需要的朋友可以參考下

前言

提示:生成圖片以后需要將文件流關(guān)閉,不然刪除文件會刪除失敗很多人不知道怎么將pdf的文件轉(zhuǎn)換成圖片格式的,而且網(wǎng)上有很例子是跑不通的,同是也是方便自己在用到該需求的時候能夠快速度地寫出來,所以整理了幾種pdf轉(zhuǎn)換成圖片的方法工具類。

一、使用開源庫Apache PDFBox將PDF轉(zhuǎn)換為圖片

1、引入依賴庫

<dependency>
			<groupId>org.apache.pdfbox</groupId>
			<artifactId>fontbox</artifactId>
			<version>2.0.9</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox -->
		<dependency>
			<groupId>org.apache.pdfbox</groupId>
			<artifactId>pdfbox</artifactId>
			<version>2.0.9</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.2</version>
		</dependency>

2、實現(xiàn)pdf轉(zhuǎn)換圖片工具類(多頁pdf會生成多頁的圖片,后綴會生成圖片的位置序號)

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class Pdf2Png {
    /**
     * 使用pdfbox將整個pdf轉(zhuǎn)換成圖片
     *
     * @param fileAddress 文件地址 如:C:\\Users\\user\\Desktop\\test
     * @param filename    PDF文件名不帶后綴名
     * @param type        圖片類型 png 和jpg
     */
    public static void pdf2png(String fileAddress, String filename, String type) {
        long startTime = System.currentTimeMillis();
        // 將文件地址和文件名拼接成路徑 注意:線上環(huán)境不能使用\\拼接
        File file = new File(fileAddress + "\\" + filename + ".pdf");
        try {
            // 寫入文件
            PDDocument doc = PDDocument.load(file);
            PDFRenderer renderer = new PDFRenderer(doc);
            int pageCount = doc.getNumberOfPages();
            for (int i = 0; i < pageCount; i++) {
                // dpi為144,越高越清晰,轉(zhuǎn)換越慢
                BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI
                // 將圖片寫出到該路徑下
                ImageIO.write(image, type, new File(fileAddress + "\\" + filename + "_" + (i + 1) + "." + type));
            }
            long endTime = System.currentTimeMillis();
        	System.out.println("共耗時:" + ((endTime - startTime) / 1000.0) + "秒");  //轉(zhuǎn)化用時
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        pdf2png("C:\\Users\\user\\Desktop\\test", "測試", "png");
    }
}

使用Apache PDFBox將PDF轉(zhuǎn)換為圖片成功

3、按照固定頁數(shù)來將pdf轉(zhuǎn)換成圖片的工具類(自由選擇pdf轉(zhuǎn)換圖片的頁數(shù))

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class Pdf2Png {
    /**
     * 自由確定起始頁和終止頁
      * @param fileAddress 文件地址 如:C:\\Users\\user\\Desktop\\test
     * @param filename    PDF文件名不帶后綴名
     * @param indexOfStart 開始頁  開始轉(zhuǎn)換的頁碼,從0開始
     * @param indexOfEnd 結(jié)束頁  停止轉(zhuǎn)換的頁碼,-1為全部
     * @param type        圖片類型 png 和jpg
     */
    public static void pdf2png(String fileAddress,String filename,int indexOfStart,int indexOfEnd,String type) {
        long startTime = System.currentTimeMillis();
         // 將文件地址和文件名拼接成路徑 注意:線上環(huán)境不能使用\\拼接
        File file = new File(fileAddress+"\\"+filename+".pdf");
        try {
            PDDocument doc = PDDocument.load(file);
            PDFRenderer renderer = new PDFRenderer(doc);
            int pageCount = doc.getNumberOfPages();
            for (int i = indexOfStart; i < indexOfEnd; i++) {
            // dpi為144,越高越清晰,轉(zhuǎn)換越慢
                BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI
                 // 將圖片寫出到該路徑下
                ImageIO.write(image, type, new File(fileAddress+"\\"+filename+"_"+(i+1)+"."+type));
            }
            long endTime = System.currentTimeMillis();
            System.out.println("共耗時:" + ((endTime - startTime) / 1000.0) + "秒"); // 轉(zhuǎn)換用時
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        pdf2png("C:\\Users\\user\\Desktop\\test", "思泰得流式檢測報告-00420299-任蛆小-RA202302100117",2,3, "png");
    }
}

自由頁數(shù)轉(zhuǎn)換成功

二、使用PDF Box將多頁的pdf轉(zhuǎn)換一張長圖片的方法

1、引入PDF Box需要的依賴

<dependency>
    <groupId>net.sf.cssbox</groupId>
    <artifactId>pdf2dom</artifactId>
    <version>1.7</version>
</dependency>
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.12</version>
</dependency>
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox-tools</artifactId>
    <version>2.0.12</version>
</dependency>

2、編寫將多頁PDF轉(zhuǎn)換多張圖片的工具類

import com.lowagie.text.pdf.PdfReader;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class Pdf2Png {
    /***
     * PDF文件轉(zhuǎn)PNG圖片,全部頁數(shù)
     * @param pdfFilePath pdf完整路徑:C:\\Users\\user\\Desktop\\test\\1234.pdf
     * @param dpi dpi越大轉(zhuǎn)換后越清晰,相對轉(zhuǎn)換速度越慢
     */
    public static void pdf2Image(String pdfFilePath, int dpi) {
        long startTime = System.currentTimeMillis();
        File file = new File(pdfFilePath);
        PDDocument pdDocument;
        try {
            String imgPdfPath = file.getParent();
            int dot = file.getName().lastIndexOf('.');
            // 獲取圖片文件名
            String imagePdfName = file.getName().substring(0, dot);
            pdDocument = PDDocument.load(file);
            PDFRenderer renderer = new PDFRenderer(pdDocument);
            /* dpi越大轉(zhuǎn)換后越清晰,相對轉(zhuǎn)換速度越慢 */
            PdfReader reader = new PdfReader(pdfFilePath);
            int pages = reader.getNumberOfPages();
            StringBuffer imgFilePath;
            for (int i = 0; i < pages; i++) {
                String imgFilePathPrefix = imgPdfPath + File.separator + imagePdfName;
                imgFilePath = new StringBuffer();
                imgFilePath.append(imgFilePathPrefix);
                imgFilePath.append("_");
                imgFilePath.append((i + 1));
                imgFilePath.append(".png");
                File dstFile = new File(imgFilePath.toString());
                BufferedImage image = renderer.renderImageWithDPI(i, dpi);
                ImageIO.write(image, "png", dstFile);
            }
            long endTime = System.currentTimeMillis();
            System.out.println("共耗時:" + ((endTime - startTime) / 1000.0) + "秒");  //轉(zhuǎn)化用時
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

三、使用文件流整個pdf轉(zhuǎn)換成圖片 (生成圖片,并將生成的圖片路徑返回)

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.*;
public class Pdf2Png {
    /**
     * 使用文件流整個pdf轉(zhuǎn)換成圖片
     * @param fileAddress 文件地址 如:C:\\Users\\user\\Desktop\\test
     * @param filename    PDF文件名不帶后綴名
     * @param type        圖片類型 png 、jpg
     */
    public static List<Map<String, String>> pdfToImage(String fileAddress, String filename, String type) {
        long startTime = System.currentTimeMillis();
        List<Map<String, String>> list = new ArrayList<>();
        Map<String, String> resultMap = null;
        PDDocument pdDocument = null;
        String fileName = null;
        String imgPath = null;
        try {
            // 將文件地址和文件名拼接成路徑 注意:線上環(huán)境不能使用\\拼接
            File FilePath = new File(fileAddress + "\\" + filename + ".pdf");
            // 文件流
            FileInputStream inputStream = new FileInputStream(FilePath);
            int dpi = 296;
            pdDocument = PDDocument.load(inputStream);
            PDFRenderer renderer = new PDFRenderer(pdDocument);
            int pageCount = pdDocument.getNumberOfPages();
            /* dpi越大轉(zhuǎn)換后越清晰,相對轉(zhuǎn)換速度越慢 */
            for (int i = 0; i < pageCount; i++) {
                resultMap = new HashMap<>();
                fileName = filename + "_" + (i + 1) + "." + type;
                imgPath = fileAddress + "\\" + fileName;
                BufferedImage image = renderer.renderImageWithDPI(i, dpi);
                ImageIO.write(image, type, new File(imgPath));
                resultMap.put("fileName", fileName);
                resultMap.put("filePath", imgPath); // 圖片路徑
                list.add(resultMap);
            }
            long endTime = System.currentTimeMillis();
            System.out.println("共耗時:" + ((endTime - startTime) / 1000.0) + "秒");  //轉(zhuǎn)化用時
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // 這里需要關(guān)閉PDDocument,不然如果想要刪除pdf文件時會提示文件正在使用,無法刪除的情況
                pdDocument.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return list;
    }
    public static void main(String[] args) throws FileNotFoundException {
        pdfToImage("C:\\Users\\user\\Desktop\\test", "測試", "png");
    }
}

總結(jié)

以上好幾種pdf轉(zhuǎn)圖片的方法,該方法可直接拿過去用,或者按照自己的邏輯進行修改使用。文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面就來一起學(xué)習(xí)學(xué)習(xí)吧!

以上就是Java實現(xiàn)PDF轉(zhuǎn)圖片的三種方法的詳細內(nèi)容,更多關(guān)于Java實現(xiàn)PDF轉(zhuǎn)圖片的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Mybatis Plus 代碼生成器的實現(xiàn)

    Mybatis Plus 代碼生成器的實現(xiàn)

    這篇文章主要介紹了Mybatis Plus 代碼生成器的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 淺談maven的jar包和war包區(qū)別 以及打包方法

    淺談maven的jar包和war包區(qū)別 以及打包方法

    下面小編就為大家分享一篇淺談maven的jar包和war包區(qū)別 以及打包方法,具有很好的參考價值,希望對大家有所幫助
    2017-11-11
  • java結(jié)合keytool如何實現(xiàn)非對稱加密與解密詳解

    java結(jié)合keytool如何實現(xiàn)非對稱加密與解密詳解

    這篇文章主要給大家介紹了關(guān)于java結(jié)合keytool如何實現(xiàn)非對稱加密與解密的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • Java實現(xiàn)餅圖旋轉(zhuǎn)角度的代碼詳解

    Java實現(xiàn)餅圖旋轉(zhuǎn)角度的代碼詳解

    在現(xiàn)代數(shù)據(jù)可視化領(lǐng)域,餅圖因其直觀展示各部分占整體比例而被廣泛采用,為了增強互動性和吸引力,常會賦予餅圖 旋轉(zhuǎn) 動畫:自動、平滑地旋轉(zhuǎn),讓用戶從不同角度重點查看扇區(qū),本文將從零開始,手把手實現(xiàn)一個 Java2D Swing 版 的 可旋轉(zhuǎn)餅圖組件,需要的朋友可以參考下
    2025-05-05
  • java 多態(tài)性詳解及簡單實例

    java 多態(tài)性詳解及簡單實例

    這篇文章主要介紹了java 多態(tài)性詳解及簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Java中的Set集合簡單匯總解析

    Java中的Set集合簡單匯總解析

    這篇文章主要介紹了Java中的Set集合簡單匯總解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • 解決SpringBoot中MultipartResolver和ServletFileUpload的沖突問題

    解決SpringBoot中MultipartResolver和ServletFileUpload的沖突問題

    這篇文章主要介紹了解決SpringBoot中MultipartResolver和ServletFileUpload的沖突問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java利用AlphaComposite類合并圖像

    Java利用AlphaComposite類合并圖像

    這篇文章主要介紹了Java利用AlphaComposite類合并圖像,幫助大家更好的利用Java處理圖像,感興趣的朋友可以了解下
    2020-10-10
  • Java多線程 ReentrantReadWriteLock原理及實例詳解

    Java多線程 ReentrantReadWriteLock原理及實例詳解

    這篇文章主要介紹了Java多線程 ReentrantReadWriteLock原理及實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • Java高效實現(xiàn)合并多個Word文檔的實戰(zhàn)指南

    Java高效實現(xiàn)合并多個Word文檔的實戰(zhàn)指南

    在企業(yè)開發(fā)和日常辦公自動化中,我們經(jīng)常需要處理 Word 文檔,本文將系統(tǒng)講解在 Java 中合并 Word 文檔的常用方法,提供完整示例,幫助你快速掌握文檔合并技巧
    2026-01-01

最新評論

枣强县| 从江县| 晋宁县| 信阳市| 安岳县| 合水县| 当雄县| 白银市| 道真| 额济纳旗| 太保市| 宁强县| 新民市| 闸北区| 峨边| 康马县| 东海县| 石柱| 雷波县| 平度市| 特克斯县| 惠东县| 龙泉市| 游戏| 确山县| 新营市| 屯留县| 龙川县| 奇台县| 抚州市| 凭祥市| 宜兰县| 泰兴市| 江永县| 乡宁县| 柳州市| 达尔| 察雅县| 黔江区| 周宁县| 安化县|