我的要求: 点击JSF2中的“打印”按钮,打开一个pdf文件,使用xhtml页面中的数据进行打印。
以下代码打开一个没有数据的空白pdf文件。我希望pdf显示来自xhtml页面(URL)的数据
JSF代码: JSF有一些显示数据的字段
<h:commandButton id="printButton" value="Print" actionListener="#{myBean.print}" />
MyBean.Java代码:
public void print()
{
ExternalContext externalContext =FacesContext.getCurrentInstance().getExternalContext();
HttpServletResponse response = (HttpServletResponse)externalContext.getResponse();
String url = request.getRequestURL();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Document document = new Document(PageSize.LETTER);
PdfWriter.getInstance(document, baos);
document.open();
document.add(new Paragraph(" Hello"));
response.setHeader("Expires", "0");
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline;filename=\"" + PDF_FILE_NAME + "\"");
response.setContentLength(baos.size());
ServletOutputStream out = response.getOutputStream();
baos.writeTo(out);
out.flush();
out.close();
document.close();
System.out.println("Done.");
FacesContext.getCurrentInstance().responseComplete();
}
任何帮助将不胜感激。 提前谢谢,
答案 0 :(得分:0)
baos
仅在您致电document.close()
时填写。所以,基本上,你正在为回复写一个空的baos
。
将baos
替换为response.getOutputStream()
,以便iText直接写入响应,而不是通过不必要的规避。
PdfWriter.getInstance(document, response.getOutputStream());
不要忘记删除以下过多的行:
ServletOutputStream out = response.getOutputStream();
baos.writeTo(out);
out.flush();
out.close();
请注意,我只是根据目前提供的代码回答了所描述的问题症状。这一切都与&#34;如何显示xhtml页面内容&#34;完全无关。和&#34;显示来自xhtml页面(URL)的数据&#34;正如你在那里说的那样。