根據數據庫動態數據,填充 PDF 模板(含標題、正文、表格),生成報表/合同/證書等。
Table、Cell),**商業項目需購買授權或開源項目遵守 AGPL**。setField),適合固定版面證書/表單。Document、Table、Paragraph,適合數據驅動報表。pdfHTML 插件將 HTML/CSS 模板轉 PDF,前端同事可維護模板,靈活度最高。
// 1. 讀取模板或創建新文檔
PdfDocument pdfDoc = new PdfDocument(new PdfWriter("report.pdf"));
Document doc = new Document(pdfDoc);
// 2. 標題
doc.add(new Paragraph("月度銷售報表").setTextAlignment(TextAlignment.CENTER).setFontSize(18));
// 3. 動態表格
Table table = new Table(new float[]{2, 3, 2, 2, 2}); // 列寬比例
table.addHeaderCell("產品").addHeaderCell("規格").addHeaderCell("單價").addHeaderCell("數量").addHeaderCell("金額");
// 4. 數據庫查詢數據填充
List items = saleService.findMonthly(month);
for (SaleItem item : items) {
table.addCell(item.getProduct());
table.addCell(item.getSpec());
table.addCell(String.valueOf(item.getPrice()));
table.addCell(String.valueOf(item.getQty()));
table.addCell(String.valueOf(item.getAmount()));
}
// 5. 合計行
table.addCell(new Cell(1,4).add("合計").setTextAlignment(TextAlignment.RIGHT));
table.addCell(String.valueOf(totalAmount));
doc.add(table);
doc.close();
table.setKeepTogether(false) 允許跨頁,setHorizontalAlignment() 控制對齊。PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", true) 或嵌入 msyh.ttf。NumberFormat.getCurrencyInstance(Locale.CHINA).format(amount)。doc.setRenderer() 緩衝、使用 PdfDocument.flush()。完整教程:iText 動態生成 PDF 詳解
選對策略(AcroForm/動態構建/HTML轉PDF),iText 可滿足從簡單證書到複雜財務報表的全譜系需求。