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

iText (Lowagie) 生成 PDF 含中文與圖片完整代碼範例

     編輯:Java 相關知識

使用經典 iText 2.1.7 (lowagie) + iTextAsian.jar 生成支援中文、嵌入圖片的 PDF。注意:iText 5+ 版本授權變更 (AGPL),商業專案請確認合規或改用 Apache PDFBox / OpenPDF。

Maven 依賴

<dependency>
    <groupId>com.lowagie</groupId>
    <artifactId>itext</artifactId>
    <version>2.1.7</version>
</dependency>
<dependency>
    <groupId>com.lowagie</groupId>
    <artifactId>itext-asian</artifactId>
    <version>2.1.7</version>
</dependency>

核心代碼

Document document = new Document(PageSize.A4);
PdfWriter.getInstance(document, new FileOutputStream("c:/out.pdf"));
document.open();

// 1. 中文字體 (使用亞洲字體包內建 STSong-Light)
BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font cnFont = new Font(bf, 12, Font.NORMAL);
document.add(new Paragraph("你好,iText 中文測試!", cnFont));

// 2. 插入圖片 (自動縮放適應頁寬)
Image img = Image.getInstance("c:/photo.jpg");
img.scaleToFit(PageSize.A4.getWidth() - 72, PageSize.A4.getHeight() - 72); // 留邊距
img.setAlignment(Image.ALIGN_CENTER);
document.add(img);

// 3. 表格範例
Table table = new Table(3);
table.setBorderWidth(1);
table.setPadding(5);
table.addCell(new Cell("Header").setHeader(true).setColspan(3));
table.addCell("A1"); table.addCell("B1"); table.addCell("C1");
table.addCell("A2"); table.addCell("B2"); table.addCell("C2");
document.add(table);

document.close();

關鍵 API 提醒

  • BaseFont.NOT_EMBEDDED 不嵌入字體檔,依賴閱讀器系統字體,**PDF 體積小但跨平台顯示風險較大**;生產環境建議 BaseFont.EMBEDDED 並授權字體。
  • Image.scaleAbsolute(w,h) 強制尺寸;scalePercent(50) 百分比縮放;scaleToFit(maxW, maxH) 等比縮放至邊界內 (推薦)。
  • Table/Cell 為舊版 API,iText 5+ 改用 PdfPTable/PdfPCell,功能更強。

現代替代方案

  • OpenPDF (iText 2.1.7 LGPL 分支,Maven: com.openhtmltopdf:openhtmltopdf-pdfbox) — 免費商用。
  • Apache PDFBox — 純 Java、功能全、社群活躍。
  • Flying Saucer (xhtmlrenderer) — **HTML/CSS 轉 PDF**,排版最靈活,推薦報表類場景。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved