Jasper Report, Json y Java.

Desde el viernes pasado me había topado con un problema en la utilización de Json como fuente de datos en Jasper Report utilizando sub-reportes.

El reporte lo realice utilizando ireport 5; consiste en un reporte principal con dos sub-reportes. En el reporte principal hay que crear dos parámetros de la siguiente manera:

  <parameter name="dsEncabezado" class="net.sf.jasperreports.engine.JRDataSource" isForPrompting="false"/>
  <parameter name="dsDetalle" class="net.sf.jasperreports.engine.JRDataSource" isForPrompting="false"/>

Además hay que agregar a cada una de las líneas en el reporte principal donde hace referencia a los sub-reportes las siguientes líneas:

  <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "Encabezado.jasper"]]></subreportExpression>
   ...
  <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "Detalle.jasper"]]></subreportExpression>

Ahora en Java, las librerías que utilice son:

  • jasperreports-4.7.0
  • jackson-all-1.9.11
  • log4j-1.2.17
  • commons-beanutils-1.8.3
  • commons-collections-3.2.1
  • commons-digester-2.1
  • commons-logging-1.1.1
  • itext-2.1.7

En la clase de Java, hay que agregar el siguiente código en la clase main:

public static void main(String[] args) {       		
        try
        {
            String sjson = "{" +
                "ENCABEZADO : [" +
                "    {MATERIA:\"ESPAÑOL\",NUMEROAPROBADOS:\"123\",NUMEROREPLOBADOS:\"1\"}," +
                "	{MATERIA:\"INGLES\",NUMEROAPROBADOS:\"120\",NUMEROREPLOBADOS:\"4\"}" +
                "	],		" +
                "DETALLES :[" +
                "	{NOMBREALUMNO:\"GUADALUPE VICTORIA\",ESPAÑOL:\"10\",INGLES:\"9\"}," +
                "	{NOMBREALUMNO:\"VICENTE GUERRERO\",ESPAÑOL:\"9\",INGLES:\"8\"}" +
                "	]	" +
                "}";
 
            String reportPath = "X:\\Jasper\\";
            HashMap params = new HashMap();
            params.put("SUBREPORT_DIR", reportPath);
            params.put("dsEncabezado", new JsonDataSource(new ByteArrayInputStream(sjson.getBytes("UTF-8")),"ENCABEZADO"));
            params.put("dsDetalle", new JsonDataSource(new ByteArrayInputStream(sjson.getBytes("UTF-8")),"DETALLES"));
 
            JsonDataSource datasource = new JsonDataSource(new ByteArrayInputStream(sjson.getBytes("UTF-8")));
            JasperPrint objJasperPrint = JasperFillManager.fillReport( new FileInputStream(new File(reportPath + "General.jasper")), params, datasource );      
            byte[] exportReportToPdf = JasperExportManager.exportReportToPdf(objJasperPrint);
 
            FileOutputStream pdf = new FileOutputStream(reportPath + "prueba.pdf");
            pdf.write(exportReportToPdf);
            pdf.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

Analista/Desarrollador y cofundador de QBit Mexhico. Tecnologías utilizadas Android, Java (EJB, Servlets, Faces, Groovy & Grails, Maven, Swing), .Net (C#, VB, ASP, MVC), Delphi, Spring, Hibernate, DTSx, Oracle, T-SQL, Firebird, MySQL, MongoDB, NodeJs, ReactJs (Flux). Sistemas Operativos Mac, Ubuntu y Windows.

Twitter LinkedIn 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *