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);
答案 0 :(得分:1)
这肯定是一个类路径问题
Jasper尝试首先将资源作为绝对路径加载,然后作为通过app类路径的相对路径
您可以尝试处理模板和子报表的绝对路径,它应该可以正常工作
您还可以尝试将资源目录放在应用程序的类路径中-cp "/path/to/resourceDir/*"