2012-07-18 25 views
5

Tengo una serie de secuencias de escape de la impresora (ESC/P) que necesito enviar a una impresora (ya sea USB o red) en Mac OS X. ¿Cómo puedo hacer eso? ¿Usar CUPS directamente de la mejor manera? ¿Hay una forma de "nivel superior"?Cómo enviar secuencias de escape de bajo nivel a una impresora en OS X?

Y antes de preguntar: Realmente necesito enviar secuencias de escape y no puedo simplemente usar el sistema de impresión de alto nivel.

Edición: Estos son algunos de los proyectos y recursos que proporcionan una funcionalidad similar en otros lenguajes como Java:

+0

¿Cómo sabes que necesitas secuencia de escape? ¿Estás trabajando en un error en el controlador de Epson? – NoBugs

+0

Más o menos. Es un requisito del cliente y lamentablemente no puedo entrar en más detalles. –

Respuesta

3

Me imagino que la La mejor manera de hacerlo sería simplemente usar CUPS/lp:

echo "ctrl_char" | cat file_to_print - | lp [...flags...] 
+0

Gracias, pero desafortunadamente no es tan fácil: no necesitamos simplemente imprimir archivos. Las secuencias de escape que queremos enviar a la impresora incluyen todos los datos (de imágenes) que se deben imprimir. –

+0

Además, me gustaría utilizar una API Cocoa/Foundation/C sin llamar a un comando CLI externo. Si es posible :) –

3

Puede enviar los caracteres de control en C usando el sistema UNIX llama:

char escp_seq[BYTES_FOR_SEQUENCE]; 

// ...initialize the ESC/P sequence. 

int printer_fd = open("/dev/lp0", O_WRONLY); 
ssize_t bytes_written = write(printer_fd, escp_seq, sizeof(escp_seq)); 
close(printer_fd); 

En cuanto a los datos de impresión en sí, puede utilizar .

El uso de esta biblioteca, se puede utilizar una cualquiera

OSStatus PMPrinterPrintWithProvider (
    PMPrinter printer, 
    PMPrintSettings settings, 
    PMPageFormat format, 
    CFStringRef mimeType, 
    CGDataProviderRef provider 
); 

lo que requeriría que la construcción de un CGDataProviderRef con sus datos.

Como alternativa, puede utilizar un archivo:

OSStatus PMPrinterPrintWithFile (
    PMPrinter printer, 
    PMPrintSettings settings, 
    PMPageFormat format, 
    CFStringRef mimeType, 
    CFURLRef fileURL 
); 

Me disculpo por no ser capaz de dar un ejemplo de código concreto, pero realmente no estoy seguro de cómo se va a construir los datos que desea enviar a la impresora Esto debería al menos proporcionar una base para que comiences a hackear. Estoy seguro de que hay material más que suficiente en los documentos Apple proporcionados anteriormente para llevar a cabo su tarea.

¡Buena suerte!

+0

¡Muchas gracias por su ayuda y trabajo, Michael! Todavía podría no ser el 100% de lo que estoy buscando, pero es un comienzo, ¡gracias! –

1

Estamos imprimiendo desde Mac bash shell usando scripting (en un probador de producto profesional automatizado End-Line).

muy simplificada imprime "Hola" etiqueta como esta:

data="\x1Bia\x00" 
data="${data}\[email protected]" 
data="${data}\x1BX\x32" 
data="${data}Hello" 
data="${data}\x0C" 

# Check your own binary for debugging: 
echo -ne $data | hexdump -C 

# print the actual label 
echo -ne $data | lp -d Brother_PT_P900W 

Nota, que debe reemplazar el nombre de la impresora con su propio nombre de la impresora.

+0

¡Esto es muy útil! ¿Tiene un enlace a la referencia de los diferentes comandos que puede enviar? –

+0

No estoy seguro de qué quiere decir con 'comandos': a) comando bash shell; o b) comandos ESC/P? Si quiere decir b), descargué los documentos PDF del fabricante de la impresora, en mi caso Brother PT-P900W – EmbeddedGuy

Cuestiones relacionadas