无法向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
相关产品推荐
相关产品推荐

