You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用iText 2.1.7复制带批注PDF时批注丢失的解决办法

解决iText 2.1.7复制PDF页面丢失批注的问题

问题根源

你当前的代码是将PDF页面转换为Image对象后写入新文档,这种方式只会保留页面的像素内容,批注、表单字段这类交互式/结构化元素会被完全丢弃——因为图像无法承载这些PDF原生元素。

解决方案

改用PdfCopy类直接复制页面(而非转成图像),它会完整保留原页面的所有内容,包括批注。以下是修改后的代码:

for (Integer page : pages) {
    String outFile = out + "_" + page;
    try {
        // 初始化原PDF读取器和复制工具
        PdfReader reader = new PdfReader(/* 替换为你的原PDF路径或输入流 */);
        Document document = new Document();
        PdfCopy copy = new PdfCopy(document, new FileOutputStream(outFile));
        
        document.open();
        // 直接复制指定页面,完整保留所有元素(含批注)
        copy.addPage(copy.getImportedPage(reader, page));
        
        // 关闭资源
        document.close();
        reader.close();
        
        file.add(FileUtilities.getFile(outFile));           
    } catch (Exception e) {
        e.printStackTrace();
    }
}

补充说明

  • PdfCopy会自动继承原页面的旋转属性,无需额外处理图像旋转逻辑。
  • 若需调整页眉等页面内容,不要通过图像裁剪实现,建议先用PdfStamper修改原页面内容,再用PdfCopy复制,避免丢失批注。

内容的提问来源于stack exchange,提问作者Subharoop Ghosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:40:28