在 java 中在运行时编译 jasperreport 子报表
Compile jasperreport subreports at runtime in java
我有一个 java 休息服务,returns 从 jasper 文件生成 PDF。对于某些业务规则,编译后的 .jasper 文件不会在服务上,只有 .jxrml 文件。我使用这一行
在运行时编译报告
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>
多亏了这个post
我找到了一个方法
Jasper Reports: How to compile subreports
基本上它涉及读取 jrxml 文件以检测子报表并将它们编译到 .jasper 应该所在的物理路径。
我有一个 java 休息服务,returns 从 jasper 文件生成 PDF。对于某些业务规则,编译后的 .jasper 文件不会在服务上,只有 .jxrml 文件。我使用这一行
在运行时编译报告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>
多亏了这个post
我找到了一个方法Jasper Reports: How to compile subreports
基本上它涉及读取 jrxml 文件以检测子报表并将它们编译到 .jasper 应该所在的物理路径。