Domingo, 16 de agosto de 2015

Impresión de documentos.

Un tiempo atrás en mi trabajo llego la necesidad que mediante el software se descargaran documentos de internet (Un servidor FTP) y esos directamente se imprimieran, lo cual en donde se utilizaba el programa tenían varias impresoras y se podía o no tener la predeterminada disponible, lo cual se requirió dar la posibilidad al usuario de seleccionar la impresora que se desease para el trabajo de impresión.

 

Método de impresión.

try {

            //Buscamos el archivo

            JFileChooser fc = new JFileChooser();

            //Se añade un  filtro para documentos de word, se pueden añadir más para Excel, CSV, PDF o cualquier otro que se deseé imprimir

            fc.setFileFilter(new FileNameExtensionFilter("Documento de word", "doc", "docx"));

            //Se verifica que se haya seleccionado un documento

            if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION){

                //Se crea un stream entre el documento seleccionado por el filechooser

                FileInputStream inputStream = new FileInputStream(fc.getSelectedFile());

 

                //Formato de Documento

                DocFlavor docFormat = DocFlavor.INPUT_STREAM.AUTOSENSE;

                //Lectura de Documento seleccionado con el filechooser

                Doc document = new SimpleDoc(inputStream, docFormat, null);

 

                //Obtenemos la ventana para seleccionar un impresora y mostramos la ventana

                PrinterJob pj = PrinterJob.getPrinterJob();

                if (pj.printDialog()){

                    //Obtenemos el nombre de la impresora que seleccionamos

                    String printerName = pj.getPrintService().getName();

 

                    //Inclusion del nombre de impresora y sus atributos

                    AttributeSet attributeSet = new HashAttributeSet();

                    attributeSet.add(new PrinterName(printerName, Locale.getDefault()));

 

                    //Indicamos que queremos queremos soporte de color, este parametro se puede cambiar

                    attributeSet.add(ColorSupported.SUPPORTED);

 

                    //Busqueda de la impresora por el nombre asignado en attributeSet

                    PrintService[] services = PrintServiceLookup.lookupPrintServices(docFormat, attributeSet);

 

                    //Mostramos el nombre exacto de la impresora seleccionada

                    System.out.println("Imprimiendo en : " + services[0].getName());

 

 

                    DocPrintJob printJob = services[0].createPrintJob();

 

                    //Envio a la impresora

                    printJob.print(document, new HashPrintRequestAttributeSet());

                }

                inputStream.close();

            }

        } catch (HeadlessException | PrintException | IOException ex) {

            System.err.println("Error " + ex.getMessage());

        }

 

Este método se puede utilizar para cualquier documento que se desee usar, y colocarse en cualquier botón para su uso recordando siempre usar documentos ya que el JFileChooser puede seleccionar .exe, los cuales no son imprimibles por lo cual al seleccionar se puede usar comparaciones de la extensión para asegurarnos de que sea correcto el archivo seleccionado.

 

Para esto se puede usar un if  antes del FileInputStream como el siguiente:

if (fc.getSelectedFile().getName().endsWith("extensión del documento")){

// Código a ejecutar

}else{

JOptionPane.showMessageDialog(null, "Archivo incorrecto", "Alerta", JOptionPane.WARNING_MESSAGE);

}

 

Dejo un ejemplo ya construido para mejor ayuda.

Descargar

Para dudas o aclaraciones se pueden comunicar conmigo Daniel de Jesús Marin Ruvalcaba al correo [email protected]

 


Publicado por danielmarinr @ 15:03  | Java SE8
Comentarios (0)  | Enviar
Comentarios