L'impression sur des imprimantes en PHP
Je suis en train de configurer une interface CLI de PHP application pour imprimer un ensemble de pages web à un défaut ou à l'imprimante spécifiée. Je suis sur une machine Windows 7 avec PHP 5.2.11 cours d'exécution dans une CLI. Pour tester la fonctionnalité d'impression j'ai chargé PHP_printer.dll et je suis d'impression à Onenote, une option imprimer dans un fichier, à l'aide de l'imprimante nom donné en PRINTER_ENUM_LOCAL.
Mise à jour: Voici la dernière version de code:
$handle = printer_open("Send To OneNote 2010");
printer_start_doc($handle, "My Document");
printer_start_page($handle);
$filename='index.html';
$fhandle=fopen($filename, 'r');
$contents = fread($fhandle, filesize($filename));
fclose($fhandle);
printer_set_option($handle, PRINTER_MODE, "RAW");
printer_write($handle,$contents);
printer_end_page($handle);
printer_end_doc($handle);
printer_close($handle);
J'ai reçu ce code pour imprimer une page vierge à la bonne imprimante, mais je ne parviens pas à imprimer les cordes, je passe à printer_write. J'ai confirmé que $contents
est correctement rempli avec le contenu de mon test de fichier html. Peu importe ce que je fournir comme la deuxième arg (chaîne de caractères à imprimer) j'obtiens une page blanche. Est-il quelque chose que je suis absent pour au moins me permettre d'imprimer du texte sur une page?
En alternance est-il une meilleure façon de le faire (à l'aide de PHP/javascript fichiers)? Ce que j'essaie de faire est d'imprimer des pages web qu'ils apparaissent (CSS inclus) via une interface CLI d'application, le web siteest écrit en PHP et j'essaie de minimiser la complexité. Si il ya une meilleure façon d'imprimer ces (conversion au format PDF et l'impression est une option apparemment) je suis ouvert, mais ça sonnait comme cela a été le plus simple/méthode de facto en PHP.
Vous devez vous connecter pour publier un commentaire.
j'ai foiré autour avec printer.dll pour les âges et a obtenu malade.
ne sais pas si beaucoup l'utiliser, mais j'ai acheté cette application
http://www.coolutils.com/TotalPDFPrinter
et ça me permet d'imprimer des fichiers pdf à partir de la ligne de commande de php, ce qui a bien fonctionné pour moi, mais dispose d'une fenêtre écran qui vous pouvez seulement de se débarrasser de si vous achetez la version du serveur (dont vous aurez besoin si votre serveur apache est en cours d'exécution en tant que service). évidemment, le non-popup version est beaucoup plus cher.
une chose que j'ai du mal avec, a été d'obtenir une liste des imprimantes disponibles, donc j'ai écrit cette petite application en C# qui crache de la liste des imprimantes en tant que texte brut, puis utiliser php pour appeler et de les mettre dans une liste déroulante sur mes formulaires web.
Autant que je sache, vous devez utiliser
php_printer.dll
. Vérifier ici. Ensuite, ajouter le php_printer.dll extension pour php.ini. Si vous avez fait cela, alors...Si vous êtes admissible et de la propriété intellectuelle et de la route dans lequel l'imprimante est installé, il devrait faire l'affaire. Quelque chose comme
printer_open('\\\\xx.x.xx.xx\\_printername_');
. (Imprimantes locales n'auraient pas besoin d'ajouter le serveur manuellement, autant que je sache)À vérifier pour les imprimantes, essayez quelque chose comme
printer_list(PRINTER_ENUM_LOCAL | PRINTER_ENUM_SHARED)
. Il y a quelque chose comme unprinter.default_printer
directive sur php.ini, si je me souviens ok. Testé il y a quelques temps sur un php 5.x l'installation. Bonne chance.printer_write
imprime une chaîne de caractères, donc la mise à jour de code devrait fonctionner. Essayez d'utiliserfopen()
,fread()
etfclose()
pour un test avec un externe php/txt fichier. Si cela ne fonctionne pas, étant donné que c'printer_open
est correctement défini pour votre local(?) imprimante, nous devrions avoir à chercher ailleurs.$fhandle=fopen($filename, 'r');
au lieu du mode lecture, utilisez une lecture binaire:$fhandle=fopen($filename, 'rb');
(en va de Même pour tous les autres modes, consultez ici pour une référence rapide. Si cela ne fonctionne pas, revenir et nous allons trouver une autre façon.