【问题标题】:PDF export printing in Internet ExplorerInternet Explorer 中的 PDF 导出打印
【发布时间】:2012-10-30 01:45:49
【问题描述】:
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 文档。

线

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

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

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

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

发生的情况是 - 带有 PDF 文档的打印预览对话框没有出现,或者在预览窗口中出现空白文档。

-我尝试了许多不同的 JavaScript(通过 exporter.setParameterthis.print() 的不同参数 -我尝试设置不同的响应头,例如

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

这些似乎没有帮助

这似乎是 IE 和 FF 的问题。有没有人处理过这个问题?我需要让它 100% 地在所有浏览器上工作。实现将 PDF 文档导出直接发送到打印机的目标可能是另一种方法?还是可以跨浏览器运行的第三方库?

【问题讨论】:

  • 您能在 Acrobat 中阅读该文档吗?
  • 是的,如果我们注释掉 exporter.setParameter(JRPdfExporterParameter.PDF_JAVASCRIPT, "this.print({bUI: true,bSilent: false,bShrinkToFit: true});");然后我们可以将文件下载为 pdf 附件。这适用于所有浏览器。
  • 这个 rif 软件是什么?它适用于 jasper 报告还是可以替代 jasper?
  • 仍然遇到这个问题,任何建议将不胜感激。
  • 只是一个猜测,但由于它是零星的,它意味着两件事之一:1)服务器每 5 或 6 次发送不同的东西,而 Chrome(我认为它可以工作,因为没有提到)可以工作,因为它会忽略任何更改或 2) FF 和 IE8 在缓存它的方式上做了一些奇怪的事情。我不知道是哪个,但如果它正在缓存它,也许你可以设置一个标题来告诉它永远不要这样做。您可以使用 Fiddler 之类的东西来查看响应标头。祝你好运。

标签: java javascript pdf browser jasper-reports


【解决方案1】:

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

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

【讨论】:

  • 但这不是纯粹用于 pdf 的 javascript 吗?我认为 PDF_JAVASCRIPT 没有向 dom 添加任何内容?
  • @user619804,JS 没有向 DOM 添加任何内容,当然,但是您不知道浏览器(谁控制渲染和打印)和 Adob​​e 插件之间可能存在什么竞争条件。你试过迈克的建议了吗?有什么不同吗?
  • 尝试增加超时值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-03
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
相关资源
最近更新 更多