Java中生成PDF:最佳库概览(iText、Apache PDFBox、OpenPDF)

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

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

开始课程

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

创建PDF文档是Java企业级和Web应用程序中的常见任务之一:从生成报告和发票到数据导出和电子书创建。在Java中,有几种成熟的库,各有其优势。在本文中,我们将介绍三个主要的库:iText、Apache PDFBox和OpenPDF,提供代码示例,并帮助您选择合适的工具。



1. iText — 功能强大,但需商业许可证

iText是最流行的PDF处理库。它提供对内容的完全控制:文本、图像、表格、表单、水印、签名。从5.5.x版本开始,iText采用双重许可证:AGPL(对开源项目免费)和商业许可证(用于专有软件)。7.x版本(iText 7)更现代、模块化且性能更高。



示例:使用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 CreatePdfWithIText { public static void main(String[] args) throws Exception { String dest = "output_itext.pdf"; PdfWriter writer = new PdfWriter(dest); PdfDocument pdf = new PdfDocument(writer); Document document = new Document(pdf); document.add(new Paragraph("你好,PDF世界!")); document.add(new Paragraph("这是使用iText 7创建的。")); document.close(); System.out.println("PDF成功创建:" + dest); }}


iText的优点:

  • 最大灵活性:支持表格、列表、样式、字体、图像。
  • 支持PDF/A、加密、数字签名。
  • 高性能和高质量的渲染。

缺点:

  • 复杂的许可证(AGPL)——商业使用需要购买。
  • API较为庞大,需要学习。


2. Apache PDFBox — 免费且开源

Apache PDFBox是一个开源库(Apache 2.0许可证),允许创建、编辑和提取PDF内容。与iText不同,PDFBox不需要为专有项目购买商业许可证。它还支持表单处理、加密、字体嵌入。



示例:使用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 java.io.IOException;

public class CreatePdfWithPdfBox { 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.beginText(); contentStream.setFont(PDType1Font.HELVETICA, 14); contentStream.newLineAtOffset(50, 700); contentStream.showText("你好,PDF世界!"); contentStream.newLineAtOffset(0, -20); contentStream.showText("这是使用Apache PDFBox创建的。"); contentStream.endText(); } document.save("output_pdfbox.pdf"); System.out.println("PDF成功创建:output_pdfbox.pdf"); } }}


Apache PDFBox的优点:

  • 完全免费(Apache 2.0许可证)——适用于任何项目。
  • 支持提取文本、图像、元数据

推荐