在运行时用java编译jasperreport子报表
我有一个JavaREST服务,它从jasper文件返回生成的PDF。对于某些业务规则,已编译的.jasper文件将不在服务上,只有.jxrml文件。我使用这行代码在运行时编译报告在运行时用java编译jasperreport子报表,java,spring-mvc,jasper-reports,report,maven-3,Java,Spring Mvc,Jasper Reports,Report,Maven 3,我有一个JavaREST服务,它从jasper文件返回生成的PDF。对于某些业务规则,已编译的.jasper文件将不在服务上,只有.jxrml文件。我使用这行代码在运行时编译报告 JasperReport report = JasperCompileManager.compileReport(fileName); 这是子报表的原始部分,引用了编译的.jasper文件 <subreport isUsingCache="false"> <r
JasperReport report = JasperCompileManager.compileReport(fileName);
这是子报表的原始部分,引用了编译的.jasper文件
<subreport isUsingCache="false">
<reportElement x="57" y="30" width="498" height="15" isRemoveLineWhenBlank="true" uuid="5b26c250-7d4d-4ddb-9fdc-834a98fc6eac"/>
<subreportParameter name="fecha">
<subreportParameterExpression><![CDATA[$F{recorridodato_Fecha}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="idRuta">
<subreportParameterExpression><![CDATA[$F{ruta_RutaId}.longValue()]]></subreportParameterExpression>
</subreportParameter>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "subreport.jasper"]]></subreportExpression>
</subreport>
这就是我在某个地方(我不记得在哪里)读到的我应该做的事情
<subreport isUsingCache="false">
<reportElement x="57" y="30" width="498" height="15" isRemoveLineWhenBlank="true" uuid="5b26c250-7d4d-4ddb-9fdc-834a98fc6eac"/>
<subreportParameter name="fecha">
<subreportParameterExpression><![CDATA[$F{recorridodato_Fecha}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="idRuta">
<subreportParameterExpression><![CDATA[$F{ruta_RutaId}.longValue()]]></subreportParameterExpression>
</subreportParameter>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<subreportExpression><![CDATA[JasperCompileManager.compileReport(getClass().getResource($P{SUBREPORT_DIR} + "subreport.jrxml").openStream())]]></subreportExpression>
</subreport>
第二个选项在从iReport中调用报表时起作用。然而,当从服务调用时,它会失败。生成的PDF不会打印子报表数据。第一个选项在iReport和REST服务调用上都正常工作,但它引用了编译的.jasper文件,该文件将不可访问。因此,我需要通过只引用.jrxml子报告路径(而不是.jasper文件)来生成Java中的全局报告
我正在使用这些maven引用
<!-- Jasper-->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>5.6.0</version>
</dependency>
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
net.sf.jasperreports
jasperreports
5.6.0
net.sourceforge.jexcelapi
jxl
2.6.12
多亏了这篇文章,我找到了一条路
基本上,它需要读取jrxml文件来检测子报告,并将它们编译成.jasper应该使用的物理路径。多亏了这篇文章,我找到了一种方法 基本上,它需要读取jrxml文件来检测子报告,并将它们编译为.jasper应该使用的物理路径