2011-12-19 10 views
17

Tengo que preparar informes usando cinco consultas SQL diferentes. Cada consulta dará una tabla de informe.Cómo cotejar múltiples informes jrxml jasper en un solo archivo de salida pdf

Así que escribió 5 archivos jrxml corresponden cada una a una de la consulta anterior con sus propias partidas, la configuración de título, pies de página, números de página, etc.

Ahora, soy capaz de compilar, imprimir y exportar cada una de las arriba jrxmls en 5 pdfs diferentes.

Sin embargo, el cliente desea reunir todos los informes en un solo pdf. Eso está en el pdf final, las primeras cuatro páginas serán decir informe uno, las cinco páginas siguientes 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. Donde 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 cotejaré todos los informes en un solo pdf (si es posible), ¿será posible volver a numerar las páginas en la justificación para el pdf final?

Sobre la base de 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 caminos de cadena a la entrada jrxmls

Cuando mis archivos JRXML solo imprime 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 su lectura!

+0

la respuesta de Alex K es buena. También debería poder obtener lo que desea colocando los informes individuales en subinformes de un informe maestro. Será más trabajo, pero le permitirá manejar el requisito de numeración de páginas. Definitivamente deberías votar por esto también. Cubriría exactamente lo que está describiendo: http://jasperforge.org/projects/jasperreports/tracker/view.php?id=4178 – mdahlman

Respuesta

13

Usted puede tomar ventaja de exportar toda la lista 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(); 
+1

@NikunjChauhan La muestra [está aquí] (http://jasperforge.org/uploads/ publicar/jasperreportswebsite/trunk/sample.reference/batchexport/index.html). La carpeta 'demo \ samples \ batchexport' del paquete de distribución JasperReports. –

+0

@Wojtek O.: ¿Cómo se define jpList ?? ¿Es una simple lista de objetos jprint? – Nik

+0

@AlexK: ¿Puedes volver a pegar el enlace ... no está allí ... gracias! – Nik

1

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

(iReport ejemplo)

Parte I:

  • crear un nuevo jaspe en blanco como un informe de envoltura para diferentes informes
  • adaptador de datos = un registro vacío - filas vacías
  • luego en "Nuevo ..."
  • elegir "filas vacías"
  • clic en "Siguiente"
  • número de registros vacíos = 1 (por lo que simulará en el registro y solo se imprimirá una banda de detalle)
  • para que el informe en blanco esté listo Cuando llame a este informe fuera de su programa JAVA, primero abra una conexión de datos a la base de datos y intercambia esta conexión en el fondo. ¡Los Subinformes de nuestro informe de contenedor pueden heredar esta conexión a través de parámetros!

Parte 2)

  • añadir para cada informe que desea incrustar una nueva banda de detalle.
  • cada banda de detalle contiene un subinforme (enlace a otro informe independiente por supuesto)
  • establezca la propiedad "correr a abajo" a "True" en la definición subinforme de nuestro informe envoltorio

este concepto funciona para mi. dependiendo de los parámetros, puede activar o desactivar diferentes bandas, por supuesto.

+0

Creo que OP está buscando un enfoque programático ... –

4

Esta respuesta es para ayudar a los usuarios con Jasper Report versión> 5.6 ( últimas versiones), por lo tanto, eliminar el código obsoleto.

Desde Jasper-informe 5.6 JRPdfExporterParameter.JASPER_PRINT_LIST es deprecated el código actual de Wojtek Owczarczyk answer 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(); 
+0

Nota: la exportación con la mejor calidad (JRGraphics2DExporter) no funciona con muchas jaspePrints. Ref: código fuente de JRGraphics2DExporter – Topera

Cuestiones relacionadas