Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Impresión de reportes

Impresión de reportes

Autor jc mouse miércoles, abril 15, 2015

Existen diferentes métodos par imprimir reportes hechos con JasperReport en aplicaciones hechas en java, en este post te muestro uno de ellos.

Cuando se usa la librería de iReport para trabajar con reportes, en el momento de visualización de estos, Jasper te da la opción de imprimir el reporte, pero en ocasiones queremos imprimir directamente nuestros reportes, en el siguiente tutorial te enseño como 🙂

Necesitamos

  • IDE Netbeans 7.x o Eclipse (Nosotros usaremos Netbeans)
  • iReport Designer 5.1.0
  • Librerías JasperReport

Tiempo: 20 minutos

Nivel: Intermedio

Proyecto

El proyecto de este tutorial no tendrá interfaz de usuario para simplificar la codificación, el proyecto es el siguiente:

java print

Crea el proyecto y las clases en el IDE que estés utilizando y no te olvides de agregar la librería de JasperReport (v5.1.0)

El Reporte

El reporte que utilizaremos es el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report28" language="groovy" pageWidth="612" pageHeight="792" columnWidth="500" leftMargin="56" rightMargin="56" topMargin="56" bottomMargin="56" uuid="f97ec8c2-ebb3-467a-ba59-38731692de94">
 <property name="ireport.zoom" value="1.5"/>
 <property name="ireport.x" value="86"/>
 <property name="ireport.y" value="0"/>
 <queryString>
  <![CDATA[]]>
 </queryString>
 <field name="codigo" class="java.lang.String">
  <fieldDescription><![CDATA[codigo]]></fieldDescription>
 </field>
 <field name="item" class="java.lang.String">
  <fieldDescription><![CDATA[item]]></fieldDescription>
 </field>
 <field name="entrada" class="java.lang.String">
  <fieldDescription><![CDATA[entrada]]></fieldDescription>
 </field>
 <field name="salida" class="java.lang.String">
  <fieldDescription><![CDATA[salida]]></fieldDescription>
 </field>
 <background>
  <band splitType="Stretch"/>
 </background>
 <title>
  <band height="58" splitType="Stretch">
   <staticText>
    <reportElement uuid="41e78fce-2efb-44bf-b76f-caf4b5d08512" x="4" y="4" width="496" height="34"/>
    <textElement textAlignment="Center">
     <font size="24" isBold="true" isUnderline="true"/>
    </textElement>
    <text><![CDATA[MI INVENTARIO]]></text>
   </staticText>
   <staticText>
    <reportElement uuid="189c1703-8bc5-475c-9641-d45187ed0bdd" x="4" y="38" width="139" height="16"/>
    <textElement/>
    <text><![CDATA[Distribuidora: Los Amigos]]></text>
   </staticText>
  </band>
 </title>
 <pageHeader>
  <band height="35" splitType="Stretch"/>
 </pageHeader>
 <columnHeader>
  <band height="20" splitType="Stretch">
   <staticText>
    <reportElement uuid="265ec5e9-3945-403c-a960-91b236066990" mode="Opaque" x="0" y="0" width="101" height="20" forecolor="#0000FF" backcolor="#CCCCCC"/>
    <textElement textAlignment="Center" verticalAlignment="Middle">
     <font isBold="true" isUnderline="true"/>
     <paragraph lineSpacing="Single"/>
    </textElement>
    <text><![CDATA[CODIGO]]></text>
   </staticText>
   <staticText>
    <reportElement uuid="5dd7d365-0482-45f6-9509-7f1492f05c6f" mode="Opaque" x="101" y="0" width="241" height="20" forecolor="#0000FF" backcolor="#CCCCCC"/>
    <textElement textAlignment="Center" verticalAlignment="Middle">
     <font isBold="true"/>
    </textElement>
    <text><![CDATA[DESCRIPCION]]></text>
   </staticText>
   <staticText>
    <reportElement uuid="f5940c5a-e8c1-4d42-8d4a-19b892cbebd0" mode="Opaque" x="342" y="0" width="87" height="20" forecolor="#0000FF" backcolor="#CCCCCC"/>
    <textElement textAlignment="Center" verticalAlignment="Middle">
     <font isBold="true"/>
    </textElement>
    <text><![CDATA[ENTRADA]]></text>
   </staticText>
   <staticText>
    <reportElement uuid="48ea8004-c73d-4e63-b6d7-bc2a1e38c85a" mode="Opaque" x="429" y="0" width="71" height="20" forecolor="#0000FF" backcolor="#CCCCCC"/>
    <textElement textAlignment="Center" verticalAlignment="Middle">
     <font isBold="true"/>
    </textElement>
    <text><![CDATA[SALIDA]]></text>
   </staticText>
  </band>
 </columnHeader>
 <detail>
  <band height="22" splitType="Stretch">
   <textField>
    <reportElement uuid="5f862ac7-0fa9-4ba4-a037-25d838ef5d0d" mode="Opaque" x="0" y="0" width="101" height="20" forecolor="#FFFFFF" backcolor="#0066FF"/>
    <textElement textAlignment="Center" verticalAlignment="Middle">
     <font isBold="true"/>
    </textElement>
    <textFieldExpression><![CDATA[$F{codigo}]]></textFieldExpression>
   </textField>
   <textField>
    <reportElement uuid="3daabc29-9ba1-4ea1-b03f-390379dc6217" mode="Opaque" x="101" y="0" width="241" height="20" backcolor="#CCCCFF"/>
    <textElement verticalAlignment="Middle"/>
    <textFieldExpression><![CDATA[$F{item}]]></textFieldExpression>
   </textField>
   <textField>
    <reportElement uuid="33bd6fb9-fac0-4b38-89aa-a9d75570895f" mode="Opaque" x="342" y="0" width="87" height="20" backcolor="#CCCCFF"/>
    <textElement textAlignment="Center" verticalAlignment="Middle"/>
    <textFieldExpression><![CDATA[$F{entrada}]]></textFieldExpression>
   </textField>
   <textField>
    <reportElement uuid="6bc577f7-334e-4a58-825b-d326a87647ba" mode="Opaque" x="429" y="0" width="71" height="20" backcolor="#CCCCFF"/>
    <textElement textAlignment="Center" verticalAlignment="Middle"/>
    <textFieldExpression><![CDATA[$F{salida}]]></textFieldExpression>
   </textField>
   <line>
    <reportElement uuid="10576562-c8cc-4b10-8421-a0c31d23d629" x="0" y="20" width="500" height="1"/>
   </line>
  </band>
 </detail>
 <columnFooter>
  <band height="45" splitType="Stretch"/>
 </columnFooter>
 <pageFooter>
  <band height="54" splitType="Stretch"/>
 </pageFooter>
 <summary>
  <band height="42" splitType="Stretch"/>
 </summary>
</jasperReport>

Ábrelo en iReportDesigner y compila para crear el archivo “report28.jasper“, el reporte tiene margenes de 2cmx2cm, es de tamaño carta y no utiliza ningún datasource, los datos los pasaremos directamente desde la aplicación.

Ya en el IDE que estés utilizando, definimos la clase para los datos, esta clase se llama “MisDatos

package app;
/**
 * @web http://www.jc-mouse.net/
 * @author Mouse
 */
public class MisDatos {

    private String codigo="0";
    private String item="";
    private String entrada="0.0";
    private String salida="0.0";

    /** Constructor de clase */
    public MisDatos(String c, String i, String e,String s){
        codigo=c;
        item=i;
        entrada=e;
        salida=s;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getItem() {
        return item;
    }

    public void setItem(String item) {
        this.item = item;
    }

    public String getEntrada() {
        return entrada;
    }

    public void setEntrada(String entrada) {
        this.entrada = entrada;
    }

    public String getSalida() {
        return salida;
    }

    public void setSalida(String salida) {
        this.salida = salida;
    }

}

A continuación en la clase “MisReportes” definimos el método “reporte_diario()” que carga el archivo JASPER y también se crea algunos datos

package app;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
/**
 * @web http://www.jc-mouse.net/
 * @author Mouse
 */
public class MisReportes {

    public JasperPrint reporte_diario() throws JRException
    {
        String sourceFileName = "C:\\java\\reportes\\report28.jasper";        
        Map parameters = new HashMap();
        ArrayList<MisDatos> dataBeanList = new ArrayList<MisDatos>();        
        dataBeanList.add( new MisDatos("999i9","Mescladora Lavamanos LG","100","0") );
        dataBeanList.add( new MisDatos("999i9","Mescladora Lavamanos LG","0","5") );
        dataBeanList.add( new MisDatos("9i988","Ducha","0","10") );
        dataBeanList.add( new MisDatos("87777","Set de Baño Kawaii","39","0") );
        dataBeanList.add( new MisDatos("9i988","Ducha","12","0") );
        dataBeanList.add( new MisDatos("9i988","Ducha","5","0") );
        dataBeanList.add( new MisDatos("13212","Regadea Economica","50","0") );
        dataBeanList.add( new MisDatos("9i988","Ducha","0","1") );
        dataBeanList.add( new MisDatos("76799","Espejo","1","1") );
        JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(dataBeanList);
        JasperPrint print = JasperFillManager.fillReport( sourceFileName, parameters, beanColDataSource );
        return print;
    }   

}

Importante, el archivo JASPER lo cargamos desde una dirección en el disco con la variable sourceFileName.

LA IMPRESIÓN

Hasta aquí todo lo que tiene que ver con el reporte y los datos, a continuación veremos la impresión del reporte en si.

En la clase “Impresora” definimos un método para la impresión, este método recibe como parámetros un objeto print y  un entero, este entero corresponde a la impresora que usaremos, en mi caso tengo instaladas 4 impresoras:

Impresoras disponibles: 4
> Nombre: Microsoft XPS Document Writer
> Nombre: HP Deskjet F8000 Series
> Nombre: Foxit PDF Printer
> Nombre: Canon MG6900 series Printer

El orden comienza desde cero (0) , yo uso la impresora virtual Foxit PDF Printer que corresponde al numero dos (2), en la clase definimos un método para ver las impresoras que tengas instaladas en tu equipo, el método es “listar_impresoras()

A continuación el código de la clase “Impresora

package app;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Chromaticity;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.MediaPrintableArea;
import javax.print.attribute.standard.MediaSize;
import javax.print.attribute.standard.MediaSizeName;
import javax.print.attribute.standard.OrientationRequested;
import javax.print.attribute.standard.PrintQuality;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRPrintServiceExporter;
import net.sf.jasperreports.engine.export.JRPrintServiceExporterParameter;
/**
 * @web http://www.jc-mouse.net/
 * @author Mouse
 */
public class Impresora {

    /**
 * Imprime un reporte
 * @param print JasperPrint 
 * @param selectedService int impresora
 */
    public void imprimir(JasperPrint print, int selectedService) throws JRException{

        PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
        //atributos de impresion
        PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();        
        //Orientación de pagina
        printRequestAttributeSet.add(OrientationRequested.PORTRAIT);//LANDSCAPE
        //Tamaño de hoja
        printRequestAttributeSet.add(MediaSizeName.NA_LETTER);//carta 
        //Margenes (izquiero, superior, ancho , alto , unidades )
        int width = Math.round(MediaSize.NA.LETTER .getX(MediaSize.MM));//ancho de pagina
        int height = Math.round(MediaSize.NA.LETTER.getY(MediaSize.MM));//alto de pagina 
        printRequestAttributeSet.add(new MediaPrintableArea(20, 20, width-40, height-40, MediaPrintableArea.MM ));
        //Calidad de impresión
        printRequestAttributeSet.add(PrintQuality.NORMAL);
        //impresion a color
        printRequestAttributeSet.add(Chromaticity.COLOR);
        //Cantidad de copias
        printRequestAttributeSet.add(new Copies(1));     
        //----------------- 
        JRPrintServiceExporter exporter = new JRPrintServiceExporter();
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);

        //se selecciona servicio y se pasa atributos de impresion 
        exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE, services[selectedService]);
        exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET, services[selectedService].getAttributes());
        exporter.setParameter(JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET, printRequestAttributeSet);
        exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG, Boolean.FALSE);
        //si es falso, imprimira directamente segun los parametros pasados mas arriba
        exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, Boolean.TRUE);                
        exporter.exportReport();
    }

    /**
 * Muestra las impresoas instaladas
 */
    public void listar_impresoras()
    {
        PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
        System.out.println("Impresoras disponibles: " + printServices.length);
        for (PrintService printer : printServices)
            System.out.println("> Nombre: " + printer.getName() ); 
    }
}//end:Impresora

Tal como hicimos al crear el reporte en iReport, en esta método también debemos indicar los atributos de impresión como ser el tamaño del papel, margenes, calidad de impresión, orientación, etc.

Para finalizar implementamos esta clase en el Main de la aplicación y ejecutamos

package app;
import net.sf.jasperreports.engine.JRException;
/**
 * @web http://www.jc-mouse.net/
 * @author Mouse
 */
public class Main {

    public static void main(String[] args) {

        Impresora impresora = new Impresora();
        try {
            impresora.listar_impresoras();
            MisReportes mr = new MisReportes();
            impresora.imprimir( mr.reporte_diario(), 2);
        } catch (JRException ex) {
            System.err.println(ex.getMessage());
        }

    }    

}

Al ejecutar aparecerá una pequeña ventana de configuración donde podremos verificar que los parámetros de impresión son correctos, también podemos obviar esta ventana e imprimir directamente el reporte.

impresion reporte

Este es nuestro resultado

pdf reporte

 DESCARGAS

Proyecto en Netbeans + reporte en JXRML y  JASPER

enjoy 🙂

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Añadir Splash Screen en Java/Netbeans

Añadir Splash Screen en Java/Netbeans

¿Splash Screen? El splash screen o traducido al aspañol 😉  es una “Pantalla de bienvenida” que se muestra cu...

Ejercicios con Hashtable y C#

Ejercicios con Hashtable y C#

Ejercicio: Escriba un programa en consola que implemente un Hashtable, cree una clase “Persona“, este será e...

Componente swing jcMousePanel v1.6.9

Componente swing jcMousePanel v1.6.9

Agregar una imagen a un jpanel o a un jframe no es complicado pero para un programador novato puede convertirse en todo...

Personaliza un JComboBox estilo Metro de Windows

Personaliza un JComboBox estilo Metro de Windows

Si bien se pueden encontrar en google estilos java (Look and Feel) listos para cambiar la apariencia de nuestras aplicac...

Construye tu swing Versus para el mundial 2014

Construye tu swing Versus para el mundial 2014

Para ponerse a tono con el ambiente mundialista de Brasil 2014, en este post construiremos un swing java al que llamarem...

Control de versiones con GIT y Netbeans

Control de versiones con GIT y Netbeans

Control de versiones: Se llama control de versiones a la gestión de los diversos cambios que se realizan sobre los eleme...

2 comentarios en “Impresión de reportes”

  1. Gustavo dice:

    Buen dia
    Estoy tratando de probar este codigo pero me da un error. Lo unico que cambie fue el numero que identifica a la impresora, y ya copie los archivos a la direccion c:/java/reportes

    Exception in thread “main” net.sf.jasperreports.engine.JRRuntimeException: Unknown hyperlink target 0
    at net.sf.jasperreports.engine.JRHyperlinkHelper.getLinkTarget(JRHyperlinkHelper.java:269)
    at net.sf.jasperreports.engine.base.JRBaseTextField.normalizeLinkTarget(JRBaseTextField.java:313)
    at net.sf.jasperreports.engine.base.JRBaseTextField.readObject(JRBaseTextField.java:377)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    1. Mouse dice:

      ese es tu error, si no sabes el numero de tu impresora, antes de llamar a la impresora debes hacer un listado de tus dispositivos

Deja un comentario

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

*

Comparte lo que sabes

Categorias

Últimas entradas

Java ha ido evolucionando a pasos agigantados en los últimos años gracias al pedido de su comunidad global de programado...

pixilart no es solo una herramienta online sino una comunidad de diseñadores a quienes les encanta el arte hecha con...

Repl.it es un proyecto de tres jóvenes emprendedores (Amjad, Haya, Maso), es un compilador en linea el cual te permite p...

Song Maker es el nuevo experimento de Google Chrome Music Lab que permite al usuario crear música desde el navegador a t...

Android Bolivia

MAUS