2012-11-09 124 views
6
protected static byte[] exportReportToPdf(JasperPrint jasperPrint) 
                 throws JRException { 
    JRPdfExporter exporter = new JRPdfExporter();  
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); 
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos); 
    exporter.setParameter(JRPdfExporterParameter.PDF_JAVASCRIPT, 
       "this.print({bUI: true,bSilent: false,bShrinkToFit: true});"); 

    exporter.exportReport();   
    return baos.toByteArray(); 
} 

我們使用類似這樣的代碼從Jasper應用程序中導出PDF文檔。在Internet Explorer中PDF導出打印

exporter.setParameter(JRPdfExporterParameter.PDF_JAVASCRIPT, 
      "this.print({bUI: true,bSilent: false,bShrinkToFit: true});"); 

增加了JavaScript以PDF文檔直接發送到打印機。

預期的行爲是一個打印對話框將拿出PDF文檔的預覽。

也能正常工作的大部分時間 - 除了我有在Internet Explorer 8和Firefox大約一個問題,每5-6倍。

會發生什麼事是 - 打印預覽對話框,PDF文檔不出現或將其與在預覽窗口中的空白文檔出現。

-I've嘗試了一些不同的JavaScript的(不同PARAMS到this.print()通過exporter.setParameter -I've嘗試設置不同的響應頭,比如

response.setContentType("application/pdf"); 
response.setHeader("Content-disposition","inline; filename=\"" 
        + reportName 
        + "\""); 
response.setContentLength(baos.size()); 

這些似乎並沒有幫助

這似乎是一個IE和FF問題,有沒有人處理過這個問題?我需要讓它在100%的時間內在所有瀏覽器上工作。也許一種完成將PDF文檔直接導出到目標的不同方法打印機?還是可以跨瀏覽器工作的第三方庫?

+0

您可以在Acrobat中閱讀該文檔嗎? –

+0

是的,如果我們註釋掉exporter.setParameter(JRPdfExporterParameter.PDF_JAVASCRIPT, 「this.print({BUI:真,bSilent:假的,bShrinkToFit:真});」);那麼我們可以下載該文件作爲pdf附件。這適用於所有瀏覽器。 – user619804

+0

這是什麼rif軟件?它是否與碧玉報告一起工作,還是碧玉的替代品? – user619804

回答

4

也許它沒有得到一個機會來更新UI。下面的代碼會延遲打印,也許會給它提供它需要的機會。我沒有測試,因爲我沒有你的環境。

exporter.setParameter(JRPdfExporterParameter.PDF_JAVASCRIPT, 
    "app.setTimeOut('this.print({bUI: true,bSilent: false,bShrinkToFit: true});',200);") 
+0

但這不是純粹的PDF格式的JavaScript?我不認爲PDF_JAVASCRIPT正在向dom添加任何東西? – user619804

+0

@ user619804,JS沒有向DOM中添加任何內容,但您不知道瀏覽器(控制渲染和打印的人員)和Adobe插件之間可能存在哪些競爭條件。你有沒有嘗試Mike的建議?它有沒有什麼不同? – vladr

+0

超時沒有幫助。 – user619804

相關問題