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

无法向HTML转PDF或扫描PDF添加图片(iText 2.1.7)

问题分析与解决方案

你的代码在普通PDF中能正常添加图片,但在扫描生成或HTML转换的PDF中失效,核心原因有两个:

1. 扫描PDF的内容层级问题

扫描生成的PDF,每页实际是一张覆盖整个页面的大图片。你用stamp.getUnderContent()把小图片加到了原有内容的下方,自然会被这张大图完全遮挡,无法显示。

2. HTML转PDF的坐标/层级问题

HTML转PDF工具生成的文档,可能存在页面媒体框与裁剪框不匹配、页面旋转,或者内容层带有额外遮罩的情况,导致你设置的绝对位置不在可见区域,或者underContent里的图片被上层内容覆盖。


针对性解决方案

针对扫描PDF

将图片添加到原有内容的上方,改用getOverContent()方法:

PdfContentByte over = stamp.getOverContent(pageOfPDF);
over.addImage(images.get(feuilletCpt < feuilletTot ? "NL" + seq : "L" + seq), true);

针对HTML转PDF

  • 先确认页面的实际可见范围:打印页面的媒体框和裁剪框,确保posX、posY在有效区域内:
    PdfReader reader = new PdfReader("目标PDF路径");
    Rectangle pageSize = reader.getPageSize(pageOfPDF);
    System.out.println("页面媒体框: " + pageSize);
    Rectangle cropBox = reader.getCropBox(pageOfPDF);
    System.out.println("页面裁剪框: " + cropBox);
    
  • 如果页面存在旋转,需要先修正坐标:
    int rotation = reader.getPageRotation(pageOfPDF);
    Rectangle pageSize = reader.getPageSizeWithRotation(pageOfPDF);
    // 根据旋转角度调整posX和posY,比如旋转90度时,需交换X/Y坐标并重新计算偏移
    
  • 同样尝试改用getOverContent()添加图片,避免被上层内容遮挡。

额外优化建议

提前在getBlackAndWhiteBarCode中设置绝对位置,可能在不同尺寸的页面中出现适配问题,建议改成添加图片时动态设置位置:

public Image getBlackAndWhiteBarCode(String filename) throws IOException, DocumentException {
    Image im = Image.getInstance(this.getClass().getResource(filename));
    im.setOriginalType(Image.ORIGINAL_PNG);
    im.scalePercent(25);
    return im;
}

// 添加图片时再设置位置
Image targetImg = images.get(feuilletCpt < feuilletTot ? "NL" + seq : "L" + seq);
targetImg.setAbsolutePosition(posX, posY);
over.addImage(targetImg, true);

内容的提问来源于stack exchange,提问作者Beáta Zádori

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:50:30