如何将多个jrxml jasper报告整理成一个pdf输出文件

2022-09-03 01:45:16

我必须使用五个不同的sql查询来准备报告。每个查询将提供一个报告表。

因此,我编写了5个jrxml文件,每个文件对应于上述查询之一,并带有自己的标题,标题设置,页脚,页码等。

现在,我能够编译,打印和导出上述每个jrxmls到5个不同的pdf中。

但是,客户希望将所有报告整理成一个pdf。那就是在最终的pdf中,前四页将说报告一,接下来的五页报告二,然后报告三,依此类推。

1)如何实现这一目标?

2) 每份报告的页码为 1/4、2/4、3/4 等。其中第二部分,即完整的页码,以评估时间作为报告进行评估。因此,当我将所有报告整理成单个pdf(如果可能的话)时,是否也可以将页面重新编号为最终pdf?

根据下面的答案,我在我的java类中做了以下操作,它的工作原理:

 try
            {
            JasperReport jreport1 = JasperCompileManager.compileReport(input1);
            JasperPrint jprint1 = JasperFillManager.fillReport(jreport1, new HashMap(), new JREmptyDataSource());
            //JasperExportManager.exportReportToPdfFile(jprint, "/home/ashutosh/Desktop/desktop/nikunj/JasperTestApp/output/mytest.pdf");

            JasperReport jreport2 = JasperCompileManager.compileReport(input2);
            JasperPrint jprint2 = JasperFillManager.fillReport(jreport2, new HashMap(), new JREmptyDataSource());

            JasperReport jreport3 = JasperCompileManager.compileReport(input3);
            JasperPrint jprint3 = JasperFillManager.fillReport(jreport3, new HashMap(), new JREmptyDataSource());

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

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

            JRExporter exporter = new JRPdfExporter();
            exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT_LIST, jprintlist);

            OutputStream output = new FileOutputStream(new File("/home/ashutosh/Desktop/desktop/nikunj/JasperTestApp/output/mytestbatch.pdf"));

            exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, output);
            exporter.exportReport();

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

上图:input1、input2、input3 是输入 jrxmls 的字符串路径

我的JRXML文件只打印三条消息:Hello World 1,Hello World 2,Hello World 3。

 <?xml version="1.0"?>
<!DOCTYPE jasperReport
  PUBLIC "-//JasperReports//DTD Report Design//EN"
  "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">

<jasperReport name="Simple_Report">
 <detail>
    <band height="20">
      <staticText>
        <reportElement x="180" y="0" width="200" height="20"/>
        <text><![CDATA[Hello World One!]]></text>
      </staticText>
    </band>
  </detail>
</jasperReport>

感谢您的阅读!


答案 1

您可以利用导出整个碧玉印刷列表的优势:

List jpList = new ArrayList();
jpList.add(JRLoader.loadObjectFromFile("build/reports/Report1.jrprint")); 
...
JRExporter exporter = new JRPdfExporter(); 
exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT_LIST, jpList); 
exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, stream); 
exporter.exportReport();

答案 2

这个答案是为了帮助用户使用JASPER REPORT版本>5.6(最新版本),因此删除已弃用的代码。

由于 jasper-report 5.6 已被弃用,因此 Wojtek Owczarczyk 的当前代码答案为:JRPdfExporterParameter.JASPER_PRINT_LIST

List<JasperPrint> jpList = new ArrayList<>();
//add your JasperPrint's from loading jrprint or more 
//commonly filling report with JasperFillManager.fillReport 

JRPdfExporter exporter = new JRPdfExporter();
exporter.setExporterInput(SimpleExporterInput.getInstance(jpList)); //Set as export input
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(stream)); //Set output stream
SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
//set your configuration
exporter.setConfiguration(configuration);
exporter.exportReport();

推荐