2014-01-14 47 views
0

我的要求: 點擊JSF2中的「打印」按鈕,打開PDF文件從XHTML頁面中的數據打印。如何使用PDF JSF2及iText的顯示XHTML頁面內容只,PDF格式不顯示任何數據

下面的代碼打開一個沒有數據的空白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

只有當您致電document.close()時纔會填寫baos。所以,基本上,你正在寫一個空的baos來回應。

baos替換爲response.getOutputStream(),以便iText直接寫入響應而不是通過不必要的規避。

PdfWriter.getInstance(document, response.getOutputStream()); 

不要忘記刪除下列行已變得多餘:

ServletOutputStream out = response.getOutputStream(); 
baos.writeTo(out); 
out.flush(); 
out.close(); 

請注意,我根據迄今提供的代碼我只有回答了上述問題的症狀。如你所說,這一切與「如何顯示xhtml頁面內容」和「從xhtml頁面(URL)顯示數據」完全無關。