填写Jasper报告时无法找到外部模板

时间:2013-01-09 09:03:33

标签: java jasper-reports

Jasper报告可以使用.jrxml文件中引用的外部模板和子报告,如下所示:

<template><![CDATA["repo:template.jrtx"]]></template>
<subreportExpression><![CDATA["repo:subreport.jrxml"]]></subreportExpression>

这在Jasper服务器上运行时效果很好,但是当从Java代码启动进程时,它会返回如下错误:

  

net.sf.jasperreports.engine.JRException:找不到资源:repo:template.jrxml   at net.sf.jasperreports.repo.RepositoryUtil.getResourceFromLocation(RepositoryUtil.java:255)   at net.sf.jasperreports.repo.RepositoryUtil.getReport(RepositoryUtil.java:208)   at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluateReport(JRFillSubreport.java:329)

在Jasper设计器中,资源被添加到 Resources 列表中,该列表未存储在报告文件中。如何对RepositoryUtil执行相同的操作?即告诉RepositoryUtil用某个真实位置替换“repo”?我使用的代码:

Connection conn = ... ;
String reportSource = "C:\\report.jrxml";
Map<String, Object> params = new HashMap<String, Object>();
JasperReport jasperReport = JasperCompileManager.compileReport(reportSource);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, conn);

1 个答案:

答案 0 :(得分:1)

这肯定是一个类路径问题

Jasper尝试首先将资源作为绝对路径加载,然后作为通过app类路径的相对路径

您可以尝试处理模板和子报表的绝对路径,它应该可以正常工作

您还可以尝试将资源目录放在应用程序的类路径中-cp "/path/to/resourceDir/*"