アプリケーションでのレポートに Apache FOP を使用しています。以前は FOP 1.0 で問題なく動作していましたが、Java webstart との組み合わせでバグが発生したため、1.1 にアップグレードする必要がありました。変換は機能し、問題なく PDF または RTF を直接出力できますが、プレビューは機能しなくなりました。
変換コード:
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(new StreamSource(Loader.loadResource("Export/" + daten.getFO()).openStream()));
Source src = new DOMSource(daten.createXML());
Result res = new SAXResult(fop.getDefaultHandler());
transformer.transform(src, res);
古い印刷プレビュー コード (1.0 で動作):
Fop fop = fopFactory.newFop(MimeConstants.MIME_FOP_AWT_PREVIEW);
1.1 では、このコードはプレビュー ウィンドウを開かず、何も起こらず、例外もありません。プレビューを次のように書き直そうとしました。
AWTRenderer renderer = new AWTRenderer(foUserAgent);
foUserAgent.setRendererOverride(renderer);
PreviewDialog dlg = PreviewDialog.createPreviewDialog(foUserAgent, null, false);
renderer.setStatusListener(dlg);
dlg.setVisible(true);
fop = fopFactory.newFop(foUserAgent);
この変更により、プレビュー ウィンドウが表示され、正しいページ数を取得できるようになりました。ヘッダーとフッターも表示されますが、ページのコンテンツは空です。
1.0 と 1.1 の間で何が変わったのか知っている人はいますか? AWTRenderer に関する情報は見つかりませんでした。問題は .fo ファイルまたはデータにあるとは思いません。PDF ファイルに直接変換すると問題なく動作すると言ったように。