Реализовать пакетный экспорт на сервере отчетов Jasper, чтобы получить альбомную и книжную ориентации в одном отчете


Я пытаюсь реализовать пакетный экспорт, подобный здесь (как в ссылке) в отчетах jasper. Пожалуйста, дайте указания.

Что у меня есть: 1. Шаблон Портрета 2. Шаблон Ландшафта 3. Порядок, в котором мне нужно генерировать отчеты 4. Тот же источник данных Bean с запросами фильтра для каждого шаблона для заполнения

Что мне нужно: Сгенерируйте отчеты отдельно и объедините все сгенерированные объекты JasperPrint и настройте номер страницы

3 2

3 ответа:

Поскольку вы создаете отчеты и затем объединяете их, текущий номер страницы и общее количество страниц доступны только во время экспорта, в зависимости от количества отчетов, которые вы объединяете. Мы решили аналогичную проблему, используяОбщие элементы . Вам нужно написать свою собственную логику для обработки номера страницы внутри обработчика, который вы создаете.

Мой отчет Страница 1 (jr1) - это портрет, а страница 2 (jr2) - пейзаж.

JasperReport jr1 = (JasperReport) JRLoader.loadObject(...);
JasperReport jr2 = (JasperReport) JRLoader.loadObject(...);

JREmptyDataSource ds = new JREmptyDataSource(1);
JasperPrint print1 = JasperFillManager.fillReport(jr1, new HashMap(), ds);

ds.moveFirst();

JasperPrint print2 = JasperFillManager.fillReport(jr2, new HashMap(), ds);
List l = new ArrayList();

l.add(print1);
l.add(print2);

JRPdfExporter exp = new JRPdfExporter();
exp.setParameter(JRExporterParameter.JASPER_PRINT_LIST, l);
exp.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, SAVE_LOCATION);
exp.exportReport();

Это может сработать для проблемы номера страницы:

Private static void mergeAndNumber () вызывает исключение IOException, DocumentException {

    PdfReader readerOne = new PdfReader("c:\file_one.pdf"«»);



    // we retrieve the total number of pages

    int nOne = readerOne.getNumberOfPages();



    PdfReader readerTwo = new PdfReader("c:\file_two.pdf"«»);



    // we retrieve the total number of pages

    int nTwo = readerTwo.getNumberOfPages();



    int totalPages = (nOne + nTwo);

    System.out.println("Total number of pages: " + (nOne + nTwo));



    Rectangle psize = readerOne.getPageSize(1);

    float widthPort = psize.width();

    float heightPort = psize.height();



    // step 1: creation of a document-object

    Document document = new Document(psize, 50, 50, 50, 50);

    // step 2: we create a writer that listens to the document

    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("c:\file_combined.pdf"«»));



    document.open();

    // step 4: we add content

    PdfContentByte cb = writer.getDirectContent();



    PdfImportedPage importPage = null;



    BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);

    float pageNumXPos = widthPort;

    float pageNumYPos = heightPort;

    for (int i = 1; i <= nOne; i++) {

        document.newPage();

        importPage = writer.getImportedPage(readerOne, i);

        cb.addTemplate(importPage, 0,0);



        cb.moveTo(400, 40);         

        cb.beginText();

        cb.setFontAndSize(bf, 10);

        //cb.showText("Page " + i  + " of " + totalPages);          

        cb.showTextAligned(PdfContentByte.ALIGN_RIGHT, "Page " + i  + " of " + totalPages, pageNumXPos - 45, pageNumYPos - 55, 0);

        cb.endText();

    }



    document.setPageSize(PageSize.A4.rotate());



    for (int i = 1; i <= nTwo; i++) {

        document.newPage();

        importPage = writer.getImportedPage(readerTwo, i);

        cb.addTemplate(importPage, 0,0);



        cb.moveTo(400, 40);        

        cb.beginText();

        cb.setFontAndSize(bf, 10);

        cb.showTextAligned(PdfContentByte.ALIGN_RIGHT, "Page " + (nOne + i)  + " of " + totalPages, pageNumYPos - 20, pageNumXPos - 60, 0);         

        cb.endText();

    }



    document.close();        

}