问题描述
我们正在使用pdfBox库2.x来操纵pdf操作。在一项操作中,我必须从页面中删除选定的图像。它正常工作。但是,当我打开修改后的文档时,它显示警告消息:
An error exists on this page. Acrobat may not display the page correctly.
,如下所示:
PDResources resources = copyResources(page);
COSDictionary pageObjects = (COSDictionary) resources.getCOSObject().getDictionaryObject(COSName.XOBJECT);
COSDictionary newObjects = new COSDictionary();
Set<String> imageNames = findImageNames(page);
Iterable<COSName> xObjectNames = resources.getXObjectNames();
for (COSName xObjectName : xObjectNames) {
System.out.println(xObjectName);
if (resources.isImageXObject(xObjectName)) {
Boolean used = imageNames.contains(xObjectName);
if (used) {
newObjects.setItem(xObjectName,pageObjects.getItem(xObjectName));
} else {
System.out.println("Found unused image: name={}"+xObjectName.getName());
}
} else {
newObjects.setItem(xObjectName,pageObjects.getItem(xObjectName));
}
}
resources.getCOSObject().setItem(COSName.XOBJECT,newObjects);
page.setResources(resources);
如果我缺少此代码的任何内容,请帮助我,如果需要进一步的信息,请告诉我。
PDFStreamParser parser = new PDFStreamParser(page);
parser.parse();
List<Object> tokens = parser.getTokens();
List<Object> newTokens = new ArrayList<Object>();
for(int j=0; j<tokens.size(); j++) {
Object token = tokens.get( j );
if(token instanceof COSName) {
COSName cosname = (COSName) token;
PDXObject o = resources.getXObject(cosname);
if (o instanceof PDImageXObject) {
PDImageXObject pdImageXObject = (PDImageXObject) o;
DomXmpParser xmpParser = new DomXmpParser();
XMPMetadata xmpMetadata = xmpParser.parse(pdImageXObject.getMetadata().toByteArray());
if(imgUniqueId.equals(xmpMetadata.getdublinCoreSchema().getTitle())) {
newTokens.remove(newTokens.size() - 1);
continue;
}
}
}
newTokens.add(token);
}
PDStream newContents = new PDStream( document );
OutputStream outputStream = newContents.createOutputStream();
ContentStreamWriter writer = new ContentStreamWriter( outputStream );
writer.writetokens(newTokens);
outputStream.close();
newContents.addCompression();
page.setContents(newContents);
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)