本文介紹了使用itext在Java中操作pdf文件的常用方法。1. 添加itext依賴:maven項目可在pom.xml中引入itext7-core模塊,根據需要還可添加其他模塊。2. 創建pdf文檔:通過pdfwriter和document類創建空白文檔并添加段落內容。3. 讀取pdf文本:使用pdfreader和pdftextextractor提取頁面文字,適用于有文本層的pdf文件。4. 修改現有pdf:如添加水印,可通過canvas在每頁繪制透明文字,并可設置樣式與旋轉角度。
操作PDF文件在很多Java項目中是常見的需求,比如生成發票、報告或者處理表單數據。iText 是一個非常流行的 Java 庫,可以用來創建、讀取和修改 PDF 文件。本文就來聊聊如何用 iText 來實現一些常用的操作。
添加iText依賴
要使用 iText,首先要把它引入你的項目中。如果你用的是 Maven 項目,可以在 pom.xml 中添加如下依賴:
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itext7-core</artifactId> <version>7.1.15</version> </dependency>
注意版本號可能會更新,建議查看官網或倉庫確認最新版本。gradle 用戶可以用類似方式添加依賴。
立即學習“Java免費學習筆記(深入)”;
另外,iText 從 7 版本開始分成了多個模塊,如果你需要處理 PDF 表單或加密功能,可能還需要額外引入對應的模塊。
創建一個簡單的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 功能強大但細節多,初學者可以從創建簡單文檔開始,逐步掌握更復雜的功能。實際開發中遇到問題時,記得查閱官方文檔或社區資源。