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

Java 如何将多个jrxml jasper报告整理成一个pdf输出文件,java,jasper-reports,Java,Jasper Reports,我必须使用五种不同的sql查询来准备报告。每个查询将给出一个报表表 因此,我编写了5个jrxml文件,每个文件对应于上面的一个查询,并具有自己的标题、标题设置、页脚、页码等 现在,我能够编译、打印和导出上述每个JRXML到5个不同的PDF中 然而,客户希望将所有报告整理成一份pdf。也就是说,在最终的pdf中,前四页是报告一,下五页是报告二,然后是报告三,依此类推 1) 如何做到这一点 2) 每份报告的页码为1/4、2/4、3/4等,其中第二部分即完整页码以评估时间作为报告进行评估。因此,当我将

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

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

现在,我能够编译、打印和导出上述每个JRXML到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();
            }
试试看
{
JasperReport jreport1=JasperCompileManager.compileReport(input1);
JasperPrint jprint1=JasperFillManager.fillReport(jreport1,newhashmap(),newjreportydatasource());
//JasperExportManager.exportreporttopffile(jprint,“/home/ashutosh/Desktop/Desktop/nikunj/JasperTestApp/output/mytest.pdf”);
JasperReport jreport2=JasperCompileManager.compileReport(input2);
JasperPrint jprint2=JasperFillManager.fillReport(jreport2,newhashmap(),newjreportydatasource());
JasperReport jreport3=JasperCompileManager.compileReport(input3);
JasperPrint jprint3=JasperFillManager.fillReport(jreport3,newhashmap(),newjreportydatasource());
List jprintlist=newarraylist();
jprintlist.add(jprint1);
jprintlist.add(jprint2);
jprintlist.add(jprint3);
jreporter=新的JRPdfExporter();
exporter.setParameter(JRPdfExporterParameter.JASPER\u PRINT\u LIST,jprintlist);
OutputStream output=新文件OutputStream(新文件(“/home/ashutosh/Desktop/Desktop/nikunj/JasperTestApp/output/mytestbatch.pdf”);
exporter.setParameter(JRPdfExporterParameter.OUTPUT\u流,输出);
出口商。出口报告();
}捕获(例外e)
{
e、 printStackTrace();
}
上面:input1、input2、input3是输入jrmls的字符串路径

我的JRXML文件只打印三条消息:HelloWorld1、HelloWorld2、HelloWorld3

 <?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>


谢谢你的阅读

您可以利用导出整个jasperprint列表的优势:

List jpList=newarraylist();
add(JRLoader.loadObjectFromFile(“build/reports/Report1.jrprint”);
...
jreporter=新的JRPdfExporter();
exporter.setParameter(JRPdfExporterParameter.JASPER\u PRINT\u LIST,jpList);
exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM,STREAM);
出口商。出口报告();

您可以利用导出整个jasperprint列表的优势:

List jpList=newarraylist();
add(JRLoader.loadObjectFromFile(“build/reports/Report1.jrprint”);
...
jreporter=新的JRPdfExporter();
exporter.setParameter(JRPdfExporterParameter.JASPER\u PRINT\u LIST,jpList);
exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM,STREAM);
出口商。出口报告();

不带文本的页码

private void drawPageNumbers(List<JasperPrint> listJasperPrint, int totalPages) throws JRException {

    int pageCount = 0;
    int posY = 0;
    int posX = 0;

    for (JasperPrint jasperPrint : listJasperPrint) {

        if (jasperPrint.getOrientation() == JRReport.ORIENTATION_PORTRAIT) {
            posY = 805;
            posX = 472;
        }

        if (jasperPrint.getOrientation() == JRReport.ORIENTATION_LANDSCAPE) {
            posY = 558;
            posX = 717;
        }

        for (Object obj : jasperPrint.getPages()) {

            pageCount++;
            JRPrintPage page = (JRPrintPage) obj;

            JRPrintText textTotalPages = new JRTemplatePrintText(new JRTemplateText(
                    jasperPrint.getOrigins()[0], jasperPrint.getDefaultStyleProvider()));
            textTotalPages.setX(posX + 54);
            textTotalPages.setY(posY);
            textTotalPages.setWidth(40);
            textTotalPages.setHeight(16);
            textTotalPages.setText(" " + totalPages);
            page.addElement(textTotalPages);

            JRPrintText textPageNumber = new JRTemplatePrintText(new JRTemplateText(
                    jasperPrint.getOrigins()[0], jasperPrint.getDefaultStyleProvider()));
            textPageNumber.setX(posX);
            textPageNumber.setY(posY);
            textPageNumber.setWidth(80);
            textPageNumber.setHeight(16);
            textPageNumber.setText("Página " + pageCount + " de");
            page.addElement(textPageNumber);
        }
    }

    return;
}
private void drawPageNumber(列表jasperprint,int totalPages)引发异常{
int pageCount=0;
int-posY=0;
int posX=0;
用于(JasperPrint JasperPrint:listJasperPrint){
if(jasperPrint.getOrientation()==JRReport.ORIENTATION\u纵向){
posY=805;
posX=472;
}
if(jasperPrint.getOrientation()==JRReport.ORIENTATION\u横向){
posY=558;
posX=717;
}
对于(对象obj:jasperPrint.getPages()){
pageCount++;
JRPrintPage=(JRPrintPage)obj;
JRPrintText textTotalPages=新JRTemplatePrintText(新JRTemplateText(
jasperPrint.getOrigins()[0],jasperPrint.getDefaultStyleProvider());
textTotalPages.setX(posX+54);
textTotalPages.setY(posY);
textTotalPages.setWidth(40);
textTotalPages.setHeight(16);
textTotalPages.setText(“+totalPages”);
第页。附录(textTotalPages);
JRPrintText textPageNumber=新JRTemplatePrintText(新JRTemplateText(
jasperPrint.getOrigins()[0],jasperPrint.getDefaultStyleProvider());
textPageNumber.setX(posX);
textPageNumber.setY(posY);
textPageNumber.setWidth(80);
textPageNumber.setHeight(16);
textPageNumber.setText(“Página”+pageCount+de”);
第页。附录(文本页码);
}
}
返回;
}

不带文本的页码

private void drawPageNumbers(List<JasperPrint> listJasperPrint, int totalPages) throws JRException {

    int pageCount = 0;
    int posY = 0;
    int posX = 0;

    for (JasperPrint jasperPrint : listJasperPrint) {

        if (jasperPrint.getOrientation() == JRReport.ORIENTATION_PORTRAIT) {
            posY = 805;
            posX = 472;
        }

        if (jasperPrint.getOrientation() == JRReport.ORIENTATION_LANDSCAPE) {
            posY = 558;
            posX = 717;
        }

        for (Object obj : jasperPrint.getPages()) {

            pageCount++;
            JRPrintPage page = (JRPrintPage) obj;

            JRPrintText textTotalPages = new JRTemplatePrintText(new JRTemplateText(
                    jasperPrint.getOrigins()[0], jasperPrint.getDefaultStyleProvider()));
            textTotalPages.setX(posX + 54);
            textTotalPages.setY(posY);
            textTotalPages.setWidth(40);
            textTotalPages.setHeight(16);
            textTotalPages.setText(" " + totalPages);
            page.addElement(textTotalPages);

            JRPrintText textPageNumber = new JRTemplatePrintText(new JRTemplateText(
                    jasperPrint.getOrigins()[0], jasperPrint.getDefaultStyleProvider()));
            textPageNumber.setX(posX);
            textPageNumber.setY(posY);
            textPageNumber.setWidth(80);
            textPageNumber.setHeight(16);
            textPageNumber.setText("Página " + pageCount + " de");
            page.addElement(textPageNumber);
        }
    }

    return;
}
private void drawPageNumber(列表jasperprint,int totalPages)引发异常{
int pageCount=0;
int-posY=0;
int posX=0;
用于(JasperPrint JasperPrint:listJasperPrint){
if(jasperPrint.getOrientation()==JRReport.ORIENTATION\u纵向){
posY=805;
posX=472;
}
if(jasperPrint.getOrientation()==JRReport.ORIENTATION\u横向){
posY=558;
posX=717;
}
对于(对象obj:jasperPrint.getPages()){
pageCount++;
JRPrintPage=(JRPrintPage)obj;
JRPrintText textTotalPages=新JRTemplatePrintText(新JRTemplateText(
jasperPrint.getOrigins()[0],jasperPrint.getDefaultStyleProvider());
textTotalPages.setX(posX+54);
文本
JasperPrint jp1 = JasperFillManager.fillReport(reportFile1,reportParams,Connection);  
JasperPrint jp2 = JasperFillManager.fillReport(reportFile2,reportParams,Connection);  
for (int j = 0; j < jp1.getPages().size(); j++) {  
    //Add First report to second report
    jp2.addPage((JRPrintPage) jp1.getPages().get(j));  
}