为什么使用Java生成PDF?
在企业级应用中,经常需要将数据导出为PDF格式,如发票、报告、合同等。Java提供了多种成熟的库来实现这一功能,其中最常用的是 iText 和 Apache PDFBox。
使用 iText 生成PDF(推荐)
iText 是一个功能强大的开源库,支持创建、修改和解析PDF文档。
Maven依赖
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext7-core</artifactId>
<version>7.2.5</version>
<type>pom</type>
</dependency>
简单示例代码
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 GeneratePdfExample {
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 生成PDF
PDFBox 是 Apache 基金会维护的另一个优秀PDF处理库。
Maven依赖
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.27</version>
</dependency>
简单示例代码
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 contentStream = new PDPageContentStream(document, page);
contentStream.beginText();
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
contentStream.newLineAtOffset(100, 700);
contentStream.showText("Hello from Apache PDFBox!");
contentStream.endText();
contentStream.close();
document.save("pdfbox-example.pdf");
document.close();
}
}
常见问题
- 中文乱码? 使用支持中文的字体(如 Noto Sans CJK),并确保字体文件已正确加载。
- 如何添加图片或表格? iText 和 PDFBox 都支持高级布局元素,可查阅官方文档。
- 许可证问题? iText 7 社区版适用于 AGPL 开源项目;商业用途需购买许可证。