上一篇
如何用com.itextpdf.text.document API高效生成PDF文档
- 行业动态
- 2025-04-16
- 5
com.itextpdf.text.Document是iText库中创建PDF文档的核心类,提供初始化文档、添加文本/表格/图片等功能,支持页面属性设置与内容排版,适用于动态生成报表、表单等场景,简化Java应用中的PDF生成流程。
com.itextpdf.text.Document
是 iText 库中用于创建和操作 PDF 文件的核心类之一,它提供了一系列方法,帮助开发者定义 PDF 的页面结构、添加内容(如文本、表格、图片等)并控制文档的元信息(如标题、作者),以下内容将详细介绍其功能、使用方法及注意事项,确保内容符合技术性、权威性与实用性的要求。
Document 类的作用
- 初始化 PDF 文档
Document
类负责创建 PDF 文件的基础框架,定义文档的页面大小、页边距、页眉页脚等属性,管理**
通过add()
方法,向 PDF 中添加段落、表格、图片等元素。 - 元数据设置
可设置文档的标题、作者、主题、关键词等信息,增强 PDF 的可搜索性和可读性。 - 分页控制
支持手动分页(newPage()
)或自动分页(当内容超出当前页面时)。
核心方法与参数
构造方法
Document()
默认使用 A4 页面大小,上下左右页边距为 36 单位(约 0.5 英寸)。Document(Rectangle pageSize)
自定义页面大小(如PageSize.LETTER
)。Document(Rectangle pageSize, float marginLeft, float marginRight, float marginTop, float marginBottom)
指定页面大小和页边距。
常用方法
方法名 | 功能描述 |
---|---|
open() |
开始写入文档内容(需在添加元素前调用) |
close() |
结束文档写入并释放资源 |
add(Element element) |
添加段落、表格、图片等元素到当前页面 |
newPage() |
创建新页面 |
setPageSize(Rectangle) |
动态修改后续页面的尺寸 |
addTitle(String) |
设置文档标题(非显示文本,仅元数据) |
addAuthor(String) |
设置文档作者元数据 |
使用步骤与示例代码
基础流程
// 1. 创建 Document 对象 Document document = new Document(PageSize.A4, 50, 50, 50, 50); // 页边距 50 单位 // 2. 绑定 PDF 写入器 PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("output.pdf")); // 3. 打开文档 document.open(); // 4. 添加内容 document.add(new Paragraph("Hello World!")); // 5. 关闭文档 document.close();
添加复杂内容
// 添加图片 Image image = Image.getInstance("logo.png"); image.scaleAbsolute(100, 100); document.add(image); // 添加表格 PdfPTable table = new PdfPTable(3); table.addCell("姓名"); table.addCell("年龄"); table.addCell("职业"); table.addCell("张三"); table.addCell("30"); table.addCell("工程师"); document.add(table);
设置元数据
document.addTitle("示例文档"); document.addAuthor("技术团队"); document.addSubject("iText API 使用指南");
注意事项
异常处理
使用try-catch
块捕获DocumentException
和IOException
,确保资源释放。try { document.open(); // 添加内容 } catch (DocumentException | IOException e) { e.printStackTrace(); } finally { if (document != null && document.isOpen()) { document.close(); } }
资源释放
必须调用document.close()
,否则生成的 PDF 可能损坏。中文支持
默认不包含中文字体,需加载自定义字体:BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED); Font font = new Font(baseFont, 12); document.add(new Paragraph("中文内容", font));
版本兼容性
com.itextpdf.text.Document
属于 iText 5.x 版本,若使用 iText 7.x 需改用com.itextpdf.layout.Document
。版权协议
iText 5.x 采用 AGPL 协议,商业用途需购买商业许可。
常见问题解答
Q1:如何设置不同的页面大小?
通过构造方法或 setPageSize()
指定如 PageSize.LETTER
、PageSize.A3
或自定义尺寸(单位:磅)。
Q2:add()
方法报错“Document is not open”?
确保在 document.open()
之后调用 add()
,且未被提前关闭。
Q3:中文显示为乱码?
必须引入中文字体文件(如 SimSun.ttf
),并设置到 Font
对象中。
引用说明
- iText 5 官方文档:https://itextpdf.com/en/resources/archives/itext-5
- AGPL 协议说明:https://www.gnu.org/licenses/agpl-3.0