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

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


当在Jasper服务器上运行时,这完美地工作,但是当从Java代码在进程中启动时,它返回如下错误:


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


在Jasper Designer中,资源被添加到未存储在报告文件中的“资源”列表中。如何使用RepositoryUtil做同样的事情?即告诉RepositoryUtil用某个实际位置替换“回购”?我使用的代码:

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);

最佳答案

那肯定是一个类路径问题

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

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

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

09-26 12:26