0

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

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

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

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

在 Jasper 设计器中,资源被添加到未存储在报告文件中的资源列表中。我该如何做同样的事情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);
4

1 回答 1

1

这当然是一个类路径问题

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

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

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

于 2013-01-09T09:33:13.340 回答