Jasper 报告无法导出为 PDF
Posted
技术标签:
【中文标题】Jasper 报告无法导出为 PDF【英文标题】:Jasper Report can't be exported to PDF 【发布时间】:2019-06-20 22:32:42 【问题描述】:我正在尝试将 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。
提前致谢。
【问题讨论】:
1.请将完整的堆栈跟踪作为文本而不是图片发布。 2.尝试使用其他路径导出文件,因为应用程序可能无法写入C盘 正如@samabcde 所说,如果是权限问题,请尝试保存在 Tomcat 的临时目录中,它应该可以工作。 【参考方案1】:我用这段代码解决了这个问题……
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();
【讨论】:
【参考方案2】:JasperFillManager.fillReportToFile
不会生成 PDF,而是生成序列化的填充报表对象。出于某种原因,填充的报告引用了一个不可序列化的DefaultJasperReportsContext
实例。这不应该发生,但要了解它为什么会发生,我们需要有关此案的更多细节。
但是如果你想生成一个PDF,你不需要序列化填充的报告。您可以执行以下操作直接生成 PDF:
JasperRunManager.runReportToPdfFile(sourceFileName, "C://sample_report.pdf",
parameters, new JRBeanCollectionDataSource(lstDataSource));
【讨论】:
谢谢,我尝试了您的解决方案,但现在收到此错误消息 net.sf.jasperreports.engine.JRException: 保存文件时出错:C://sample_report.pdf 原因by ... 引起:java.io.NotSerializableException: net.sf.jasperreports.engine.DefaultJasperReportsContext 你能发布完整的异常堆栈跟踪吗?以上是关于Jasper 报告无法导出为 PDF的主要内容,如果未能解决你的问题,请参考以下文章
利用程序将.jrxml导出为.jasper文件并用PDF显示
JasperReports 服务器:如何使用 url 将报告导出为 html 文件