Java中生成PDF:iText、Apache PDFBox、OpenPDF库概述

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java中生成PDF:流行库概述



创建PDF文档是Java企业级和教育开发中的常见任务之一。报告、发票、证书、学习材料——所有这些都方便导出为PDF格式。Java中有几个成熟的库,既支持从头创建PDF,也支持编辑现有文件。在本文中,我们将介绍三种最流行的工具:iText、Apache PDFBox和OpenPDF。



1. iText——功能强大,但存在许可限制



iText是最著名的Java PDF处理库。它自2000年问世,支持该格式的几乎所有功能:文本、表格、图像、水印、注释、签名等等。



然而,iText有一个重要的注意事项:从5.5.x版本开始,该库采用双重许可发布。如果您不将应用程序开源,则商业使用需要购买AGPL许可。对于公开可用的教育项目,基于AGPL的iText 5.x版本是合适的。



使用iText 5创建包含文本和表格的简单PDF示例:



import com.itextpdf.text.*;import com.itextpdf.text.pdf.PdfPTable;import com.itextpdf.text.pdf.PdfWriter;import java.io.FileOutputStream;

public class ITextExample { public static void main(String[] args) throws Exception { Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream("example_itext.pdf")); document.open();

// 标题 document.add(new Paragraph("使用iText的PDF示例", FontFactory.getFont(FontFactory.HELVETICA_BOLD, 18)));

// 表格 PdfPTable table = new PdfPTable(3); table.addCell("列1"); table.addCell("列2"); table.addCell("列3"); table.addCell("数据1"); table.addCell("数据2"); table.addCell("数据3"); document.add(table);

document.close(); System.out.println("PDF已创建:example_itext.pdf"); }}


2. Apache PDFBox——免费且开源



Apache PDFBox是一个完全免费的库,采用Apache 2.0许可。它对商业使用没有限制,并提供用于处理PDF的低级API。PDFBox允许创建文档、提取文本、填写表单、处理图像,甚至创建复杂的布局。



PDFBox的主要优势在于其灵活性和无需许可费用。缺点是对于简单任务,其API不如iText方便,并且需要更多代码进行格式化。



使用PDFBox 2.x创建包含文本和表格的PDF示例:



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;import org.apache.pdfbox.pdmodel.common.PDRectangle;import java.io.IOException;

public class PDFBoxExample { public static void main(String[] args) throws IOException { try (PDDocument document = new PDDocument()) { PDPage page = new PDPage(PDRectangle.A4); document.addPage(page);

try (PDPageContentStream cs = new PDPageContentStream(document, page)) { // 标题 cs.setFont(PDType1Font.HELVETICA_BOLD, 18); cs.beginText(); cs.newLineAtOffset(50, 750); cs.showText("使用PDFBox的PDF示例"); cs.endText();

// 简单表格(模拟) cs.setFont(PDType1Font.HELVETICA, 12); cs.setLineWidth(1f); // 手动绘制表格线(简化版) for (int i = 0; i < 4;

推荐