2012-07-18 1 views
5

J'ai une série de séquences d'échappement d'imprimante (ESC/P) que je dois envoyer à une imprimante (USB ou réseau) sur Mac OS X. Comment puis-je faire cela? Est-ce que CUPS est directement utilisé de la meilleure façon? Y a-t-il un moyen "supérieur"?Comment envoyer des séquences d'échappement de bas niveau à une imprimante sous OS X?

Et avant de vous demander: Je ne ai vraiment besoin d'envoyer des séquences d'échappement et ne peut pas simplement utiliser le système d'impression de haut niveau.

Modifier: Ce sont des projets et des ressources qui offrent des fonctionnalités similaires dans d'autres langues comme Java:

+0

Comment savez-vous que vous avez besoin d'une séquence d'échappement? Travaillez-vous autour d'un bug dans le pilote Epson? – NoBugs

+0

Plus ou moins. C'est une exigence de client et malheureusement je ne peux pas entrer dans plus de détails. –

Répondre

3

J'imagine que la La meilleure façon de le faire serait de simplement utiliser CUPS/lp:

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

Merci, mais malheureusement ce n'est pas si simple: nous n'avons pas besoin d'imprimer simplement des fichiers. Les séquences d'échappement que nous voulons envoyer à l'imprimante incluent toutes les données (image) qui doivent être imprimées. –

+0

En outre, j'aimerais utiliser une API Cocoa/Foundation/C sans appeler une commande CLI externe. Si possible :) –

3

Vous pouvez envoyer les caractères de contrôle en C en utilisant le système unix appels:

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 ce qui concerne les données à imprimer lui-même, vous pouvez utiliser .

En utilisant cette bibliothèque, vous pouvez utiliser un autre

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

qui vous obligera à construire un CGDataProviderRef avec vos données.

Alternativement, vous pouvez utiliser un fichier:

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

Je suis désolé de ne pas être en mesure de donner un exemple de code concret, mais je ne sais vraiment pas comment vous avez l'intention de construire les données que vous souhaitez envoyer à l'imprimante. Cela devrait au moins fournir une base pour vous de commencer à pirater avec. Je suis sûr qu'il y a plus qu'assez de choses dans les documents Apple fournis ci-dessus pour accomplir votre tâche.

Bonne chance!

+0

Merci beaucoup pour votre aide et votre travail, Michael! Ce n'est peut-être toujours pas 100% ce que je cherche, mais c'est un début, merci! –

1

Nous imprimons de shell bash Mac à l'aide de scripts (en fin de professionnel automatisé testeur de produits ligne).

imprime l'étiquette très simplifiée « Bonjour » comme ceci:

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 

Notez que vous devez remplacer le nom de l'imprimante avec votre propre nom de l'imprimante.

+0

Ceci est très utile! Avez-vous un lien vers la référence pour les différentes commandes que vous pouvez envoyer? –

+0

Vous ne savez pas ce que vous entendez par 'commandes': a) commande bash shell; ou b) commandes ESC/P? Si vous voulez dire b), j'ai téléchargé les documents PDF du fabricant de l'imprimante, dans mon cas Brother PT-P900W – EmbeddedGuy

Questions connexes