11
votes

Imprimante PHP à Zebra

J'ai cette imprimante Zebra ZM400 connectée au réseau ( 192.168.1.50 ). Et j'essaie de pousser un contenu à cette imprimante directement à partir de PHP.

C'est l'idée et je suis juste coincé sans aucun moyen de le faire. J'ai essayé le File_Contents ('192.168.1.50', $ Content) mais sans succès.

apprécierait si quelqu'un pouvait m'aider à résoudre ce problème. Merci: -)

....................................................... .......................................................... ....................................

Solution:

J'ai imprimé à l'aide du protocole LPR. Pas besoin d'installer le conducteur ou quoi que ce soit. La classe d'impression LPR pour PHP 5 peut être téléchargée à partir d'ici:

http://www.phpclasses.org/ Paquet / 2540-PHP-Abstraction-for-Impression-Documents.html


3 commentaires

Probablement parce que peu de gens utilisent toujours des imprimantes zébrées pour imprimer des étiquettes ...


@WebDestroya - L'imprimante est destinée à une solution de codes à barres industrielles et je pense que nous ne sommes laissés sans meilleure option pour l'impression de masse.


@Mitch Que utilisent-ils? Il me semble que les zèbres ont toujours beaucoup d'usage d'usage.


9 Réponses :


2
votes

Je suis à peu près sûr que de pousser le contenu du texte sur une prise ne fonctionnera pas du tout.

Vous devrez imprimer sur LPR, c'est ma supposition. Installez un serveur d'impression comme des tasses et vous pouvez l'envoyer en utilisant cela ...


6 commentaires

L'imprimante dispose d'un serveur d'impression interne. Cela signifie-t-il que l'envoi du contenu est possible? Merci.


@Nirmal - Un serveur d'impression vous permet de communiquer à l'aide d'un pilote d'impression. Faire file_put_contents ne fonctionnera jamais.


Je n'ai pas une machine pour installer Linux et Tasses. Je viens de constater que le serveur d'impression interne accepte les fichiers sur FTP. Mais le problème est qu'il n'autorise que les connexions actives pendant que PHP essaie d'initier une connexion passive. Je vais mettre en place une question distincte concernant cela et poster le lien ici. Merci pour votre temps!


Enfin, j'ai utilisé le protocole d'impression LPR pris en charge par l'imprimante. La classe d'impression LPR pour PHP peut être trouvée ici: PHPClasses .org / paquet / ...


Ceci est une ancienne question, mais pour toute personne qui lisait cela à l'avenir, vous pouvez absolument pousser le contenu directement à l'imprimante sur les sockets tant que l'imprimante est sur le réseau. Tout ce que vous avez besoin de savoir est l'adresse IP de l'imprimante et son port (généralement 9100 avec des imprimantes zébrées). Le portail de soutien de Zebra km.zebra.com en a des échantillons. Dans ce cas, vous voudrez probablement utiliser la bibliothèque de socket de PHP pour atteindre la communication. Il ne faut généralement pas être nécessaire pour des bibliothèques supplémentaires (LPR, etc.) si vous avez déjà la langue maternelle de l'appareil!


C'est exactement ce que je fais depuis que je suis imprimé à une imprimante de code à barres à distance et il n'y a pas de configuration VPN. Au lieu de cela, la société a ouvert des ports sur leur routeur et a transmis ma connexion avec les imprimantes de code à barres qu'elles utilisent. Pour tester, vous pouvez simplement utiliser Telnet à l'adresse IP et Port de l'imprimante de code à barres, puis émettez les commandes directement.



-2
votes

Vérifiez ces Fonctions d'imprimante PHP

Notez que

Ces fonctions ne sont disponibles que sous Windows 9.x, ME, NT4 et 2000.


2 commentaires

Et vous devez installer un pack pecl.


J'ai essayé le php_printer.dll sur PHP 5.3 et cela crée un cauchemar d'erreurs «hors mémoire». Vous pouvez lire le fil entier ici: spexics.net/lists/winphp/msg08651.html < / a>



2
votes

Plus tard? ...

Si vous avez accès au port série: P>

Linux: P>


 $fpi = fopen('/dev/ttyS0', 'r+');


$comando = "
N
Q70
A40,20,0,2,1,0,N,\"xxx\"
B40,40,0,1,2,6,100,N,\"$don\"
A40,145,0,3,1,0,N,\"N.- $don \"
A40,165,0,2,1,0,N,\"ccc\"
A0,198,7,1,1,0,N,\"$fecha\"
A19,198,7,1,1,0,N,\"fasdfas\"
P
";
fwrite($fpi, $comando);

fclose($fpi);


  • Ce travail bien li> ul> p>


2 commentaires

Merci! Rien n'est trop tard. C'est parfait et c'est exactement ce que j'ai fait à une étape ultérieure. Fonctionne tout le temps et pas trop de codage fantaisie.


J'utilise ce principal, en combinaison avec Str_REPLACER sur des fichiers de modèle .PRN (doit utiliser la police d'imprimante) et utilisez l'opérateur Shell_Exec (ou Backtick) pour exécuter le fichier "Imprimante LP -D"



1
votes

J'ai créé un fichier dans la langue zébré et a utilisé FTP pour envoyer le fichier à plusieurs reprises dans le passé. Il suffit de sauvegarder le fichier, puis créez une connexion FTP à l'imprimante puis utilisez la commande de placement pour envoyer le fichier .txt. L'imprimante fera le reste


0 commentaires

3
votes

Je vois que vous avez obtenu des solutions en utilisant LPR et FTP, mais je suis presque certain que les imprimantes zébrées accepteront le texte ZPL brut sur le port 9100.


0 commentaires


15
votes

J'ai eu un problème similaire où j'utilisais un programme Java pour imprimer sur une imprimante zébré sans pilote d'impression et je voulais recréer cela en utilisant PHP. Cela me dérangeait que je ne pouvais pas trouver la réponse. À travers certains paquets capturant avec Wireshark comparant les deux, j'ai senti que c'était possible. J'ai finalement trébuché dans la solution (au moins pour moi). Cela imprimera une étiquette sur une imprimante zébrée en réseau directement à partir d'une page PHP sans avoir besoin d'un pilote.

<?php
error_reporting(E_ALL);

/* Get the port for the service. */
$port = "9100";

/* Get the IP address for the target host. */
$host = "172.17.144.89";

/* construct the label */
$mrn = "123456";
$registration_date = "03/13/2013";
$dob = "06/06/1976";
$gender = "M";
$nursing_station = "ED";
$room = "ED01";
$bed = "07";
$lastname = "Lastname";
$firstname = "Firstname";
$visit_id = "12345678";

$label = "q424\nN\n";
$label .= "A10,16,0,3,1,1,N,\"MR# " . $mrn . " ";
$label .= $registration_date . "\"\n";
$label .= "B10,43,0,3,2,4,50,N,\"" . $mrn . "\"\n";
$label .= "A235,63,0,3,1,1,N,\" ";
$label .= $dob . " ";
$label .= $gender . "\"\n";
$label .= "A265,85,0,3,1,1,N,\" ";
$label .= $nursing_station . " ";
$label .= $room . "-";
$label .= $bed . "\"\n";
$label .= "A10,108,0,3,1,1,N,\"";
$label .= $lastname . ",";
$label .= $firstname;
$label .= "\"\n";
$label .= "A10,135,0,3,1,1,N,\" #" . $visit_id . "\"\n";
$label .= "B10,162,0,3,2,4,50,N,\"" . $visit_id . "\"\n";
$label .= "P1\n";

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error    ()) . "\n";
} else {
    echo "OK.\n";
}

echo "Attempting to connect to '$host' on port '$port'...";
$result = socket_connect($socket, $host, $port);
if ($result === false) {
    echo "socket_connect() failed.\nReason: ($result) " . socket_strerror    (socket_last_error($socket)) . "\n";
} else {
    echo "OK.\n";
}

socket_write($socket, $label, strlen($label));
socket_close($socket);

?>


3 commentaires

Langue différente (EPL au lieu de ZPL) mais exactement ce que l'affiche originale avait probablement besoin de voir lorsque la question a été posée pour la première fois.


+1 merci, Edwin. C'est ce que j'ai fini par faire, mais longtemps après avoir accepté la réponse originale. Merci pour l'entrée cependant!


Cette solution m'a aidé à une configuration similaire. Merci!



3
votes

Voici comment imprimer sur une imprimante zébrée connectée au réseau: En supposant que votre imprimante soit en IP: 192.168.1.50 et Port standard: 9100

<?php 
if(($conn = fsockopen('192.168.1.50',9100,$errno,$errstr))===false){ 
    echo 'Connection Failed' . $errno . $errstr; 
} 

$data = ' 
    ^XA 
    ^FT50,200 
    ^A0N,200,200^FDTEST^FS 
    ^FT50,500 
    ^A0N,200,200^FDZebra Printer^FS 
    ^XZ'; 

#send request 
$fput = fputs($conn, $data, strlen($data)); 

#close the connection 
fclose($conn); 
?> 


0 commentaires

0
votes

Dans mon cas (imprimante USB Windows +), ce que j'ai fait était de partager l'imprimante zebra et d'affecter LPT1 à l'imprimante partagée via Shell Exec, puis d'imprimer un fichier temporaire également via Shel Exec.

    $text = "XA^LH30,30^FO20,0^BY3^B2,60^FD00000060^FS^XZ"; //your text to be printed
    $tmpfname = tempnam(sys_get_temp_dir(), 'PRN'); 
    file_put_contents ($tmpfname,$text);
    shell_exec ("NET USE LPT1: \\\\127.0.0.1\\Zebra"); //replace Zebra with your share name
    shell_exec ( "print  /D:LPT1 ".$tmpfname );


0 commentaires