Jasper reports 多个Jasper报告-单个请求

Jasper reports 多个Jasper报告-单个请求,jasper-reports,zip,itext,Jasper Reports,Zip,Itext,我有一个要求,在这里我可以选择多个记录,并为每个选择的条目选择生成带有每个文档(在我的例子中是pdf)的压缩报告的操作。 例如,将选择Employee1、Employee2、Employee3,当我选择生成报告时,应为员工生成3份报告,每个报告一份,并且必须压缩和下载输出 现在我要做的是生成jasperPrint并将报告导出到ZipoutStream,为每个员工提供一个新的zipentry。 这意味着运行三次查询并将outputstream添加到zip 有更好的方法吗?您的解决方案通常是正确的,

我有一个要求,在这里我可以选择多个记录,并为每个选择的条目选择生成带有每个文档(在我的例子中是pdf)的压缩报告的操作。 例如,将选择Employee1、Employee2、Employee3,当我选择生成报告时,应为员工生成3份报告,每个报告一份,并且必须压缩和下载输出

现在我要做的是生成jasperPrint并将报告导出到ZipoutStream,为每个员工提供一个新的zipentry。 这意味着运行三次查询并将outputstream添加到zip


有更好的方法吗?

您的解决方案通常是正确的,如果您需要避免多次查询,则可以选择其他方法

  • 将所有数据加载到
    列表中
    为每个员工传递
    新JRBeanCollectionDataSource(列表)
    。(这会减少查询,但会增加内存使用)

  • 如果您可以控制页面(例如,每页1名员工),则可以使用所有员工生成1份pdf,然后使用将其拆分为多份pdf

    PdfReader reader = new PdfReader("nameOfReport.pdf");
    int n = reader.getNumberOfPages();
    int i = 0;            
    while ( i < n ) {
        Document document = new Document(reader.getPageSizeWithRotation(1));
        PdfCopy writer = new PdfCopy(document, new FileOutputStream("Employee_" + i + ".pdf"));
        document.open();
        PdfImportedPage page = writer.getImportedPage(reader, ++i);
        writer.addPage(page);
        document.close();
        writer.close();
    }
    
    PdfReader=newpdfReader(“nameOfReport.pdf”);
    int n=reader.getNumberOfPages();
    int i=0;
    而(i

  • 您的解决方案通常是正确的,如果需要避免多个查询,则可以选择其他方法

  • 将所有数据加载到
    列表中
    为每个员工传递
    新JRBeanCollectionDataSource(列表)
    。(这会减少查询,但会增加内存使用)

  • 如果您可以控制页面(例如,每页1名员工),则可以使用所有员工生成1份pdf,然后使用将其拆分为多份pdf

    PdfReader reader = new PdfReader("nameOfReport.pdf");
    int n = reader.getNumberOfPages();
    int i = 0;            
    while ( i < n ) {
        Document document = new Document(reader.getPageSizeWithRotation(1));
        PdfCopy writer = new PdfCopy(document, new FileOutputStream("Employee_" + i + ".pdf"));
        document.open();
        PdfImportedPage page = writer.getImportedPage(reader, ++i);
        writer.addPage(page);
        document.close();
        writer.close();
    }
    
    PdfReader=newpdfReader(“nameOfReport.pdf”);
    int n=reader.getNumberOfPages();
    int i=0;
    而(i

  • 谢谢Petter.选项1帮助。谢谢Petter.选项1帮助。