Tengo un archivo que funciona bien si uso el comando lp filename
.Impresión mediante tazas con javax.print
El archivo es un archivo ESC/P para una impresora de impacto de recibos. Eso tiene drivers linux CUPS nativos y todo lo que funciona.
Estoy tratando de usar la API javax.print
para que pueda tener un control más detallado sobre la impresión y, con suerte, mantenerla compatible con plataformas cruzadas, aunque Linux es la plataforma de destino.
que he probado todas las combinaciones DocFlavor conocida por el hombre y cada tipo de tipo de datos (InputStream
, byte[]
, Reader
etc.)
O bien simplemente ignora el comando print()
todos juntos o simplemente se da vuelta una hoja en blanco papel. Ejecutando lp filename
lo imprime perfecto, entonces ¿cómo obtengo javax.print
para hacer el equivalente funcional de lp filename
?
No tengo activado el uso de javax.print
Puedo usar otras "cosas" y podría comenzar a investigar cups4J pero parece que me limitaría a Linux/* nix solamente, lo cual está bien por ahora, pero preferiría tener una plataforma cruzada solución.
Podría simplemente emitir el comando del sistema lp
en el archivo, pero, necesito un control más fino. Estos no son recibos que estamos imprimiendo, son boletos y los boletos van de $ 5.00 a miles de dólares. Actualmente, si detectamos un problema de impresión, anulamos la transacción y, si hay algo impreso, no es válido, no tomamos las reimpresiones a la ligera y la mayoría del tiempo cargamos para imprimir una nueva copia si el cliente pierde su copia. Oh, la razón para hacer esto es que estamos cambiando el sistema POS de Windows a Linux y las impresoras de acceso directo a través de puertos seriales a CUPS administradas a través de USB. Aquí está mi código que no funciona. Cualquier ayuda es apreciada.
try {
// Find the default service
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
PrintService service = PrintServiceLookup.lookupDefaultPrintService();
// Create the print job
DocPrintJob job = service.createPrintJob();
InputStream in = new FileInputStream("/home/bart/real.escp");
Doc docNew = new SimpleDoc(in,flavor,null);
// Monitor print job events; for the implementation of PrintJobWatcher,
// see Determining When a Print Job Has Finished
PrintJobWatcher pjDone = new PrintJobWatcher(job);
// Print it
job.print(docNew, null);
// Wait for the print job to be done
pjDone.waitForDone();
// It is now safe to close the input stream
in.close();
} catch (PrintException e) {
} catch (IOException e) {
}
Impresión de Java en Linux es arriesgado en el mejor. Llevé a los bombardeos a la línea de comando con un comando lpr para hacer parte de mi impresión. Una opción podría ser ver si puede convertir su archivo a un formato que Java entienda, como PDF y luego usar javax.print en él. – Mitch
Ese es el problema de que puede haber un convertidor linux esc/p, pero ¿por qué preocuparse cuando el comando lp se imprime bien ?, parece pedir problemas para pasar de ESC/P (que se puede alimentar directamente a la impresora) -> PDF (para hacer Java Happy) -> ESC/P (a través del controlador). Estamos generando los archivos ESC/P. De todos modos funciona muy bien con Cups4J, tomó alrededor de 15 minutos en implementarse. Supongo que usaré cups4J y trataré con cualquier otro sistema operativo/sistema de impresión cuando aparezcan. –