gpt4 book ai didi

java - 在java中运行时编译jasperreport子报表

转载 作者:太空宇宙 更新时间:2023-11-04 13:45:27 25 4
gpt4 key购买 nike

我有一个 java Rest 服务,它从 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>

最佳答案

多亏了这篇文章,我找到了一种方法

Jasper Reports: How to compile subreports

基本上,它涉及读取 jrxml 文件以检测子报告并将它们编译到 .jasper 应该所在的物理路径。

关于java - 在java中运行时编译jasperreport子报表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30895732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com