Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在运行时用java编译jasperreport子报表_Java_Spring Mvc_Jasper Reports_Report_Maven 3 - Fatal编程技术网

在运行时用java编译jasperreport子报表

在运行时用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

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

net.sf.jasperreports
jasperreports
5.6.0
net.sourceforge.jexcelapi
jxl
2.6.12

多亏了这篇文章,我找到了一条路


基本上,它需要读取jrxml文件来检测子报告,并将它们编译成.jasper应该使用的物理路径。

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

基本上,它需要读取jrxml文件来检测子报告,并将它们编译为.jasper应该使用的物理路径