我正在尝试将jasper报告导出为PDF,但是它不起作用。
这是我正在使用的代码。
注意:contextPath变量包含实际上下文。它具有指向.war文件的绝对路径的值
C:\ Program Files \ Apache Software Foundation \ Tomcat 8.5 \ webapps \ myWarFile \
String sourceFileName =
contextPath + "WEB-INF/classes/report/ClsReportBean.jasper";
JasperFillManager.fillReportToFile(sourceFileName, "C://sample_report.pdf",
parameters, new JRBeanCollectionDataSource(lstDataSource));
问题是当我尝试将报告导出为PDF时。这是错误消息。
net.sf.jasperreports.engine.JRException:保存文件时出错: C:\ sample_report.pdf。
谢谢。
答案 0 :(得分:0)
JasperFillManager.fillReportToFile
不会生成PDF,而是会生成序列化的填充报告对象。由于某种原因,已填充的报告引用了DefaultJasperReportsContext
实例,该实例不可序列化。那不应该发生,但是要了解为什么会发生,我们需要有关此案的更多细节。
但是,如果要生成PDF,则无需序列化已填充的报告。您可以执行以下操作直接生成PDF:
JasperRunManager.runReportToPdfFile(sourceFileName, "C://sample_report.pdf",
parameters, new JRBeanCollectionDataSource(lstDataSource));
答案 1 :(得分:0)
我使用此代码解决了问题...
try {
File file = new File(exportPdfPath);
if (!file.exists()) {
LOGGER.info("creating folder");
file.mkdir();
file.setWritable(true);
}
JasperPrint something = JasperFillManager.fillReport(sourceFileName, parameters, new JRBeanCollectionDataSource(lstDataSource));
OutputStream output = new FileOutputStream(new File(exportPdfPath+"/test.pdf"));
JasperExportManager.exportReportToPdfStream(something, output);
output.close();
}