Manejando tus impresoras con Java

By | 05/27/2009

¿Cómo ver todas las impresoras disponibles con java, la impresora que tienes por default y otros atributos de tus impresoras?
Aquí van algunos ejemplos simples…

import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.Attribute;
import javax.print.attribute.AttributeSet;
import javax.print.attribute.HashAttributeSet;
import javax.print.attribute.PrintServiceAttributeSet;
import javax.print.attribute.standard.Destination;
import javax.print.attribute.standard.PrinterInfo;
import javax.print.attribute.standard.PrinterIsAcceptingJobs;
import javax.print.attribute.standard.PrinterLocation;
import javax.print.attribute.standard.PrinterMakeAndModel;
import javax.print.attribute.standard.PrinterName;
import javax.print.attribute.standard.PrinterState;
 
/**
 * Ejemplos para ver tus impresoras
 * @author Peiretti
 */
public class PrintExamples {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
 
        printAvailable();
        printDefault();
        printByName("MiImpresora");
    }
 
    public static void printAvailable() {
 
        // busca los servicios de impresion...
        PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
 
        // -- ver los atributos de las impresoras...
        for (PrintService printService : services) {
 
            System.out.println(" ---- IMPRESORA: " + printService.getName());
 
            PrintServiceAttributeSet printServiceAttributeSet = printService.getAttributes();
 
            System.out.println("--- atributos");
 
            // todos los atributos de la impresora
            Attribute[] a = printServiceAttributeSet.toArray();
            for (Attribute unAtribute : a) {
                System.out.println("atributo: " + unAtribute.getName());
            }
 
            System.out.println("--- viendo valores especificos de los atributos ");
 
            // valor especifico de un determinado atributo de la impresora
            System.out.println("PrinterLocation: " + printServiceAttributeSet.get(PrinterLocation.class));
            System.out.println("PrinterInfo: " + printServiceAttributeSet.get(PrinterInfo.class));
            System.out.println("PrinterState: " + printServiceAttributeSet.get(PrinterState.class));
            System.out.println("Destination: " + printServiceAttributeSet.get(Destination.class));
            System.out.println("PrinterMakeAndModel: " + printServiceAttributeSet.get(PrinterMakeAndModel.class));
            System.out.println("PrinterIsAcceptingJobs: " + printServiceAttributeSet.get(PrinterIsAcceptingJobs.class));
 
        }
 
    }
 
    public static void printDefault() {
 
        // tu impresora por default
        PrintService service = PrintServiceLookup.lookupDefaultPrintService();
        System.out.println("Tu impresora por default es: " + service.getName());
 
    }
 
    public static void printByName(String printName) {
 
    	PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
 
        // buscar por el nombre de la impresora (nombre que le diste en tu S.O.)
        // en "aset" puedes agregar mas atributos de busqueda
        AttributeSet aset = new HashAttributeSet();
        aset.add(new PrinterName(printName, null));
        //aset.add(ColorSupported.SUPPORTED); // si quisieras buscar ademas las que soporten color
 
        services = PrintServiceLookup.lookupPrintServices(null, aset);
        if(services.length == 0){
        	System.out.println("No se encontro impresora con nombre " + printName);
        }
        for (PrintService printService : services) {
        	System.out.println(printService.getName());
		}
    }
}

Compartir esto:

9 thoughts on “Manejando tus impresoras con Java

  1. Lider Pereira

    Hola Gustavo Peiretti. Como puedo hacer caso tenga dos impresoras instaladas, cuando selecciono ticket en un combo me imprima a la impresora de tickets o si no al seleccionar una impresora hp normal que me imprima. seria como saber desde java a cual impresora envio la peticion.

    Reply
  2. Leoner Parra

    Gustavo, excelente articulo, muy preciso para el manejo desde programa las impresoras

    Reply
    1. Gustavo Post author

      Me alegro te sirva. Si luego deseas agregar algo me avisas. saludos!

      Reply
  3. Holger Caiza

    Saludos mi estimado Gustavo … como podria buscar impresoras disponibles de la misma manera pero de toda mi red local

    Gracias por tu tiempo y respuesta

    Reply
  4. juan

    Amigo, el metodo lookupDefaultPrintService no me funciona me retorna nulo, solo tengo una impresora, tampoco funciona lookupPrintServices, estoy utilizando netbeans 5.5 y jdk1.5, porfavor una mano

    Reply
  5. progra100%

    Loko este codigo esta solo!
    Buenisimo aporte!

    Reply

Deja un comentario

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