0
メタデータに従って特定のイメージをPDFファイルから削除する必要があります。悲しいことに。私がインターネットで見つけることができるすべての例は、破棄されたメソッドを使用しています。それは同じように動作しますPDFBoxで特定のイメージをPDFから削除する方法
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
}
を投げたあなたは、リソース辞書内のXObject辞書から削除することができます。しかし、それはその一部にすぎません。コンテンツストリームからも、つまりイメージが呼び出された場所でそれを削除する必要があります。 RemoveAllTextの例を変更して、見つかった名前の特定のイメージを削除する必要があります。私はいくつかのコードをしようとする可能性があります - あなたは "イメージ"は実際にはイメージであり、ベクターグラフィックではないと確信していますか?そして、それはリソースの最初のレベルにあり、どこか深くないのですか?あなたはPDFを共有できますか? –
私はcontentStream.drawImageでこのイメージを生成しているので、イメージだと確信しています。ですから、contentStreamから削除する方法はありますか? –
"TJ"と "その他"の代わりに "Do"を検索するだけです。ヒットしたら、名前( "Do"の前のトークン)が削除するイメージの名前かどうかを確認します。 RemoveAllTextの例は、ソースコードのダウンロード中です。 –