Page 1 of 2

Merge multiple reports into one

Posted: Wed Aug 03, 2022 2:52 pm
by Lezenn
Hi,

I'd need to merge multiple reports into one.
I found this topic: viewtopic.php?t=35102 about merging reports from code in C#.

But if I try it in Java,

Code: Select all

reportPart.getCompiledReport();
returns null. IntelliJ shows me that

Code: Select all

reportPart.Compile();

does nothing (empty method).

How can I do it in Java?

Re: Merge multiple reports into one

Posted: Thu Aug 04, 2022 6:32 am
by Lech Kulikowski
Hello,

Please check the following topic:
viewtopic.php?f=27&t=56842

Thank you.

Re: Merge multiple reports into one

Posted: Thu Aug 04, 2022 8:38 am
by Lezenn
Hi,

Thank for your reply.
I have this code:

Code: Select all

            StiReport reportCombine = new StiReport();
            reportCombine.setReportUnit(StiReportUnitType.Centimeters);
            reportCombine.render();
            reportCombine.getRenderedPages().clear();

            for (/* Datas to inject in each subreport */) {

                StiReport subReport = StiSerializeManager.deserializeReport(this.getClass().getClassLoader().getResourceAsStream("my_template.mrt"));

                subReport.setCalculationMode(StiCalculationMode.Interpretation);
                injecterDonnees(releve, subReport); // Puts datas into the report
                subReport.render();

                for (StiPage page : simpleReleve.getRenderedPages()) {
                    reportCombine.getRenderedPages().add(page);
                }
            }

            StiExportManager.exportPdf(reportCombine, sortieDocument);
Stimulsoft crashes on the reportCombine.render() call, on an ArrayIndexOutOfBoundException Index 0, Size 0.
Am I doing it wrong ?

Re: Merge multiple reports into one

Posted: Fri Aug 05, 2022 7:06 am
by Vadim
Hello.

Instead new StiReport(); please use StiReport.newInstance()

Re: Merge multiple reports into one

Posted: Fri Aug 05, 2022 8:54 am
by Lezenn
Hi,

Thanks for your reply. The rendering does not crash anymore. Now I have to find out why I get a single blank page :)

Re: Merge multiple reports into one

Posted: Fri Aug 05, 2022 10:13 am
by Vadim
Hello.

Maybe you got empty simpleReleve.getRenderedPages()
Please check reportCombine.getRenderedPages() filling before PDF export.

Re: Merge multiple reports into one

Posted: Fri Aug 05, 2022 12:22 pm
by Lezenn
It seems like I get my simpleReports without any components.

Re: Merge multiple reports into one

Posted: Fri Aug 05, 2022 12:50 pm
by Lezenn
So,

My solution is:

Code: Select all

            StiReport reportCombine = StiReport.newInstance();
            reportCombine.setReportUnit(StiReportUnitType.Centimeters);
            reportCombine.getRenderedPages().clear();

            for (/* for each sub report data */) {

                StiReport simpleReleve = StiSerializeManager.deserializeReport(
                        Objects.requireNonNull(this.getClass().getClassLoader().getResourceAsStream("template.mrt"))
                );

                simpleReleve.setCalculationMode(StiCalculationMode.Interpretation);
                injecterDonnees(subReportData, simpleReleve); // Put sub report data
                simpleReleve.render();

		// Report merging
                for (StiPage page : simpleReleve.getRenderedPages()) {
                    if (!reportCombine.getRenderedPages().add(page)) {
                        log.warn("Une page n'a pu être ajoutée au document final.");
                    }
                }
            }

            StiExportManager.exportPdf(reportCombine, sortieDocument);
It works fine. Thank for your help !

Re: Merge multiple reports into one

Posted: Fri Aug 05, 2022 2:13 pm
by Lech Kulikowski
Hello,

You are welcome.

Re: Merge multiple reports into one

Posted: Thu Sep 15, 2022 8:44 am
by Lezenn
Hi, it's me again

I now have to do pagination on the whole document (the merged one).
For now, it shows pages like this: 1/1, 1/1, 1/2, 2/2, 1/4, 2/4, ...
I'd like to have the right values. For example: 1/15, 2/15, 3/15, ...

Do you have an idea ?