我有一个使用Jasper Reports 3.7.6的应用程序,主要是为了向后兼容应用程序的前身(即,之前的应用程序主要用于生成销售证书,但当前的应用程序主要用于生成电子邮件传达相同的信息)。
我的质量检查人员刚刚指出,证书生成功能只会在他的环境中运行时向他显示一个空白网页,这也是我们的开发构建环境的情况。但是当我在本地计算机上运行应用程序时,我会按预期显示PDF文件。一段时间没有看过这个功能,而且从未熟悉过Jasper Reports(这是由多年前离开公司的另一个程序员开发的),我对如何解决看似无法解决的问题感到茫然一个间歇性的问题。
以下是使用Jasper生成销售证书的代码:
// filePath verified as set to executable's directory
String fileName = filePath + "/Certificate.jasper";
String outFileName = "Certificate" + certObject.getSerial() + ".pdf";
HashMap hm = new HashMap();
try
{
if(certObject != null)
{
ArrayList<Certificate> certList = new ArrayList();
certList.add(certObject);
// Create the print object
JasperPrint print = JasperFillManager.fillReport(fileName, hm, new JRBeanCollectionDataSource( (ArrayList) certList , true));
// Create a PDF exporter
JRExporter exporter = new JRPdfExporter();
// Set the output file name in the HTTP response
response.setHeader("Content-disposition",
"attachment; filename=" + outFileName);
// Set the print object of the exporter, and set its
// output stream to be that of the HTTP response object
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
ServletOutputStream outStream = response.getOutputStream();
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outStream);
// Export the PDF file
exporter.exportReport();
}
} catch (JRException e)
{
e.printStackTrace();
System.out.println("JRException: "+e.toString());
} catch (IOException ioe) {
ioe.printStackTrace();
System.out.println("IOException: "+ioe.toString());
}
我还应该注意,如果内存和子版本日志服务,此功能先前将证书PDF写入可执行文件目录,然后在浏览器窗口中打开该文件。我不记得为什么我改变了功能,除了可能的效率(即,没有用大量的PDF填充该目录)。我是否需要切换回那样做?我真的不想为新应用程序中不太可能使用的东西投入太多精力,所以如果有人能给我一个能够始终如一地工作的简单解决方案,我会非常感激。
答案 0 :(得分:0)
尝试更改您的servlet以接受GET或更改为Chrome。
我遇到了与IE相同的问题,当用户点击生成PDF按钮IE对Java方法进行POST时,但是当servlet响应PDF输出时,Acrobat插件被加载,这就是第二个帖子但这次是GET,我的控制器没有回应GET提交。