0

JSF ファイルから PDF を作成するために Flying Saucer を使い始めました。ここで問題があります。HTTP 応答をブロックせずに PDF を作成するアプリケーションで使用したいのです。

以下のコードを見てください。

ServletOutputStream outputStream = response.getOutputStream();
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(new URL("http://localhost:8080/pdf2.faces").toString());
renderer.layout();
renderer.createPDF(outputStream);
outputStream.flush();

私の理解によると、ITextRenderer は 3 行目 (関数 loadDocument) で JSF 全体をロードします。つまり、ITextRenderer では、JSF 全体がサーバーによって作成される必要があります。

次に、ITextRenderer は 4 行目で PDF レイアウトを作成し、5 行目で outputStream に配置します。

JSF の作成に時間がかかる場合はどうすればよいでしょうか。上記のコードは、サーバーが JSF 全体を作成するまで 3 行目にスタックされます。したがって、1 行目から 6 行目のコードをサーブレットに挿入すると、HTTP 応答がブロックされ、タイムアウトの問題が発生する可能性があります。元の JSF 全体が作成されるまで待たずに、Flying Saucer が出力ストリームの HTTP 応答の作成を開始することを望みます。それを行う最良の方法は何ですか?Flying Saucer にはこれをサポートする API がありますか? どんな助けでも大歓迎です。

4

1 に答える 1

0

FlyingSaucerAPIを使用して次の回避策を見つけました。

1)元のJSFを再設計し、パーツにロードしました

2)Flying Saucer WIKIで説明されているように、JSFパーツから単一のPDFを作成しました

http://code.google.com/p/flying-saucer/wiki/FAQPDF#How_can_I_print_multiple_pages_on_to_one_PDF,_if_they_come_from_multiple_documents

動作しますが、それでも回避策です。JSFパーツのロードに時間がかかる場合は、タイムアウトの問題が発生する可能性があります。問題を解決する方法は?どんな助けでもありがたいです。

于 2012-11-01T14:36:45.030 に答える