Domanda

I´m facing one problem, I have two jrmxl files. I want to join then in one pdf file, but each in one page.

I saw some tips below but I don´t know if they are the best, because my first file have 3 bands: title, detail and summary. The second have detail and summary.

So I want to keep this format if is possible, because in the summary have the page counter.

I´ve tried this but my second page is blank and have 5 cm of heigth.

List pages = new ArrayList<>();

for (String caminhoRelatorio : caminhoRelatorios) {
    reportPath = JasperCompileManager.compileReport(caminhoRelatorio);
    reportPage = JasperFillManager.fillReport(reportPath, parameters, ds);
    pages.add(reportPage);
}

ByteArrayOutputStream baos = new ByteArrayOutputStream();
JRPdfExporter jrPdfExporter = new JRPdfExporter();
jrPdfExporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, pages);
jrPdfExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
jrPdfExporter.setParameter(JRPdfExporterParameter.IS_CREATING_BATCH_MODE_BOOKMARKS, Boolean.TRUE);
jrPdfExporter.exportReport(); 

So what I need to do?

È stato utile?

Soluzione

To add multiple JRXMLs in one report/PDF, you can follow the below mentioned way:

Consider the method below to generate a PDF report with 2 JRXMLs which have added in the "jrxmlFileNames" list

public static void reportGenerator(String reportType, List<String> jrxmlFileNames, 
Datasource dataSource , String SwapFile)
{

    JRConcurrentSwapFile swapFile = new JRConcurrentSwapFile(SwapFile, 102400 , 10);
    JRAbstractLRUVirtualizer virtualizer = new JRSwapFileVirtualizer(1000, swapFile, true);
    Map<String, JRAbstractLRUVirtualizer> parameters = new HashMap<String, JRAbstractLRUVirtualizer>();
    parameters.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);
    try
    {
        if (reportType.equalsIgnoreCase("PDF"))
        {

            try
            {
                JasperReport jreport1 = JasperCompileManager.compileReport(ReportGenerator.class.getResourceAsStream(jrxmlFileNames.get(0)));
                JasperPrint jprint1 = JasperFillManager.fillReport(jreport1, parameters, new JRBeanCollectionDataSource(dataSource.getDataSourceFor1()));

                JasperReport jreport2 = JasperCompileManager.compileReport(ReportGenerator.class.getResourceAsStream(jrxmlFileNames.get(1)));
                JasperPrint jprint2 = JasperFillManager.fillReport(jreport2, parameters, new JRBeanCollectionDataSource(dataSource.getDataSourceFor2()));


                List<JasperPrint> jprintlist = new ArrayList<JasperPrint>();

                jprintlist.add(jprint1);
                jprintlist.add(jprint2);


                String fileName="TESTReport.pdf";
                JRExporter exporter = new JRPdfExporter();
                exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT_LIST, jprintlist);

                exporter.setParameter(JRPdfExporterParameter.OUTPUT_FILE_NAME, fileName);

                exporter.exportReport();

                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
            }

            swapFile.dispose();

        }
    catch(Exception e)
    {
     e.printStackTrace();
    }

}

In the above code the following part will help you adding the multiple JRXMLs

    List<JasperPrint> jprintlist = new ArrayList<JasperPrint>();    
    jprintlist.add(jprint1);
    jprintlist.add(jprint2);
    JRExporter exporter = new JRPdfExporter();   
exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT_LIST, jprintlist);

Hope it helps!

Altri suggerimenti

To get two pages in report you can use Report group and delete all other bands like detail, summary.

To add report group :-

1:- Open report and in Report inspector right click and select "Add Report Group".

2:- Give any name and choose "Group by the following expression" radio button and leave the expression blank and then Next, select only Report header and then finish.

3:- Now for the second page you can add one more Report Group in the same way.

Here there is a similar question: How do i add a second page on Jaspersoft iReport designer. There is also a simpler way: Put a Page Break component on your Detail Band, which means, drag and drop a 'Break' component, and on the popUp that will get displayed select "Page Break"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top