PDFBox-此页面上存在错误 Acrobat可能无法正确显示页面

问题描述

我们正在使用pdfBox库2.x来操纵pdf操作。在一项操作中,我必须从页面删除选定的图像。它正常工作。但是,当我打开修改后的文档时,它显示警告消息: An error exists on this page. Acrobat may not display the page correctly.,如下所示:

警告消息弹出窗口:

Warning Message Popup

以下是从页面删除图像的代码

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 (将#修改为@)