0

Flying Saucer を使用して、XHTML から PNG 画像ファイルを作成しています。次に、別の機能を使用して、これらを PDF に収集し、その他の多数のテキスト n 画像を作成します。

PDF エクスポート処理を iText に変換することはできますが、それはかなり大掛かりな作業になります....

私が抱えている問題は、PNG 画像ファイルにエクスポートするときに、一部の XHTML コンテンツをページ分割する必要があることです。画像ファイル間の単純な「クリップ スタイル」の区切りで問題ありません。

これは、コンテンツ全体を単一のファイルにレンダリングするためだけに使用しているもので、うまく機能します。

File file = File.createTempFile("AAA", "." + suffix);
XHTMLPanel panel = new XHTMLPanel();
panel.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

InputStream is = <create content>;

panel.setDocument(is, "");

Graphics2DRenderer renderer = new Graphics2DRenderer();
renderer.setDocument(panel.getDocument(),"");

BufferedImage img = new BufferedImage(DEFAULT_WIDTH,
         DEFAULT_HEIGHT, BufferedImage.TYPE_INT_ARGB);
Graphics2D graphics = (Graphics2D) img.getGraphics();
graphics.setColor(Color.white);
graphics.fillRect(0, 0, DEFAULT_WIDTH, DEFAULT_HEIGHT);

renderer.layout(graphics,null);         
renderer.render(graphics);

ImageIO.write(img, suffix, file);

ただし、コンテンツの一部は数ページにまたがっており、上記の処理では、上部の DEFAULT_HEIGHT ピクセルのみが表示され、残りはクリップされます。

パネル コンテンツを (垂直方向に) '反復' してレンダリングする方法はありますか (たとえば、X ピクセルのコンテンツを一意の画像ファイルに変換する)。これは ITextRenderer が行うことのようなものですが、個々のページを個別の画像ファイルにレンダリングするにはどうすればよいでしょうか?

4

1 に答える 1

-1

これを考え出しました。幸いなことに、Graphics2DRenderer を使用すると、XHTML セクションのサイズ (幅 n 高さ) を知ることができます。

そのサイズの BufferedImage に再レンダリングし、Grahpics2D.drawImage(Image, , ) を使用してその完全な画像の一部を「ページ」画像に繰り返し剥がし、それらをディスクにダンプします。

最もきれいではありませんが、機能します。

于 2013-11-18T22:24:08.100 に答える