一連の PDF を画像にレンダリングしているときに、icepdf がランダムに OutOfMemoryError を出すように見えます。これを追跡しようとすると、次の 2 つのことがわかります。
- A0ページまたは同様に大きなドキュメントページをレンダリングしたOOMに近い
- Eclipse メモリ アナライザーを使用すると、メモリ内に 1/2GB の画像が見つかります。
これは、出力画像のサイズを扱いやすいサイズに制限することを示唆しています。これを行う最も簡単な方法は何ですか?
私はicepdfのPageオブジェクトを見ましたが、常に使用することを強くお勧めします.JavadocにはPage.BOUNDARY_CROPBOX
他の用途が記載されていないようです.
出力画像サイズを制限するにはどうすればよいですか、Document.getPageImage
または OOM を防ぐために使用できる他の手段は何ですか (Xmx を増やすだけではありませんが、それはできません)。画質の低下はオプションです。ただし、すべてではなく、「大きすぎる」画像にのみ適用する必要があります。
Document.paintPage() を使用して定義済みの画像を使用しようとしましたが、これでは十分ではありませんでした。
デバッグにより、問題のあるドキュメントを拡大できるようになりました。次のようなログが表示されます。
2016-12-09T14:23:35Z DEBUG class org.icepdf.core.pobjects.Document 1 MEMFREE: 712484296 of 838860800
2016-12-09T14:23:35Z DEBUG class org.icepdf.core.pobjects.Document 1 LOADING: ..../F1-2.pdf
2016-12-09T14:23:37Z WARN class org.icepdf.core.pobjects.graphics.ScaledImageReference 1 Error loading image: 9 0 R Image stream= {Type=XObject, Length=8 0 R, Filter=FlateDecode, ColorSpace=DeviceGray, Decode=[1, 0], Height=18676, Width=13248, Subtype=Image, BitsPerComponent=1, Name=Im1} 9 0 R
これは Height=18676, Width=13248 となり、これは非常に大きいです。
画像の読み込み中に OOM が既に発生していると思われるため、後でスケーリングしても役に立ちません。また、プロパティorg.icepdf.core.imageReference=scaled
が十分に早くヒットしないようです。
私にとっては、このような特大の画像を無視しても問題ありません。チャンスはありますか?