2017-06-30 169 views
0
public void print() { 

    Document document = new Document(PageSize.A4); 

    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 

    try { 
     FacesContext facesContext = FacesContext.getCurrentInstance(); 
     ExternalContext externalContext = facesContext.getExternalContext(); 
     HttpServletResponse response = (HttpServletResponse) externalContext.getResponse(); 
     response.setContentType("application/pdf"); 

     response.setHeader("Content-Disposition", String.format(ATTACHMENT, "-normal")); 
     PdfWriter pdfWriter = PdfWriter.getInstance(document, byteArrayOutputStream); 
     document.open(); 

     BaseFont baseFont = BaseFont.createFont(BaseFont.TIMES_ROMAN, ISO_8859_9, true); 
     BaseFont baseBoldFont = BaseFont.createFont(BaseFont.TIMES_BOLD, ISO_8859_9, true); 
     Font font11 = new Font(baseFont, 11); 

     document.add(new Paragraph(seciliListeElemani.getOgrno() + " " + 
       seciliListeElemani.getAd() + " " + seciliListeElemani.getSoyad() + " Mezun Olabilir!!!!", font11)); 


     document.close(); 

     response.setContentLength(byteArrayOutputStream.size()); 
     ServletOutputStream servletOutputStream = response.getOutputStream(); 
     byteArrayOutputStream.writeTo(servletOutputStream); 
     byteArrayOutputStream.flush(); 
     FacesContext.getCurrentInstance().responseComplete(); 


    } catch (DocumentException e) { 
     throw new OrgunException(e.getMessage()); 
    } catch (IOException e) { 
     throw new OrgunException(e.getMessage()); 
    } 

} 

我寫這段代碼來打印PDF文件。當我點擊我的web應用程序上的按鈕時,沒有任何反應。沒有錯誤信息。它看起來像我調試時成功完成的方法。但只是在等待,沒有下載PDF文件。有什麼建議麼?Java Pdf生成和下載

+0

提示:學會使用調試器;或添加* trace *語句。當你無法觀察你的代碼在做什麼時 - 然後改變它是可觀察的! – GhostCat

+0

一個答案是正確的:這是一個非常糟糕的方法。它從沒有提到**這個方法將要做的事情的名字開始;然後是各種違反乾淨代碼規則的行爲。這是事情:錯誤隱藏在糟糕的代碼中。 – GhostCat

+1

調試你的代碼。在本地運行它,並將其寫入文件。那樣有用嗎?如果是這樣,出現與PDF生成無關的問題。使用wireshark查看實際通過網絡發送的內容。 –

回答

0

我解決了我的問題。這是xhtml方面。

<p:commandButton value="print" actionListener="#{bean.print}" 
    rendered="#{bean.seciliListeElemani.durum_id==5}"></p:commandButton> 

我加

ajax="false" 

和它的工作。

1

我的猜測是某些輸出流或編寫器需要調用close()

我建議你分開不同的問題,以便您可以更輕鬆地調試它們,並縮小問題範圍。例如。使獨立於servlets/Faces的PDF的生成。無論如何,這是很好的編程習慣。

+1

這樣的事情應該作爲評論。雖然這是一個很好的評論。 –

+0

@aetheria感謝您的建議。我會嘗試的 – tgcndr