多个 Jasper 报告 - 单个请求

Multiple Jasper reports - Single request

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

现在我所做的是生成 jasperPrint 并将报告导出到 ZipOutputstream,并为每个员工创建一个新的 zipentry。 这意味着 运行 三次查询并将输出流添加到 zip。

有更好的方法吗?

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

  1. 将所有数据加载到 List<Employee> 中,并为每位员工传递 new JRBeanCollectionDataSource(List<Employee>)。 (这会减少查询但会增加内存使用量)。

  2. 如果您可以控制页面(例如每页 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();
    }