java如何生成pdf
使用 iText 库生成 PDF
iText 是一个广泛使用的 Java 库,专门用于创建和操作 PDF 文档。以下是使用 iText 生成 PDF 的基本步骤:
添加依赖到 Maven 项目:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
创建简单 PDF 文档:
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream("example.pdf"));
document.open();
document.add(new Paragraph("Hello, this is a PDF created with iText."));
document.close();
使用 Apache PDFBox 生成 PDF
Apache PDFBox 是另一个流行的开源 Java 库,用于处理 PDF 文档。
添加 Maven 依赖:
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.24</version>
</dependency>
创建 PDF 示例代码:
PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);
PDPageContentStream contentStream = new PDPageContentStream(document, page);
contentStream.beginText();
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
contentStream.newLineAtOffset(100, 700);
contentStream.showText("Hello PDFBox");
contentStream.endText();
contentStream.close();
document.save("pdfbox-example.pdf");
document.close();
使用 JasperReports 生成 PDF
JasperReports 是一个强大的报表生成库,可以输出多种格式包括 PDF。
添加 Maven 依赖:
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.17.0</version>
</dependency>
生成 PDF 示例:
JasperReport report = JasperCompileManager.compileReport("report.jrxml");
JasperPrint print = JasperFillManager.fillReport(report, parameters, dataSource);
JasperExportManager.exportReportToPdfFile(print, "report.pdf");
使用 OpenPDF 生成 PDF
OpenPDF 是 iText 的一个分支,提供了类似功能但采用 LGPL 和 MPL 许可证。
Maven 依赖:
<dependency>
<groupId>com.github.librepdf</groupId>
<artifactId>openpdf</artifactId>
<version>1.3.26</version>
</dependency>
创建 PDF 示例:
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream("openpdf-example.pdf"));
document.open();
document.add(new Paragraph("Generated with OpenPDF"));
document.close();
使用 Thymeleaf 模板生成 PDF
结合 HTML 模板引擎和 PDF 渲染工具可以更灵活地生成 PDF。
示例工作流程:
- 使用 Thymeleaf 生成 HTML
- 使用 Flying Saucer 将 HTML 转换为 PDF
Maven 依赖:
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-pdf</artifactId>
<version>9.1.22</version>
</dependency>
转换代码示例:

String html = "<html><body><h1>Hello PDF</h1></body></html>";
OutputStream os = new FileOutputStream("template.pdf");
ITextRenderer renderer = new ITextRenderer();
renderer.setDocumentFromString(html);
renderer.layout();
renderer.createPDF(os);
os.close();
每种方法各有优势,iText 和 OpenPDF 适合程序化生成简单 PDF,PDFBox 适合需要底层操作的情况,JasperReports 适合复杂报表,而模板方法适合基于 HTML 的设计。






