java Jasper报告有时显示为空白
我有一个利用Jasper Reports 3.7.6的应用程序,主要用于与应用程序的前身向后兼容(即,以前的应用程序主要用于生成销售证书,但当前的应用程序主要用于生成电子邮件以传达相同的信息)
我的QA人员刚刚指出,当在他的环境中运行时,证书生成功能只会向他显示一个空白网页,我们的开发构建环境也是如此。但是当我在本地机器上运行应用程序时,我得到了预期的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());
}
我还应该注意,如果内存和subVersion日志起作用,则此功能以前会将证书PDF写入可执行文件的目录,然后在浏览器窗口中打开该文件。我不记得为什么我改变了功能,除了可能是为了提高效率(也就是说,没有用很多PDF填充目录)。我需要重新回到那样做吗?我真的不想在新应用程序中不太可能用到的东西上投入太多精力,所以如果有人能给我一个简单的解决方案,它将始终如一地工作,我将非常感激
# 1 楼答案
尝试更改servlet以接受GET或更改为Chrome
我在IE上也遇到了同样的问题,当用户单击generate PDF按钮时,IE向Java方法发送帖子,但就在servlet响应PDF输出时,Acrobat插件被加载,这会发送第二条帖子,但这次是GET,我的控制器没有响应GET提交