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

PDFBox 深度解析:Java 操作 PDF 的利器

     編輯:Java 相關知識

前言

PDF 作為企業文件交換標準,Java 生態早期缺乏成熟操作庫。PDFBox (BSD 授權) 為純 Java 實作,提供文本提取、加密解密、表單填寫、Lucene 整合等功能,填補此空白。

核心架構:雙層模型

  • COS 模型 (org.pdfbox.cos):直接對應 PDF 內部物件(陣列、布林、字典、數字、字串、串流),操作底層結構,需深入理解 PDF 規範。
  • PD 模型 (org.pdfbox.pdfmodel):封裝 COS 模型,提供 PDPage、PDFont 等高階 API,開發效率高。必要時可透過 getCOSObject() 回到底層操作。

常見操作範例

1. 載入與關閉文件

PDDocument document = PDDocument.load(new File("test.pdf"));
try {
    // 操作文件
} finally {
    document.close(); // 必須釋放資源(含臨時檔)

2. 文本提取與 Lucene 整合

// 一行程式碼建立 Lucene Document
Document luceneDoc = LucenePDFDocument.getDocument(new File("test.pdf"));
// 進階控制:繼承 PDFTextStripper 覆寫 showCharacter() 可依座標篩選文本

PDFBox 自動處理字體編碼、壓縮串流、文字排序等複雜問題,提取結果與閱讀器一致。

3. 加密與解密

PDDocument pdf = PDDocument.load("test.pdf");
PDStandardEncryption enc = new PDStandardEncryption();
enc.setCanPrint(false); // 禁止列印
pdf.setEncryptionDictionary(enc);
pdf.encrypt("masterPwd", null); // 設定擁有者密碼,使用者密碼為 null
pdf.save("test-encrypted.pdf");

4. 表單填寫與資料導入導出

PDDocument pdf = PDDocument.load("i-9.pdf");
PDAcroForm form = pdf.getDocumentCatalog().getAcroForm();
form.getField("NAME1").setValue("Smith");
pdf.save("i-9-filled.pdf");

// 導出 FDF/XFDF
FDFDocument fdf = form.exportFDF();
fdf.save("data.fdf");

流程:建立 Acrobat 表單模板 → 記錄欄位名 → 程式填充 → 輸出 PDF。

命令列工具

PDFBox 內建多款工具(PrintFields、SetField、PDFToText 等),無需撰寫程式即可完成常見任務。

現況與展望

  • 弱項:從零建立 PDF 能力較弱,可搭配 Apache FOP (XML→PDF) 或 iText (高階排版)。
  • 新版將支援 PDF 1.5 物件串流、交叉參考串流、內嵌字體與圖片。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved