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

PDFBox 2.0.30:图像渲染与LayerUtility导入对象的注释显示不一致问题

问题解决方案:PDFBox中PDFormXObject丢失注释的处理

核心原因

LayerUtility.importPageAsForm()方法仅导入页面的内容流,不会包含页面的注释(Annotations);而PDFRenderer渲染图像时会默认渲染可见的注释,这就是两者结果不一致的根源。

解决办法

方法一:为新页面手动复制注释

如果需要保留注释,不能仅依赖FormXObject,需从原页面提取注释并添加到新页面中:

// 在导入FormXObject之后添加这段代码
PDPage originalPage = PDFDocument2.getPage(0);
PDPage newPage = newDocument.getPage(0);
// 复制原页面的所有注释
for (PDAnnotation annotation : originalPage.getAnnotations()) {
    newPage.getAnnotations().add(annotation);
}

注意:复制注释后,需确保注释坐标与新页面布局匹配(比如原页面尺寸和新页面2000x2000是否一致,可能需要调整注释的位置和大小)。

方法二:渲染图像时忽略注释

如果不需要保留注释,让图像渲染结果和FormXObject生成的PDF一致,可以修改PDFRenderer的渲染参数,禁用注释渲染:

// 创建渲染器并设置不渲染注释
PDFRenderer renderer = new PDFRenderer(document);
RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
hints.put(PDFRenderer.RENDER_HINT_DRAW_ANNOTATIONS, false);
BufferedImage bim = renderer.renderImageWithDPI(idPage, dpi, hints);

代码优化提示

  • 你加载了两次原文档(document和PDFDocument2),可以优化为只加载一次,避免不必要的资源消耗。
  • 新页面尺寸设置为2000x2000,若原页面尺寸不同,绘制FormXObject时需调整位置和缩放比例,否则内容可能显示不全或错位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:56:08