当前位置:首页>行业动态> 正文

如何用com.itextpdf.text.document API高效生成PDF文档

com.itextpdf.text.Document是iText库中创建PDF文档的核心类,提供初始化文档、添加文本/表格/图片等功能,支持页面属性设置与内容排版,适用于动态生成报表、表单等场景,简化Java应用中的PDF生成流程。

com.itextpdf.text.Document是 iText 库中用于创建和操作 PDF 文件的核心类之一,它提供了一系列方法,帮助开发者定义 PDF 的页面结构、添加内容(如文本、表格、图片等)并控制文档的元信息(如标题、作者),以下内容将详细介绍其功能、使用方法及注意事项,确保内容符合技术性、权威性与实用性的要求。


Document 类的作用

  1. 初始化 PDF 文档
    Document类负责创建 PDF 文件的基础框架,定义文档的页面大小、页边距、页眉页脚等属性,管理**
    通过add()方法,向 PDF 中添加段落、表格、图片等元素。
  2. 元数据设置
    可设置文档的标题、作者、主题、关键词等信息,增强 PDF 的可搜索性和可读性。
  3. 分页控制
    支持手动分页(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 使用指南");

注意事项

  1. 异常处理
    使用try-catch块捕获DocumentExceptionIOException,确保资源释放。

    try {
        document.open();
        // 添加内容
    } catch (DocumentException | IOException e) {
        e.printStackTrace();
    } finally {
        if (document != null && document.isOpen()) {
            document.close();
        }
    }
  2. 资源释放
    必须调用document.close(),否则生成的 PDF 可能损坏。

  3. 中文支持
    默认不包含中文字体,需加载自定义字体:

    BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
    Font font = new Font(baseFont, 12);
    document.add(new Paragraph("中文内容", font));
  4. 版本兼容性
    com.itextpdf.text.Document属于 iText 5.x 版本,若使用 iText 7.x 需改用com.itextpdf.layout.Document

  5. 版权协议
    iText 5.x 采用 AGPL 协议,商业用途需购买商业许可。


常见问题解答

Q1:如何设置不同的页面大小?
通过构造方法或setPageSize()指定如PageSize.LETTERPageSize.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