tutorial studio jaspersoft jasperreports jasperreport generar español java jasper-reports

java - studio - Cómo recopilar varios informes jrxml jasper en un único archivo de salida pdf



jasperreports tutorial español (5)

Esta respuesta es para ayudar a los usuarios con JASPER REPORT VERSION> 5.6 (últimas versiones), por lo tanto, elimine el código en desuso.

Dado que jasper-report 5.6 JRPdfExporterParameter.JASPER_PRINT_LIST está deprecated el código actual de Wojtek Owczarczyk es:

List<JasperPrint> jpList = new ArrayList<>(); //add your JasperPrint''s 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();

Tengo que preparar informes utilizando cinco consultas de SQL diferentes. Cada consulta dará una tabla de informes.

Así que escribí 5 archivos jrxml cada uno correspondiente a una de las consultas anteriores con sus propios encabezados, configuración de títulos, pies de página, números de página, etc.

Ahora, puedo compilar, imprimir y exportar cada uno de los jrxmls anteriores en 5 pdf diferentes.

Sin embargo, el cliente desea que todos los informes se recopilen en un solo pdf. Eso está en el pdf final, las primeras cuatro páginas serán, digamos, informe uno, las siguientes cinco páginas informan dos, luego informan tres y así sucesivamente.

1) ¿Cómo lograr esto?

2) Cada informe tiene un número de página como 1/4, 2/4, 3/4, etc. En la segunda parte, es decir, el número de página completo se evalúa con el tiempo de evaluación como informe. Entonces, cuando compagine todos los informes en un solo pdf (si es posible), ¿también será posible volver a numerar las páginas en la justificación al pdf final?

Basado en la respuesta a continuación, hice lo siguiente en mi clase de java y funciona:

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

Arriba: input1, input2, input3 son rutas de cadena para ingresar jrxmls

Donde mis archivos JRXML solo imprimen tres mensajes: 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>

¡Gracias por leer!


(Ejemplo de iReport)

Parte I:

  • cree un nuevo informe de jaspe en blanco como un informe de envoltorio para diferentes informes
  • adaptador de datos = un registro vacío - filas vacías
  • haga clic en "Nuevo ..."
  • elige "filas vacías"
  • haga clic en Siguiente"
  • número de registros vacíos = 1 (por lo que simulará en el registro y solo se imprimirá UNA banda de detalles)
  • de modo que el informe en blanco está listo. Cuando llame a este informe desde su programa JAVA, primero abra una conexión de datos a la base de datos e intercambie esta conexión en segundo plano. Los informes secundarios de nuestro informe de envoltorio pueden heredar esta conexión a través de parámetros.

Parte 2)

  • Agregue para cada informe que desee incrustar una nueva banda de detalles.
  • cada banda de detalle contiene un subinforme (enlace al otro informe independiente, por supuesto)
  • establezca la propiedad "run to bottom" en "True" en la definición del subinforme de nuestro informe de contenedor

Este concepto funciona para mí. Dependiendo de los parámetros, puedes activar o desactivar diferentes bandas, por supuesto.


Números de página sin 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; }


Puede aprovechar la exportación de toda la lista de 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();


puedes probar este

JasperPrint jp1 = JasperFillManager.fillReport(reportFile1,reportParams,Connection); JasperPrint jp2 = JasperFillManager.fillReport(reportFile2,reportParams,Connection); for (int j = 0; j < jp1.getPages().size(); j++) { //Add First report to second report jp2.addPage((JRPrintPage) jp1.getPages().get(j)); }