在Internet Explorer中PDF导出打印

use*_*804 6 javascript java browser pdf jasper-reports

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();
}
Run Code Online (Sandbox Code Playgroud)

我们使用这样的代码从Jasper应用程序导出PDF文档.

这条线

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

添加JavaScript以将PDF文档直接发送到打印机.

预期的行为是打印对话框将提供PDF文档的预览.

这在大多数情况下都可以正常工作 - 除了我在Internet Explorer 8和Firefox中每5-6次出现一次问题.

会发生什么 - 带有PDF文档的打印预览对话框没有出现,或者在预览窗口中显示空白文档.

- 我尝试了很多不同的JavaScripts(不同的params来this.print()通过 - exporter.setParameter 我尝试过设置不同的响应头,例如

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

这些似乎没有帮助

这似乎是一个IE和FF问题.有人曾经处理过这个问题吗?我需要100%的时间让它在所有浏览器中运行.也许是一种不同的方法来实现将PDF文档直接导出到打印机的目标?或者可以跨浏览器工作的第三方库?

mik*_*ery 4

也许它没有机会更新 UI。下面的代码延迟了打印,也许给了它需要的机会。由于没有你的环境,所以没有测试。

exporter.setParameter(JRPdfExporterParameter.PDF_JAVASCRIPT,
    "app.setTimeOut('this.print({bUI: true,bSilent: false,bShrinkToFit: true});',200);")
Run Code Online (Sandbox Code Playgroud)