Java操作PDF首选Apache PDFBox,支持生成(含中文字体)、合并(保留格式但不自动合书签)和拆分(按页码提取)三大核心功能,代码简洁可直接运行。

Java 操作 PDF 主要靠第三方库,最常用、最稳定的是 Apache PDFBox(开源免费、纯 Java、社区活跃),其次是 iText(功能强但 7.x 版本起采用 AGPL 协议,商用需授权)。下面用 PDFBox 为主,讲清生成、合并、拆分三大核心操作,代码简洁可直接运行。
PDFBox 不内置高级排版,适合生成结构简单、内容明确的 PDF(如报表、合同、凭证)。关键步骤:创建 PDDocument → 获取 PDPage → 用 PDPageContentStream 写内容。
PDDocument doc = new PDDocument();
PDPage page = new PDPage();
doc.addPage(page);
try (PDPageContentStream cs = new PDPageContentStream(doc, page)) {
cs.beginText();
cs.setFont(PDType1Font.HELVETICA_BOLD, 14);
cs.newLineAtOffset(50, 750);
cs.showText("Hello, PDFBox!");
cs.endText();
}
doc.save("hello.pdf");
doc.close();
⚠️ 注意:坐标原点在左下角,y 值越大越靠上;中文需加载支持中文字体(如 NotoSansCJKsc-Regular.otf),否则显示方块。
立即学习“Java免费学习笔记(深入)”;
适合生成多页报告、归档扫描件、组合合同附件。PDFBox 提供 PDDocument#copyPages() 和更便捷的 PDFMergerUtility。
PDFMergerUtility merger = new PDFMergerUtility();
merger.addSource("a.pdf");
merger.addSource("b.pdf");
merger.addSource("c.pdf");
merger.setDestinationFileName("merged.pdf");
merger.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly());
✅ 合并后保留原始页面尺寸、旋转、表单域(非交互式字段);
❌ 不自动合并书签或图层(OCG),需手动处理。
常见于批量导出单页发票、按章节分离手册、提取签名页。核心是遍历源文档的页面,复制到新文档。
PDDocument src = PDDocument.load(new File("full.pdf"));
PDDocument target = new PDDocument();
for (int i = 0; i PDPage page = src.getPage(i);
target.addPage(page.copy()); // copy() 避免共享资源冲突
}
target.save("part1-3.pdf");
target.close();
src.close();
? 小技巧:用 Splitter 类可按固定页数自动切分(如每 5 页一个文件),适合大批量处理。
基本上就这些。生成重在字体与坐标控制,合并重在顺序与资源隔离,拆分重在页索引与页面复制。不复杂但容易忽略编码、内存释放和中文支持——跑通第一份 PDF 后,再加图片、水印、密码保护就顺了。
以上就是Java 怎么操作 PDF?生成、合并、拆分全教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号