为什么需要在Java中生成PDF?
在企业级应用开发中,经常需要将数据导出为PDF格式,用于报表打印、合同生成、电子发票等场景。Java生态中有多个成熟的库支持PDF生成。
常用Java PDF库
- iText:功能强大,支持高级PDF操作(如加密、表单、水印)。
- Apache PDFBox:开源免费,适合基础PDF创建与解析。
- Flying Saucer + Thymeleaf/FreeMarker:通过HTML模板生成PDF,适合复杂排版。
iText 示例代码
使用 iText 7 创建一个简单的PDF文件:
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
public class PdfExample {
public static void main(String[] args) throws Exception {
PdfWriter writer = new PdfWriter("example.pdf");
PdfDocument pdf = new PdfDocument(writer);
Document document = new Document(pdf);
document.add(new Paragraph("Hello, Java PDF!"));
document.close();
}
}
Apache PDFBox 示例
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
public class PdfBoxExample {
public static void main(String[] args) throws Exception {
PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);
PDPageContentStream content = new PDPageContentStream(document, page);
content.beginText();
content.setFont(PDType1Font.HELVETICA_BOLD, 12);
content.newLineAtOffset(100, 700);
content.showText("Hello from PDFBox!");
content.endText();
content.close();
document.save("pdfbox-example.pdf");
document.close();
}
}
注意事项
- iText 5+ 商业用途需购买许可证;iText 7 社区版可用于 AGPL 兼容项目。
- 中文支持需加载中文字体(如 Noto Sans CJK)以避免乱码。
- 建议结合模板引擎(如 Thymeleaf)实现动态内容填充。