【问题标题】:jasper sub report page not showing (blank) from master report using JRBeanCollectionDataSource in java在 java 中使用 JRBeanCollectionDataSource 的主报告未显示(空白)jasper 子报告页面
【发布时间】:2022-11-28 16:47:49
【问题描述】:

我有来自 java 的 1 个子报告调用的报告,显示了详细带页面的 jasper 主报告,但未显示详细带页面的 jasper 子报告。在报告主 4 页中,第 1 和第 4 页是静态的,第 2 页显示列表,第 3 页显示子报告,但第 1、2、4 页显示空白子报告。单独生成子报告并编译两个报告,在主报告、子报告和 java 代码下方

主报告


    <parameter name="REPORT_DIR" class="java.lang.String" isForPrompting="false">
        <parameterDescription><![CDATA[]]></parameterDescription>
        <defaultValueExpression><![CDATA["C:\\Users\\Sachin\\Desktop\\ChannelBuzz\\codebase\\backend\\channelBuzz-CMT\\src\\main\\resources\\"]]></defaultValueExpression>
    </parameter>
    <parameter name="bookMarkList" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource"/>
    <parameter name="influencerSubReport" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource"/>
    <!--<field name="influencerSubReport" class="java.util.List"/>-->
----------------------------------------------------------------------------------  
            <subreport>
                <reportElement x="14" y="30" width="525" height="160" backcolor="#120302" uuid="b673878e-c46d-44f1-a694-9a74c2f33595"/>
                <subreportParameter name="REPORT_DIR">
                    <subreportParameterExpression><![CDATA[$P{REPORT_DIR}]]></subreportParameterExpression>
                </subreportParameter>
                <!--<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{influencerSubReport})]]></dataSourceExpression>-->
                <subreportExpression><![CDATA[$P{REPORT_DIR}+"subReport.jasper"]]></subreportExpression>
            </subreport>
        

子报告

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.20.0.final using JasperReports Library version 6.20.0-2bc7ab61c56f459e8176eb05c7705e145cd400ad  -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="subReport" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="c1e6d951-893e-47d6-aee0-ebf095bc2ad5">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <field name="fullName" class="java.lang.String"/>
    <field name="titleName" class="java.lang.String"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <detail>
        <band height="760" splitType="Stretch">
            <property name="com.jaspersoft.studio.unit.height" value="px"/>
            <image>
                <reportElement x="162" y="0" width="219" height="50" uuid="48aaf691-c160-4377-a97e-a2f7911a7e85"/>
                <imageExpression><![CDATA["asset/Channel_Buzz_logo.PNG"]]></imageExpression>
            </image>
            <frame>
                <reportElement mode="Opaque" x="14" y="60" width="525" height="160" forecolor="#4E059C" backcolor="rgba(21, 13, 110, 0.6666667)" uuid="aa3eecb5-d2ed-47aa-a919-dd6925ff62b3">
                    <property name="com.jaspersoft.studio.unit.height" value="px"/>
                </reportElement>
                <textField>
                    <reportElement x="170" y="20" width="150" height="30" forecolor="#FAFAFA" uuid="dbe450da-ffc5-4a37-a7c2-24bd909d0b6d"/>
                    <textElement>
                        <font fontName="Leelawadee" size="22" isBold="true"/>
                    </textElement>
                    <textFieldExpression><![CDATA[$F{titleName}]]></textFieldExpression>
                </textField>
                <staticText>
                    <reportElement x="330" y="20" width="34" height="30" forecolor="#FCF7F7" uuid="0bd7c7ec-9b07-4800-b1f0-8ffc99619078"/>
                    <textElement>
                        <font fontName="Leelawadee" size="22"/>
                    </textElement>
                    <text><![CDATA[by]]></text>
                </staticText>
                <textField>
                    <reportElement x="373" y="20" width="140" height="30" forecolor="#FCF5F5" uuid="14090b8c-c094-4a69-83c3-fbc8f28288c4"/>
                    <textElement>
                        <font fontName="Leelawadee" size="22" isBold="true"/>
                    </textElement>
                    <textFieldExpression><![CDATA[$F{fullName}]]></textFieldExpression>
                </textField>
            </frame>
        </band>
    </detail>
</jasperReport>

java代码

private void masterWordReport(InfluencerManagementData data) {

        final InputStream subStream = this.getClass().getResourceAsStream("/subReport.jrxml");
        final InputStream stream = this.getClass().getResourceAsStream("/ChannelBuzz_Influencer_JasperReport.jrxml");
        try {
            List<InfluencerManagementData> influencerSubReport = data.getInfluencerSubReport();
            final JRBeanCollectionDataSource bookMarkListSource = new JRBeanCollectionDataSource(data.getBookmarkedInfluencersData(), false);
            final JRBeanCollectionDataSource subReportListSource = new JRBeanCollectionDataSource(influencerSubReport, false);
            // Compile the Jasper report from .jrxml to .japser
            final JasperReport masterReport = JasperCompileManager.compileReport(stream);
            final JasperReport subReport = JasperCompileManager.compileReport(subStream);

            // Adding the additional dynamic parameters to the pdf.
            final Map<String, Object> parameters = new HashMap<>();
            parameters.put("bookMarkList", bookMarkListSource);
            parameters.put("REPORT_DIR", "C:\\Users\\Sachin\\Desktop\\ChannelBuzz\\codebase\\backend\\channelBuzz-CMT\\src\\main\\resources\\");
            parameters.put("influencerSubReport", subReport);

//          final JasperPrint pdfPrint = JasperFillManager.fillReport(masterReport, parameters, new JREmptyDataSource());
            final JasperPrint pdfPrint = JasperFillManager.fillReport(masterReport, parameters, subReportListSource);
//          JasperFillManager.fillReportToFile(masterReport,
//                  "C:\\Users\\Sachin\\Pictures\\Saved Pictures\\test\\master_report.jrprint", parameters, subReportListSource);           

            final String filePath = "C:\\Users\\Sachin\\Pictures\\Saved Pictures\\test\\";
            
//            Export to Word
              JRDocxExporter exporter = new JRDocxExporter();    
              exporter.setExporterInput(new SimpleExporterInput(pdfPrint)); 
              File exportReportFile = new File(filePath+"MasterReport" + ".docx");
              exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(exportReportFile));
              exporter.exportReport();
            System.out.println("Genrating the word fle report via jasper.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

我尝试了所有解决方案,但没有显示请检查此代码中是否缺少某些内容

我想在主报告中显示子报告,我想显示 4 页子报告

【问题讨论】:

    标签: java jasper-reports


    【解决方案1】:

    在主报告中像这样传递数据源表达式。

    <dataSourceExpression><![CDATA[(net.sf.jasperreports.engine.data.JRBeanCollectionDataSource)$P{influencerSubReport}]]></dataSourceExpression>
    

    在 java 代码中,将数据源作为参数而不是报告本身。

    parameters.put("influencerSubReport", subReportListSource );
    

    如果您的主报告不需要数据源,您可以传递空数据源

    final JasperPrint pdfPrint = JasperFillManager.fillReport(masterReport, parameters, new JREmptyDataSource());
    

    通过这种方式,主报表将采用一个参数并将其作为数据源传递给子报表。这应该工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多