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

如何用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 可能损坏。

    如何用com.itextpdf.text.document API高效生成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

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

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


常见问题解答

Q1:如何设置不同的页面大小?
通过构造方法或 setPageSize() 指定如 PageSize.LETTERPageSize.A3 或自定义尺寸(单位:磅)。

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

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