我需要根据元数据从PDF文件中删除特定图像。可悲的是。我在Internet上找到的所有例子都使用了丢弃的方法。
我写的是这样的:
try (PDDocument doc = PDDocument.load(new ByteArrayInputStream(pdf))) {
doc.getPages().forEach(page ->
{
PDResources resources = page.getResources();
List<COSName> itemsToRemove = new ArrayList<>();
resources.getXObjectNames().forEach(propertyName -> {
if(!resources.isImageXObject(propertyName)) {
return;
}
PDXObject pdxObject = resources.getXObject(propertyName);
PDImageXObject pdImageXObject = (PDImageXObject)pdxObject;
PDMetadata metadata = pdImageXObject.getMetadata();
if(checkMetadata(metadata)){
// What should I use here?
page.getCOSObject().removeItem(propertyName);
}
});
// Should I use page.setResources(resources); ?
});
doc.save(baos);
} catch (Exception e) {
//Code here
}
答案 0 :(得分:2)
它的工作方式与示例RemoveAllText.java相同,只是使用不同的标记。
使用此示例中的代码,只需使用“Do”而不是“Tj”。
当然,如果你需要加载元数据等,你应该枚举并检查图像投掷页面资源(如我的例子)