Java PDF报告生成:库与工具概览
创建PDF文档是企业级Java开发中最常见的任务之一。报告、账单、发票、分析仪表板——所有这些都需要灵活且高效的工具。在本文中,我们将介绍四种用于Java生成PDF的核心库:Apache PDFBox、iText、JasperReports和OpenPDF。我们将探讨它们的优势、代码示例以及使用场景。
1. Apache PDFBox — 底层创建与编辑
Apache PDFBox 是一个开源库(Apache 2.0许可证),允许您从头创建PDF文档,以及编辑、提取文本和填写表单。其主要优势在于对内容的完全控制:您可以直接操作文档对象。
创建简单PDF的示例:
import org.apache.pdfbox.pdmodel.*;import org.apache.pdfbox.pdmodel.font.PDType1Font;import java.io.IOException;
public class PdfBoxExample { public static void main(String[] args) throws IOException { try (PDDocument document = new PDDocument()) { PDPage page = new PDPage(); document.addPage(page);
try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) { contentStream.setFont(PDType1Font.HELVETICA_BOLD, 14); contentStream.beginText(); contentStream.newLineAtOffset(100, 700); contentStream.showText("你好,PDFBox世界!"); contentStream.endText(); }
document.save("output.pdf"); System.out.println("PDF已创建!"); } }}何时使用:当需要对每个元素进行精细控制时(例如,生成复杂图表或填写表单)。不适合需要预先排版的大量文本。
2. iText — 用于复杂报告的商业级强大工具
iText 是行业事实上的标准。它有两个版本:iText 7 Community (AGPL) 和 iText 7 Commercial (商业许可证)。该库支持HTML转PDF、创建交互式表单、数字签名、加密等功能。
生成带表格PDF的示例:
import com.itextpdf.kernel.pdf.*;import com.itextpdf.layout.*;import com.itextpdf.layout.element.*;
public class ITextExample { public static void main(String[] args) throws Exception { PdfWriter writer = new PdfWriter("report.pdf"); PdfDocument pdfDoc = new PdfDocument(writer); Document document = new Document(pdfDoc);
document.add(new Paragraph("月度报告")); Table table = new Table(2); table.addCell("指标"); table.addCell("数值"); table.addCell("收入"); table.addCell("1,250,000 卢布"); table.addCell("支出"); table.addCell("890,000 卢布"); document.add(table);
document.close(); System.out.println("报告已就绪!"); }}何时使用:用于需要高性能、支持复杂排版以及法律效力文档(签名、加密)的商业项目。注意:AGPL版本在分发时需要开放代码。
3. JasperReports — 基于JRXML模板的生成
JasperReports 不仅仅是一个库,更是一个用于创建报告的完整生态系统。您可以用XML格式(或通过可视化编辑器Jaspersoft Studio)描述模板,然后库用来自数据库、集合或JSON的数据填充它。结果可以导出为PDF、Excel、HTML、CSV等格式。
程序化填充模板的示例:
import net.sf.jasperre