2017-12-11 129 views
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 

}

+0

を投げたあなたは、リソース辞書内のXObject辞書から削除することができます。しかし、それはその一部にすぎません。コンテンツストリームからも、つまりイメージが呼び出された場所でそれを削除する必要があります。 RemoveAllTextの例を変更して、見つかった名前の特定のイメージを削除する必要があります。私はいくつかのコードをしようとする可能性があります - あなたは "イメージ"は実際にはイメージであり、ベクターグラフィックではないと確信していますか?そして、それはリソースの最初のレベルにあり、どこか深くないのですか?あなたはPDFを共有できますか? –

+0

私はcontentStream.drawImageでこのイメージを生成しているので、イメージだと確信しています。ですから、contentStreamから削除する方法はありますか? –

+0

"TJ"と "その他"の代わりに "Do"を検索するだけです。ヒットしたら、名前( "Do"の前のトークン)が削除するイメージの名前かどうかを確認します。 RemoveAllTextの例は、ソースコードのダウンロード中です。 –

答えて

1

それだけで別のタグで、例RemoveAllText.javaではありませんように:

は、私はそれをこのような何かを書きます。

この例のコードを使用してください。「Tj」の代わりに「Do」を使用してください。もちろん

、あなたはなど、メタデータをロードする必要がある場合は、あなた列挙し、確認すべき画像が(私の例のように)ページのリソース

関連する問題