Реализовать пакетный экспорт на сервере отчетов Jasper, чтобы получить альбомную и книжную ориентации в одном отчете
Я пытаюсь реализовать пакетный экспорт, подобный здесь (как в ссылке) в отчетах jasper. Пожалуйста, дайте указания.
Что у меня есть: 1. Шаблон Портрета 2. Шаблон Ландшафта 3. Порядок, в котором мне нужно генерировать отчеты 4. Тот же источник данных Bean с запросами фильтра для каждого шаблона для заполнения
Что мне нужно: Сгенерируйте отчеты отдельно и объедините все сгенерированные объекты JasperPrint и настройте номер страницы
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(); }