怎樣用Java操作PDF文件?iText庫使用教程

本文介紹了使用itext在Java中操作pdf文件的常用方法。1. 添加itext依賴:maven項目可在pom.xml中引入itext7-core模塊,根據需要還可添加其他模塊。2. 創建pdf文檔:通過pdfwriter和document類創建空白文檔并添加段落內容。3. 讀取pdf文本:使用pdfreader和pdftextextractor提取頁面文字,適用于有文本層的pdf文件。4. 修改現有pdf:如添加水印,可通過canvas在每頁繪制透明文字,并可設置樣式與旋轉角度。

怎樣用Java操作PDF文件?iText庫使用教程

操作PDF文件在很多Java項目中是常見的需求,比如生成發票、報告或者處理表單數據。iText 是一個非常流行的 Java 庫,可以用來創建、讀取和修改 PDF 文件。本文就來聊聊如何用 iText 來實現一些常用的操作。

怎樣用Java操作PDF文件?iText庫使用教程


添加iText依賴

要使用 iText,首先要把它引入你的項目中。如果你用的是 Maven 項目,可以在 pom.xml 中添加如下依賴:

怎樣用Java操作PDF文件?iText庫使用教程

<dependency>     <groupId>com.itextpdf</groupId>     <artifactId>itext7-core</artifactId>     <version>7.1.15</version> </dependency>

注意版本號可能會更新,建議查看官網或倉庫確認最新版本。gradle 用戶可以用類似方式添加依賴。

立即學習Java免費學習筆記(深入)”;

另外,iText 從 7 版本開始分成了多個模塊,如果你需要處理 PDF 表單或加密功能,可能還需要額外引入對應的模塊。

怎樣用Java操作PDF文件?iText庫使用教程


創建一個簡單的PDF文檔

這是最基礎的用法:創建一個空白 PDF 并寫入一些文字。下面是核心代碼示例:

import com.itextpdf.kernel.pdf.PdfWriter; import com.itextpdf.layout.Document; import com.itextpdf.layout.element.Paragraph;  public class CreatePdf {     public static void main(String[] args) throws Exception {         PdfWriter writer = new PdfWriter("hello.pdf");         Document document = new Document(writer);         document.add(new Paragraph("Hello, iText!"));         document.close();     } }

上面這段代碼做了幾件事:

  • 創建了一個 PdfWriter 實例,指向輸出文件路徑。
  • 使用這個 writer 構建了一個 Document 對象。
  • 向文檔中添加了一個段落。
  • 最后關閉了文檔以確保內容寫入磁盤。

這只是一個起點,你可以在這個基礎上加圖片、表格、樣式等。


讀取并提取PDF文本內容

有時候你不需要創建 PDF,而是想從已有 PDF 中提取文字內容。這時候可以用 iText 的 PdfReader 和 LocationTextExtractionStrategy:

import com.itextpdf.kernel.pdf.PdfReader; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.canvas.parser.PdfTextExtractor;  public class ReadPdf {     public static void main(String[] args) throws Exception {         PdfReader reader = new PdfReader("hello.pdf");         PdfDocument pdfDoc = new PdfDocument(reader);         int pages = pdfDoc.getNumberOfPages();          for (int i = 1; i <= pages; i++) {             String text = PdfTextExtractor.getTextFromPage(pdfDoc.getPage(i));             System.out.println(text);         }          pdfDoc.close();         reader.close();     } }

幾點說明:

  • getTextFromPage() 返回的是頁面上的所有文本內容。
  • 如果你處理的是掃描件或圖片轉 PDF 的內容,這種方式可能無法提取文字,因為沒有嵌入文本層。
  • 提取出來的內容格式可能不太整齊,需要后續清洗。

修改現有PDF(例如添加水?。?/h3>

修改 PDF 是比較高級的功能。比如,我們可以給每一頁加上一個水印文字。主要思路是打開一個已有 PDF,在每頁上繪制透明文字:

import com.itextpdf.kernel.pdf.*; import com.itextpdf.layout.Canvas; import com.itextpdf.layout.element.Paragraph; import com.itextpdf.kernel.colors.ColorConstants; import com.itextpdf.kernel.geom.PageSize;  public class AddWatermark {     public static void main(String[] args) throws Exception {         PdfReader reader = new PdfReader("input.pdf");         PdfWriter writer = new PdfWriter("output_with_watermark.pdf");         PdfDocument pdfDoc = new PdfDocument(reader, writer);          int pageCount = pdfDoc.getNumberOfPages();         for (int i = 1; i <= pageCount; i++) {             PdfPage page = pdfDoc.getPage(i);             PageSize pageSize = page.getPageSize();             Canvas canvas = new Canvas(page, pageSize);             canvas.setFontColor(ColorConstants.LIGHT_GRAY)                   .setFontSize(60)                   .showTextAligned("CONFIDENTIAL", pageSize.getWidth() / 2, pageSize.getHeight() / 2, i,                           com.itextpdf.layout.property.TextAlignment.CENTER,                           com.itextpdf.layout.property.VerticalAlignment.MIDDLE,                           45); // 旋轉角度             canvas.close();         }          pdfDoc.close();     } }

關鍵點包括:

  • 使用 Canvas 在頁面上繪圖。
  • 設置字體顏色為淺灰色,避免遮擋原有內容。
  • 設置旋轉角度讓水印傾斜顯示。

這種方式還可以用來添加頁碼、簽名、邊框等內容。


基本上就這些。iText 功能強大但細節多,初學者可以從創建簡單文檔開始,逐步掌握更復雜的功能。實際開發中遇到問題時,記得查閱官方文檔或社區資源。

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享