0

我已经开始使用飞碟从 JSF 文件创建 PDF,这很棒!现在我有一个问题:我想在我们的应用程序中使用它来创建 PDF 而不阻塞 HTTP 响应。

请看下面的代码:

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 需要很长时间怎么办?上面的代码将堆叠在第 3 行,直到服务器创建整个 JSF。因此,如果我想将第 1-6 行的代码放入 servlet 中,它可能会阻止 HTTP 响应并可能导致超时问题。我希望 Flying Saucer 将开始创建输出流 HTTP 响应,而无需等到创建整个原始 JSF。最好的方法是什么?飞碟有任何API支持吗?任何帮助将不胜感激。

4

1 回答 1

0

我使用 Flying Saucer API 找到了以下解决方法:

1) 我重新设计了我原来的 JSF 并分部分加载它

2)我从 JSF 部分创建了单个 PDF,如 Flying Saucer WIKI 中所述

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 回答