我在使用 PDFBox 时遇到问题。我在 PDF 中有一个空白页,我想在其中插入图像。因为我也使用签名的 PDF,所以所有更改都必须保存为“saveIncremental”。
当我只插入一张图片时,一切都很好(图片已插入)。当我尝试在此 PDF 中插入另一个图像时,它尚未插入,并且在 Adobe Acrobat Reader 中打开时显示“此页面上存在错误。Adobe 可能无法正确显示页面......”。
奇怪的事情 - 当 PDF 不仅是空白页,而且例如带有图像的空白页时,一切都很好(第一个和第二个图像已使用 saveIncremental 正确插入)。
插入和保存图像的代码:
PDImageXObject pdImage = PDImageXObject.createFromFile(tmpSig.getFileName(), doc);
PDPageContentStream contentStream = new PDPageContentStream(doc, tmpPage, PDPageContentStream.AppendMode.APPEND, true, true);
contentStream.drawImage(pdImage, finalX, (finalPageHeight - finalY - finalHeight), finalWidth, finalHeight);
contentStream.close();
// update before save
tmpPage.getCOSObject().setNeedToBeUpdated(true);
tmpPage.getResources().getCOSObject().setNeedToBeUpdated(true);
doc.getDocumentCatalog().getPages().getCOSObject().setNeedToBeUpdated(true);
doc.getDocumentCatalog().getCOSObject().setNeedToBeUpdated(true);
// save
doc.saveIncremental(new FileOutputStream(pdfFile));
此处提供的所有文件
使用 PDFBox 2.0.7 版,但我也尝试了最新的(2.0.15),但没有帮助。
感谢所有的想法!
编辑:我尝试像这样更新 XObject 和资源(在注释“保存前更新”下添加了此代码):
pdImage.getCOSObject().setNeedToBeUpdated(true);
PDResources pdResources = tmpPage.getResources();
for (COSName name : pdResources.getXObjectNames()) {
pdResources.getXObject(name).getCOSObject().setNeedToBeUpdated(true);
}
问题仍然存在,没有任何改变......
跃然一笑
相关分类