Java使用itext pdf生成PDF文檔
Java使用itextpdf生成PDF文檔
在日常開發中,我們經常需要生成各種類型的文檔,其中PDF是最常用的一種格式。本文將介紹如何使用Java和iText庫生成包含中文內容的PDF文檔,并通過一個具體的示例來展示整個過程。
1. 引言
PDF(Portable Document Format)是一種廣泛使用的文件格式,它能夠保持文檔的原始格式和布局,適用于跨平臺共享和打印。在Java中,我們可以使用iText庫來創建和操作PDF文檔。本文將展示如何使用iText生成包含中文內容的PDF文檔,并確保中文字符正確顯示。
2. 準備工作
2.1 添加依賴
首先,我們需要在項目中添加iText庫的依賴。如果你使用的是Maven項目,可以在pom.xml
文件中添加以下依賴:
Xml深色版本
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version>
</dependency>
此外,為了方便處理文件路徑和流操作,我們還可以引入Hutool庫:
Xml深色版本
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.31</version>
</dependency>
2.2 準備字體文件
由于PDF默認不支持中文字符,我們需要準備一個支持中文的字體文件,例如Dengl.ttf
。將該字體文件放置在項目的合適位置,以便后續加載使用。
3. 代碼實現
3.1 創建PDF文檔
以下是生成包含中文內容的PDF文檔的完整代碼示例:
Java深色版本
package com.util.pdf;import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;import java.io.FileOutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;public class AstartPDFExport {public static void main(String[] args) {Document document = new Document();try {PdfWriter.getInstance(document, Files.newOutputStream(Paths.get("xxxx.pdf")));document.open();// 加載中文字體BaseFont bf = BaseFont.createFont("Font/Dengl.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);Font font = new Font(bf, 9);// 添加標題Font boldFont = new Font(bf, 12, Font.BOLD);Paragraph title = new Paragraph("一個小浪吳呀", boldFont);title.setAlignment(Element.ALIGN_CENTER);document.add(title);// 添加日期Paragraph date = new Paragraph("2025-06-18", font);date.setAlignment(Element.ALIGN_RIGHT);date.setSpacingAfter(10);document.add(date);// 創建表格PdfPTable table = new PdfPTable(2); // 表格有兩列table.setWidthPercentage(100);float[] columnWidths = {30f, 70f}; // 第一列占 30%,第二列占 70%table.setWidths(columnWidths);addCell(table, "一個小浪吳呀", "一個小浪吳呀", font);// 付款明細表格PdfPTable detailsTable = new PdfPTable(5); // 五列detailsTable.setWidthPercentage(100);float[] detailColumnWidths = getColumnWidths(5, 30f);detailsTable.setWidths(detailColumnWidths);// 表頭String[] headers = {" 明細", " 商品", " 價格", " 數量", " 備注"};int minimumHeight = 20;for (String header : headers) {PdfPCell headerCell = new PdfPCell(new Paragraph(header, font));headerCell.setMinimumHeight(minimumHeight);headerCell.setHorizontalAlignment(Element.ALIGN_LEFT);detailsTable.addCell(headerCell);}// 數據行PdfPCell cell;cell = new PdfPCell(new Paragraph(" 一個小浪吳呀", font));cell.setHorizontalAlignment(Element.ALIGN_LEFT);cell.setMinimumHeight(minimumHeight);detailsTable.addCell(cell);document.add(detailsTable);// 收款賬戶信息Paragraph accountInfo = new Paragraph("AAAA 一個小浪吳呀\n" +"BBBB 一個小浪吳呀\n" +"CCCC 一個小浪吳呀\n" +"DDDD 一個小浪吳呀\n" +"EEEE 一個小浪吳呀\n" +"FFFF 一個小浪吳呀", font);document.add(accountInfo);document.close();} catch (Exception e) {e.printStackTrace();}}private static void addCell(PdfPTable table, String label, String value, Font font) {PdfPCell cell = new PdfPCell(new Paragraph(label, font));cell.setPadding(5);table.addCell(cell);cell = new PdfPCell(new Paragraph(value, font));cell.setPadding(5);table.addCell(cell);}public static float[] getColumnWidths(int totalColumns, float firstColumnWidthPercent) {if (totalColumns < 1) throw new IllegalArgumentException("至少需要一列");float[] widths = new float[totalColumns];widths[0] = firstColumnWidthPercent;float remainingWidth = 100 - firstColumnWidthPercent;float otherColumnWidth = remainingWidth / (totalColumns - 1);for (int i = 1; i < totalColumns; i++) {widths[i] = otherColumnWidth;}return widths;}
}
3.2 運行結果
運行上述代碼后,將會生成一個名為xxxx.pdf
的PDF文件。以下是生成的PDF文件的效果圖:
4. 總結
本文介紹了如何使用Java和iText庫生成包含中文內容的PDF文檔。通過加載合適的中文字體文件,我們可以確保中文字符在PDF中正確顯示。希望本文對你有所幫助,如果你有任何問題或建議,請隨時留言交流。