Подтвердить что ты не робот

Как собрать несколько отчетов jasper jrxml в один файл вывода PDF

Мне нужно подготовить отчеты, используя пять разных запросов sql. Каждый запрос выдаст одну таблицу отчетов.

Итак, я написал 5 файлов jrxml, каждый из которых соответствует одному из вышеуказанных запросов, с их собственными заголовками, настройками заголовка, нижними колонтитулами, pagenumbers и т.д.

Теперь я могу скомпилировать, распечатать и экспортировать каждый из указанных выше jrxmls в 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();
            }

Выше: input1, input2, input3 - строковые пути для ввода jrxmls

Где мои файлы JRXML просто печатают три сообщения: Hello World 1, Hello World 2, Hello World 3.

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

Спасибо за чтение!

4b9b3361

Ответ 1

Вы можете воспользоваться экспортом всего списка jasperprint:

List jpList = new ArrayList();
jpList.add(JRLoader.loadObjectFromFile("build/reports/Report1.jrprint")); 
...
JRExporter exporter = new JRPdfExporter(); 
exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT_LIST, jpList); 
exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, stream); 
exporter.exportReport();

Ответ 2

Этот ответ должен помочь пользователям с версией JASPER REPORT > 5.6 (последняя версии), поэтому удалите устаревший код.

Так как jasper-report 5.6 JRPdfExporterParameter.JASPER_PRINT_LIST устарел текущий код Wojtek Owczarczyk answer:

List<JasperPrint> jpList = new ArrayList<>();
//add your JasperPrint from loading jrprint or more 
//commonly filling report with JasperFillManager.fillReport 

JRPdfExporter exporter = new JRPdfExporter();
exporter.setExporterInput(SimpleExporterInput.getInstance(jpList)); //Set as export input
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(stream)); //Set output stream
SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
//set your configuration
exporter.setConfiguration(configuration);
exporter.exportReport();

Ответ 3

Номера страниц без itext...

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;
}

Ответ 4

(пример iReport)

Часть I:

  • создать новый отчет прозрачной яшмы как отчет об упаковке для разных отчетов
  • data adapter = одна пустая запись - пустые строки
  • нажмите "Создать..."
  • выберите "пустые строки"
  • нажмите "next"
  • количество пустых записей = 1 (так что вы будете симулировать запись, и будет напечатан только ОДИН детальный диапазон)
  • так что пустой отчет готов Когда вы вызываете этот отчет из своей программы JAVA, сначала откройте подключение к базе данных и обменивайте это соединение в фоновом режиме. SubReports нашего отчета об упаковке может наследовать это соединение через параметры!

Часть 2)

  • добавить для каждого отчета, в который вы хотите встроить новую группу деталей.
  • каждая подробная группа содержит подрепорт (конечно, ссылка на другой автономный отчет)
  • установите для свойства "run down" значение "True" в определении подзаголовка нашего отчета об упаковке.

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