Jasper Report с несколькими подотчетами - PullRequest
0 голосов
/ 19 марта 2019

я новичок в отчете jasper, и я создаю java-программу, которая будет экспортировать отчет в pdf-файл, и использую отчет jasper с несколькими подотчетами, я создаю jrxml файлы с помощью jaspersoft studio.

это часть подотчета из моего файла jrxml основного отчета

        <subreport>
            <reportElement positionType="Float" x="18" y="1" width="522" height="65" uuid="f3063ed3-775f-47df-8306-a939aecc9d89"/>
            <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
            <subreportExpression><![CDATA["ClaimHistory.jasper"]]></subreportExpression>
        </subreport>

и еще одна подотчетная часть

        <subreport>
            <reportElement positionType="Float" x="18" y="2" width="522" height="65" uuid="a70d75e0-b9d0-4f52-bb84-090993c2e90b"/>
            <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
            <subreportExpression><![CDATA["ClaimDetail.jasper"]]></subreportExpression>
        </subreport>

каждый подотчет использует JRBeanCollectionDataSource (список) для данных, вот как я экспортирую яшму в pdf файл

    String jasperFile = "E:/jasper/jasperFile.jrxml";
    FileInputStream inputStream = new FileInputStream(jasperFile);
    JasperReport jasperReport = JasperCompileManager.compileReport(inputStream);
    List<JasperPrint> jasperPrintList = new ArrayList<JasperPrint>();
    JasperPrint print = JasperFillManager.fillReport(jasperReport, params, new JREmptyDataSource());
    jasperPrintList.add(print);
    JRPdfExporter exporter = new JRPdfExporter();
    exporter.setExporterInput(SimpleExporterInput.getInstance(jasperPrintList)); //Set as export input my list with JasperPrint s
    exporter.setExporterOutput(new SimpleOutputStreamExporterOutput("E:/output.pdf")); //or any other out streaam
    exporter.exportReport();

мой текущий навык способен создавать PDF-файлы без использования вложенного отчета, используя этот JRBeanCollectionDataSource (список) в качестве источника данных. (данные напечатаны успешно)

Может кто-нибудь сказать мне, как сделать отчет в формате PDF с несколькими подотчетами, что должно быть в моих основных файлах jrxml и в файлах подотчета jrxml, а также что должно быть в коде java? И как использовать несколько JRBeanCollectionDataSource ( список)?, единственное, что я знаю, это использование Map params = new HashMap (); но как это сделать ? Благодарю. - извини за мой плохой английский.

1 Ответ

0 голосов
/ 20 марта 2019

сначала определены источники данных подотчета в виде полей в основном отчете (main.jrxml)

<field name="claimHistoryDataSource" class="java.util.ArrayList">
    <fieldDescription><![CDATA[claimHistoryList}]]></fieldDescription>
</field>

<field name="claimDetailDataSource" class="java.util.ArrayList">
    <fieldDescription><![CDATA[claimDetailList}]]></fieldDescription>
</field>

claimHistoryList и claimDetailList - это списки массивов, определенные в классе java, который используется в качестве источника данных основного отчета.

затем передайте его в подотчет с dataSourceExpression

<subreport>
    <reportElement positionType="Float" x="18" y="1" width="522" height="65" uuid="f3063ed3-775f-47df-8306-a939aecc9d89"/>
    <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{claimHistoryDataSource})]]></dataSourceExpression>
    <subreportExpression><![CDATA["ClaimHistory.jasper"]]></subreportExpression>
</subreport>

<subreport>
    <reportElement positionType="Float" x="18" y="1" width="522" height="65" uuid="f3063ed3-775f-47df-8306-a939aecc9d89"/>
    <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{claimDetailDataSource})]]></dataSourceExpression>
    <subreportExpression><![CDATA["ClaimDetail.jasper"]]></subreportExpression>
</subreport>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...