com.hughes.exception.HughesException at com.hughes.service.serviceImpl.HomeServiceImpl.sendTicketEmail(HomeServiceImpl.java:1094) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ....................................................... .......................................... Caused by: net.sf.jasperreports.engine.JRException: Resource not found at : nullinvoiceDetail.jasper at net.sf.jasperreports.repo.RepositoryUtil.getResource(RepositoryUtil.java:155) at net.sf.jasperreports.repo.RepositoryUtil.getReport(RepositoryUtil.java:126) at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluateReport(JRFillSubreport.java:317) at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluateSubreport(JRFillSubreport.java:347) at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluate(JRFillSubreport.java:275) at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:257) at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:473) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2021) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:755) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:265) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:128) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:836) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:765) at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:84) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:624) at com.hughes.service.serviceImpl.HomeServiceImpl.sendTicketEmail(HomeServiceImpl.java:1046) ... 81 more
JasperReport jasperReport = JasperCompileManager.compileReport(hdnWebInfPath+seperator+"reports"+seperator+"invoice.jrxml");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, model, new JREmptyDataSource());
JasperExportManager.exportReportToPdfFile(jasperPrint, fPath+seperator+fileName);
当简单报表不适用于子报表时,此操作有效...
我的Jarper知识是两个版本的旧,但让我们希望这是有帮助的。
这是因为jasper找不到您的子报告。Jasper可以编译您的报表,但当您调用compileReport
时,它不会编译引用的子报表。填写报表时,由于工作目录中没有引用子报表,所以找不到引用子报表。
(每次被要求时都要编写报告是一个坏主意(除非你有很大的理由这样做)。)
public class ReportSource {
// Key = document name, Value = path to .jrxml
private Map<String, String> reports;
private final Map<String, JasperReport> compiled;
private final boolean lazy;
private final Logger log = Logger.getLogger(ReportSource.class);
public ReportSource(final boolean lazyBuild) {
super();
lazy = lazyBuild;
compiled = new HashMap<String, JasperReport>();
}
public void setCompileTargets(final Map<String, String> targets) {
reports = new HashMap<String, String>(targets);
if (!lazy) {
for (final String key : targets.keySet()) {
compile(key);
}
}
}
public JasperReport getReport(final String reportName) {
if (compiled.get(reportName) == null) { // not found or not compiled
log.info("Lazily compiling: " + reportName);
return compile(reportName);
}
return compiled.get(reportName);
}
private JasperReport compile(final String reportName) {
final String path = reports.get(reportName);
InputStream fis = null;
JasperReport report = null;
try {
final FileSystemResourceLoader resourceLoader = new FileSystemResourceLoader();
fis = resourceLoader.getResource(path).getInputStream();
log.info("Compiling report: " + reportName + " (" + path + ")");
report = JasperCompileManager.compileReport(fis);
} catch (final IOException ioe) {
throw new IllegalStateException("Configuration error file: " + path + " (for key: " + reportName +") not found.", ioe);
} catch (final JRException jre) {
throw new IllegalStateException("Configuration error file: " + path + " (for key: " + reportName +") not found.", jre);
}
compiled.put(reportName, report);
return report;
}
}
在该类的帮助下,您可以引用文档中的子报表,如下所示:
<subreport>
<reportElement x="0" y="0" width="200" height="30"/>
<subreportParameter name="data">
<subreportParameterExpression><![CDATA[$P{data}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="REPORT_RESOURCE_BUNDLE">
<subreportParameterExpression><![CDATA[$P{REPORT_RESOURCE_BUNDLE}]]></subreportParameterExpression>
</subreportParameter>
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.JREmptyDataSource()]]></dataSourceExpression>
<subreportExpression class="net.sf.jasperreports.engine.JasperReport"><![CDATA[$P{data}.getSubreport("name_of_your_subreport")]]></subreportExpression>
</subreport>
在这里,$P{data}
是作为文档参数提供的合适对象,其中GetSubReport()
最终调用ReportSource.GetReport()
。如果reportSource
直接作为参数提供,那么它当然可以是$p{reportSource}.getReport(“...”)
。(我们使用ReportModel-Approach;简而言之,它是适合于报表上下文的表示模型)。
我正在从. jasper文件加载jasper报告文件以提高性能,如下所示。 但是我现在有一个要求,动态形成的查询必须设置为. jasper(编译)文件。有没有办法做同样的事情?
但是当我移除EmployeeID参数时,我希望移除过滤器。所以所有的结果都应该显示出来。 我的问题是,在sql查询中传递可选where的正确方式是什么。
我正在使用Jaspersoft studio创建报告。我在我的Jasper主报告中有一个子报告。问题是,我无法做到这一点,因为如果我将子报告添加到主报告的< code>Detail band中,子报告会生成多次,有时是逐行生成,有时是整个子报告在若干页中重复。出于同样的原因,我不能把它放在< code > summer Band 中。 我无法将其放入或其他页脚中,因为它显示以下错误 由于以下错误,
我的应用程序中有几个类似的报告,因此我创建了一个基本结构,在标题中有一个子报告,在页脚中有另一个子报告。 我不知道为什么我找不到解决这个问题的方法,如果有人能帮我...谢谢!
我已经使用JRResultSetDataSource使用了Jasper报告,但这是我第一次使用JRBeanGrou 我正在尝试使用以下代码运行报告测试: 客户.java Report.java clientereport.jrxml Main.java 我得到以下错误: 我不知道我的代码有什么问题。
我试图做一个Jasper报表簿,稍后填充它的内容,并保持封面不变,但是当我使用与报表簿对应的. jasper时,我得到了一个空白页。我一个接一个地传递这本书的页面,它起作用了,但是当我传递整本书时,我什么也没得到。 有人知道如何在java中使用整个Jasper报告簿来生成PDF吗? 谢谢。