¿Hay alguna forma en Java para imprimir en una impresora IPP específica? Todo el código de ejemplo y tutoriales que he encontrado enfoque sobre cómo imprimir un determinado tipo de documento, usando algo como lo siguiente:Imprimir en una impresora específica (IPP URI) en Java
DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(MediaSizeName.ISO_A4);
PrintService[] pservices =
PrintServiceLookup.lookupPrintServices(flavor, aset);
if (pservices.length > 0) {
DocPrintJob pj = pservices[0].createPrintJob();
try {
FileInputStream fis = new FileInputStream("test.ps");
Doc doc = new SimpleDoc(fis, flavor, null);
pj.print(doc, aset);
} catch (FileNotFoundException fe) {
} catch (PrintException e) {
}
}
Este fragmento simplemente imprime a la primera impresora encontró que es capaz de imprimir el documento. En mi caso, quiero buscar una impresora por su URI, pero PrintServiceLookup
no parece apoyar esto. Intenté usar un PrintServiceAttributeSet
, en lugar de PrintRequestAttributeSet
, y agregué un atributo PrinterURI
, pero eso no devuelve ninguna impresora. Sospecho que el servicio de búsqueda está buscando una impresora que pueda cambiar su URI de destino, en lugar de buscar la impresora con ese URI.
Como último recurso, pensé simplemente en enumerar a través de todos los PrintService
devueltos por lookupPrintServices
, pero el URI no está en ninguno de los atributos. El nombre de la impresora está allí, pero necesito el URI.
Para el fondo, mi aplicación necesita imprimir un código de barras a una impresora específica, según el usuario actual. Cada usuario está asociado con un URI de impresora, que apunta a una impresora en un servidor CUPS. El URI de la impresora es la única información que tengo, y no puedo restringir el nombre de la impresora para que coincida con el URI o una subcadena del URI.
Edit: Para aclarar un poco, no necesito renderizar los datos, solo tengo que copiar un blob en una impresora determinada. La parte que no puedo descifrar es cómo identificar una impresora por su URI IPP.
Parece que el enlace está muerto, pero parece que el código original está disponible en code.google.com, aunque con un nombre diferente (jspi): http://code.google.com/p/jspi/ (Solo svn pago, no hay descargas) –
@DR Gracias por el enlace, he actualizado la respuesta con la información. –
¿Cómo descubrió a PRINTER_NAME para virar al final de la url? – rancidfishbreath