我已经开始使用飞碟从 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支持吗?任何帮助将不胜感激。