首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

使用 PDFBox 將 PDF 每頁轉為圖片完整教學(含 Maven 依賴)

     編輯:Java 相關知識

Apache PDFBox 是成熟的 Java PDF 處理庫,可將 PDF 每頁渲染為圖片。本文提供完整 Maven 依賴、核心程式碼、編譯執行指令,並說明背景透明與白底兩種模式差異。

Maven 依賴

<dependencies>
    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox</artifactId>
        <version>2.0.29</version> <!-- 建議用新版 -->
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
</dependencies>

註:fontbox 已整合進 pdfbox 2.x,無需單獨引入。

完整轉檔程式

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.imageio.ImageIO;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;

public class PdfToImage {
    public static void main(String[] args) throws IOException {
        if (args.length < 2) {
            System.err.println("用法: java PdfToImage <輸入PDF> <輸出檔名前綴>");
            return;
        }
        String pdfPath = args[0];
        String outPrefix = args[1];

        try (PDDocument doc = PDDocument.load(new File(pdfPath))) {
            List<PDPage> pages = doc.getDocumentCatalog().getPages();
            for (int i = 0; i < pages.size(); i++) {
                PDPage page = pages.get(i);
                // 白底模式(預設)
                BufferedImage image = page.convertToImage();
                // 透明背景模式(需 2.0+)
                // BufferedImage image = page.convertToImage(BufferedImage.TYPE_INT_ARGB, 2f);

                File outFile = new File(outPrefix + (i + 1) + ".png");
                ImageIO.write(image, "PNG", outFile);
                System.out.println("已輸出: " + outFile.getAbsolutePath());
            }
        }
    }
}

命令列編譯與執行(無 Maven 專案時)

# 編譯
javac -cp "pdfbox-2.0.29.jar:commons-logging-1.2.jar" PdfToImage.java

# 執行
java -cp ".:pdfbox-2.0.29.jar:commons-logging-1.2.jar" PdfToImage "test.pdf" "page_"

Windows 將 : 改為 ;。

關鍵參數說明

方法背景適用場景
convertToImage()白色一般文件預覽、列印
convertToImage(TYPE_INT_ARGB, 解析度)透明疊加合成、UI 顯示、需保留透明度

常見問題

  • 中文字體缺失:確保系統安裝中文字體,或參考 CentOS 字體設定教學。
  • 大檔案 OOM:逐頁處理、增加 -Xmx、或使用 PDFRenderer 串流渲染(2.0+)。
  • 解析度不足:第二參數傳入 300f/72f(300 DPI)。

進階:PDFRenderer 高效能渲染(PDFBox 2.0+)

import org.apache.pdfbox.rendering.PDFRenderer;
// ...
PDFRenderer renderer = new PDFRenderer(doc);
BufferedImage image = renderer.renderImageWithDPI(i, 300); // 300 DPI

支援更精細的渲染控制,建議大量轉檔專案採用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved