在企业级应用开发中,将数据导出为PDF格式是一项常见需求。本文将介绍使用Java生成PDF文件的主流方案、核心库以及实际代码示例。
无论你是需要生成报表、合同还是发票,掌握这些技术都能帮你高效完成任务。
功能强大且成熟的PDF生成库,支持复杂的布局、表格、字体嵌入和加密等功能。
注意:iText 7及以上版本对商业用途有许可证限制。
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13.3</version>
</dependency>
Apache开源项目,免费用于商业用途,适合创建、操作和打印PDF文档。
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.27</version>
</dependency>
iText 2.1.7的社区维护分支,MIT许可证,可自由用于商业项目。
<dependency>
<groupId>com.github.librepdf</groupId>
<artifactId>openpdf</artifactId>
<version>1.3.30</version>
</dependency>
以下是一个简单的Java程序,使用iText生成包含文本的PDF文件:
import com.itextpdf.text.Document;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileOutputStream;
public class PdfGenerator {
public static void main(String[] args) {
try {
// 创建文档对象
Document document = new Document();
// 创建PdfWriter实例
PdfWriter.getInstance(document, new FileOutputStream("sample.pdf"));
// 打开文档
document.open();
// 添加内容
document.add(new Paragraph("Hello, 这是由Java生成的PDF文件!"));
document.add(new Paragraph("当前时间: " + new java.util.Date()));
// 关闭文档
document.close();
System.out.println("PDF文件已生成: sample.pdf");
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用PDFBox创建简单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;
public class PdfBoxExample {
public static void main(String[] args) {
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_BOLD, 12);
contentStream.newLineAtOffset(100, 700);
contentStream.showText("使用Apache PDFBox生成的PDF");
contentStream.endText();
}
document.save("pdfbox_sample.pdf");
System.out.println("PDF已保存: pdfbox_sample.pdf");
} catch (Exception e) {
e.printStackTrace();
}
}
}