2012-10-31 21 views
0

我已经开始使用Flying Saucer从JSF文件创建PDF,它很棒! 现在我有一个问题:我想在我们的应用程序中使用它来创建PDF而不阻止HTTP响应。如何通过Flying Saucer创建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加载整个JSF在3号线(在功能loadDocument)。这意味着ITextRenderer要求整个JSF将由服务器创建。

然后,ITextRenderer在第4行创建PDF布局,并把它的OutputStream中的第5行

如果JSF的创建将采取什么样的很长一段时间? 上面的代码将堆栈在第3行,直到服务器创建整个JSF。 因此,如果我想将第1-6行的代码放入servlet中,它可以阻止HTTP响应,并可能导致超时问题。 我想Flying Saucer将开始创建输出流HTTP响应,而不必等到创建完整的原始JSF。 做什么是最好的方法? 飞碟是否有任何API支持? 任何帮助将不胜感激。

回答

0

我已经发现使用飞碟API以下解决方法:

1)I重新设计我的原始JSF并加载在零件

2)I创建从JSF份单个PDF如在所描述的飞碟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部分需要很长时间,则可能会导致超时问题。 如何解决问题?任何帮助将不胜感激。