Java生成PDF文件

iText, PDFBox等库的使用指南与实战代码

引言

在企业应用开发中,经常需要将数据导出为PDF格式的文档,如生成报表、合同、发票等。Java作为企业级开发的主流语言,提供了多种生成PDF文件的解决方案。本专题将详细介绍如何使用Java生成PDF文件,帮助开发者快速掌握相关技术。

我们将重点介绍两个最流行的开源库:iTextApache PDFBox,并通过实际代码示例展示它们的使用方法。

iText 库

iText 是一个功能强大的Java库,用于创建和操作PDF文档。它支持复杂的布局、表格、图像、字体嵌入等功能。

添加依赖

如果你使用Maven,添加以下依赖:

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13.3</version>
</dependency>

基本使用示例

以下是一个使用iText生成简单PDF文件的示例:

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;

import java.io.FileOutputStream;
import java.io.IOException;

public class PdfGenerator {
    public static void main(String[] args) {
        Document document = new Document();
        try {
            PdfWriter.getInstance(document, new FileOutputStream("hello.pdf"));
            document.open();
            document.add(new Paragraph("Hello, this is a PDF generated with iText!"));
            document.add(new Paragraph("当前时间: " + new java.util.Date()));
            System.out.println("PDF文件已生成: hello.pdf");
        } catch (DocumentException | IOException e) {
            e.printStackTrace();
        } finally {
            document.close();
        }
    }
}

Apache PDFBox

Apache PDFBox 是另一个流行的开源Java工具,用于处理PDF文档。它既可以创建新的PDF,也可以读取和修改现有的PDF文件。

添加依赖

Maven依赖配置:

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.27</version>
</dependency>

基本使用示例

使用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;

import java.io.IOException;

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, 18);
                contentStream.newLineAtOffset(100, 700);
                contentStream.showText("Hello from Apache PDFBox!");
                contentStream.newLineAtOffset(0, -25);
                contentStream.setFont(PDType1Font.COURIER, 14);
                contentStream.showText("Generated on: " + new java.util.Date());
                contentStream.endText();
            }

            document.save("pdfbox_hello.pdf");
            System.out.println("PDF文件已生成: pdfbox_hello.pdf");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

选择建议

  • iText:功能更丰富,API设计更直观,适合需要复杂布局和样式的场景。但要注意版本许可问题(iText 7之后采用AGPL)。
  • PDFBox:Apache许可证,更宽松,适合需要读取/修改现有PDF的场景。API相对底层一些。
  • 对于简单的PDF生成需求,两者都能胜任。建议根据项目许可要求和具体功能需求进行选择。

常见问题

中文乱码怎么办?

需要嵌入中文字体,例如:

// iText中使用中文字体
BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font font = new Font(bf, 12);
document.add(new Paragraph("你好,世界!", font));

如何添加表格?

iText提供了PdfPTable类,PDFBox需要手动绘制表格线和填充内容。

三国志7郑玄 - 武将介绍与历史背景 | 三国策略游戏专题 Word带下划线的怎么只删除字 - 保留格式技巧指南 SolidWorks存成什么文件能打开?常见格式全解析 电脑怎么打开OFD文件?详细方法教程 Word背景适应尺寸设置方法 - 完整图文教程 Word深色模式怎么关闭?详细图文教程 Word两个字间隔很大 - Word排版技巧专题 三国志三美无双版 - 貂蝉、甄宓、大乔倾城登场 DWG文件查看器 - 免费在线浏览DWG图纸 三国志10诸葛亮专题 - 智慧化身,卧龙出山 Word替换两个字符之间的文字 - 详细操作指南 三国鲍勋 - 忠直之臣的生平与历史评价 | 三国志专题 Word文档空格后字不见了?原因与解决方法全解析 三国志11杜畿专题 - 武将属性与策略应用详解 三国志10陆逊专题 - 能力、技能与使用攻略 Word怎么做邮件?手把手教你用Word邮件合并功能群发邮件 Word电子公章怎么制作 - 实用教程与技巧 视频怎么做成Word文档?5种实用方法详解 SolidWorks查看文件所在位置 - 快速定位CAD设计文件路径 手机怎么下载PDF文件?详细操作指南 三国志·曹睿明帝纪 - 曹魏第二位皇帝生平与历史解析 女儿三国志游戏 - 体验别样三国策略冒险 Word文档压缩大小 - 5种简单方法减小Word文件体积 Word文档如何调整字间距 - 详细图文教程 Word兼容模式详解 - 解决文档格式错乱问题 Word没自动保存怎么恢复?未保存文档找回方法大全 三国志崔琰传注释 - 陈寿《三国志》原文与白话解析 DXF文件打开空白?原因与解决方案全解析 怎么以Word形式发文件?详细操作指南 htm文件怎么改成word?简单几步教你轻松转换 三国志9游戏攻略 - 全面指南与技巧分享 陈熙三国 - 三国志策略专题站 Word文档怎么顶头写字?详细图文教程教你从文档最顶端开始输入 三国志·孔融传原文 - 陈寿《三国志》魏书名士列传 王凌三国志评价 - 三国历史人物深度解析 三国志14华雄 - 武将介绍、技能解析与战术应用 Word电脑软件使用指南 - 功能详解与办公技巧 Word文档页数如何设置 - 详细图文教程 spackdesk - 高效桌面管理工具专题页 OFD文件怎么打开查看?5种简单方法教你轻松阅读OFD文档 Word文档撤回键无法使用?快速解决方法大全 如何比较两个Word文件内容的不同 - 详细方法指南 三国志11文聘觉醒全攻略 - 武将觉醒条件与能力解析 Word接受所有修订 - 完整操作指南与技巧 三国志11培养武将攻略 - 全面指南与技巧分享 三国志11松柏二仙MOD专题 - 经典策略游戏的全新演绎 三国潘氏专题 - 探秘东吴潘氏家族的历史风云 三国志12加强版 - 经典策略游戏深度专题 吴兰三国 - 三国志历史人物专题 | 阿达三国志2025 Word分页快捷键大全 | 快速掌握Ctrl+Enter插入分页技巧 SolidWorks三维文件格式详解 - 常见格式用途与转换指南 三国志吕蒙 - 从武夫到儒将的传奇人生 | 三国志专题 Word文档下滑横线怎么打?多种方法详解 Word文档显示比例设置指南 - 调整缩放级别获得最佳阅读体验 Word表格空一截调不上去?解决方法大全 三国志9隐藏要素全解析 - 隐藏武将、事件与彩蛋指南 Word如何审阅修订 - 完整操作指南与技巧 三国汴禧 - 重温经典三国策略传奇 Word表格如何调整行距 - 实用教程与技巧 三国人物志:东汉名将臧旻 - 生平与事迹 Win10 ISO文件下载与安装指南 - 获取官方纯净系统镜像 田续三国 - 三国人物田续生平事迹专题 Word行距调不动怎么办?原因分析与解决方法大全 三国志战略版主公攻略 - 最新阵容与战法搭配指南 Word里表格怎么加一列 - 详细图文教程 Word表格无法缩小行高?原因与解决方法全解析 三国志2三美版下载 - 经典策略游戏怀旧专题 三国志5英雄之路 - 经典策略游戏武将成长专题 Word文档批量删除重复文字 - 简单高效的批量处理方法 三国志卢植怎么用?全面使用攻略与阵容搭配指南 三国傅婴 - 乱世巾帼英雄传 | 三国志专题 三国志9 攻略大全 - 内政军事武将培养全解析 三国王戎 - 三国志历史人物专题 spacedesk安卓怎么下载?最新版安装教程与使用指南 如何把表格转换成Word文档 - 实用办公技巧指南 三国周术 - 东汉末年名士生平与历史贡献专题 三国志战略版八本攻略 - 全面解析八级主城发展策略 三国志·魏志·王肃传 - 王肃生平与历史贡献专题 Word突然无法输入中文?原因分析与解决方法大全 Shadowsocks配置文件详解 - 参数说明与使用指南 Word文档背景颜色设置方法 - 详细图文教程 Word怎么调出文件选项?详细图文教程 SolidWorks能打开的文件格式大全 | 支持的CAD与3D模型类型 手机怎么打开OFD文件?详细操作方法指南 三国志7怎么升官?详细升官攻略与技巧指南 三国志13总销量 - 全球策略游戏销量数据与分析 Word文本效果渐变填充怎么设置?详细图文教程 三国志王允专题 - 东汉忠臣与连环计的策划者 Word排版标准格式规范 - 官方指南与实用技巧 手机如何解压OBB文件?简单方法教程 手机so文件编辑器 - Android so文件查看与编辑工具推荐 Word文字离页边距太远?一文教你快速解决 | 文档排版问题指南 三国志11句扶属性详解 - 武将能力、特技与使用攻略 Word删除所有批注 - 快速清除文档批注方法指南 SRT文件转TXT - 免费在线字幕转文本工具 三国志11告密谋反机制详解 - 谋略与内政深度攻略 so文件格式怎么打开?详细解析与使用方法 Word文档怎么扩大宽度?详细操作步骤教程 spacedesk如何有线连接?详细教程与设置方法 vsd格式文件怎么打开 - 完整指南与解决方案