Imprimez un document PDF sur une imprimante réseau en transmettant des paramètres d'impression pour des éléments tels que la couleur, l'orientation, le duplex, etc.
Je me suis connecté à l'une des imprimantes (192.168.0.10 - Ricoh MP C5503 [si vous devez vraiment savoir]) et ajouté un accès FTP.
Imprimer un document en utilisant la commande Invite sous Windows fonctionne!
> ftp 192.168.0.10
> User (192.168.0.10:(none)): username
> Password: password
> put path\to\file.pdf filetype=PDF
> bye
Attempt 1 en utilisant la fonction exec () de PHP
J'ai essayé BEAUCOUP de façons de faire fonctionner exec, mais en vain. Je n'ai pas été en mesure d'exécuter des commandes multilignes à l'aide de la fonction exec de PHP (idéalement, exécutant les opérations suivantes). Lors de l'exécution de exec () à l'intérieur, je ne peux pas me connecter à FTP car chaque ligne doit être exécutée après l'exécution de la ligne précédente. Je n'ai rien trouvé en ligne (plusieurs recherches Google ne donnent aucun résultat [sauf comment afficher en écho plusieurs lignes de sortie de cmd et non comment insérer plusieurs lignes de commande successivement])
> ftp 192.168.0.10
> User (192.168.0.10:(none)): username
> Password: password
> put path\to\test.pdf filetype=PDF
> bye
Attempt 2 en utilisant la fonction exec () de PHP
J'ai essayé d'exécuter la commande ftp en transmettant un fichier texte comme le suggèrent certaines réponses sur this post. Cette solution ne fonctionne pas comme prévu. Lorsque vous exécutez ftp -i -s:test.txt
à partir d'une invite de commande, cela fonctionne. en PHP, ce n'est pas le cas.
Fichier PHP
exec("ftp -i -s:test.txt");
Fichier texte (test.txt)
open 192.168.0.10
username
password
put test.pdf filetype=PDF
bye
Attempt 3 en utilisant les fonctions FTP de PHP
Ce que je ne peux pas comprendre maintenant, c'est comment envoyer le fichier à l’imprimante via FTP et comment définir les paramètres de l’imprimante
$ftp = [
'server' => gethostbyaddr('192.168.0.10'),
'username' => 'username',
'password' => 'password',
];
$conn = ftp_connect($ftp['server']);
$login = ftp_login($conn, $ftp['username'], $ftp['password']);
if (is_readable($file)) {
if (ftp_put($conn, $file, $file, FTP_ASCII)) {
echo 'Successfully executed command';
}
else {
echo 'Failed execution of command';
}
}
else {
echo 'File is not readable';
}
Je recherche une solution qui fonctionnerait à la fois sur les systèmes Windows et Linux, car nous sommes également en train de passer de IIS à NGINX (Dieu merci ...). La méthode qui, à mon avis, serait la meilleure implémentation utilise ftp
pour Windows et rcp
ou rsh
pour Linux (puisque la documentation de l'imprimante que j'ai jointe sous Plus d'informations dans le Ce que j'essaie de faire section mentionne ces méthodes pour l’impression).
J'aimerais aussi si nous n'avions pas à générer des fichiers txt ou un autre type de fichier pour pouvoir imprimer ces documents. Nos utilisateurs peuvent traiter des centaines de fichiers à la fois, ce qui, je le comprends, nous permet de nommer chaque fichier txt, puis de les supprimer une fois le script exécuté, bien que je préfère de loin une solution propre dans laquelle nous pouvons transmettre des paramètres tels que printer ( Adresse IP ou nom de la fonction gethostbyaddr()
), nom d'utilisateur, mot de passe, fichier à imprimer, options (couleur, duplex, type de fichier, orientation, reliure, etc.). Nous utilisons MDPF pour générer nos fichiers PDF. Une méthode permettant de placer le fichier sans le créer réellement sur notre serveur, où nous aurions ensuite à le supprimer, serait préférable (par exemple, MPDF string pièce jointe pour courrier électronique) mais elles ne sont pas obligatoires.
La solution doit fonctionner avec PHP.
Je continuerai à étudier davantage de méthodes pour imprimer des documents sur des imprimantes réseau après l'avoir postée jusqu'à ce qu'une solution viable _ ait été trouvée et mis à jour mon envoi en conséquence après chaque tentative.
Toute aide à ce sujet est grandement appréciée.
Les fonctions printer permettent l’impression, mais elles ne permettent pas de contrôler les travaux d’impression (options telles que l’impression couleur/noir et blanc, le type de fichier, le recto verso, etc.). Ainsi, cette option (à moins que quelqu'un ait un "hack", ne fonctionnera pas)
Bien que JavaScript/AJAX fonctionne pour l’impression (et autorise les paramètres d’impression), nous traiterons potentiellement des centaines de pages à la fois et le transfert de tâches d’impression à plusieurs imprimantes (par exemple, dans différents bureaux). L'idée est d'automatiser notre impression pour ce processus et pour les processus futurs.
Essaye ça:
$ftp = ftp_connect('192.168.0.10');
if(ftp_login($ftp,'username','password')){
if(ftp_put($ftp,'filetype=PDF','yourfile.pdf',FTP_BINARY)){
echo 'success';
}
}
Faites-moi savoir ce que vous obtenez.
Mise à jour: depuis manuel de l'imprimante à la page 19, Vous pouvez utiliser la commande suivante pour envoyer un fichier et définir les options du périphérique en même temps:
ftp> put file1 filetype=postscript,tray=tray1,copies=3,resolution=600
Dans cet exemple, file1
est le nom du fichier local que vous souhaitez envoyer, filetype=postscript,tray=tray1,copies=3,resolution=600
est le nom du fichier distant . Pour être précis, la commande FTP réelle est la suivante:
STOR filetype=postscript,tray=tray1,copies=3,resolution=600
En utilisant les fonctions FTP de PHP, le code PHP est:
ftp_put($ftp,'filetype=postscript,tray=tray1,copies=3,resolution=600','file1',FTP_BINARY);
Où $ftp
est le descripteur de connexion d'un appel réussi à ftp_connect()
.
Pour reprendre mon premier exemple, le code devient:
$ftp = ftp_connect('192.168.0.10');
if(ftp_login($ftp,'username','password')){
if(ftp_put($ftp,'filetype=postscript,tray=tray1,copies=3,resolution=600','file1',FTP_BINARY)){
echo 'success';
}
}
Essaie.
Bien qu'une bonne partie de mon essai n'ait pas réussi à imprimer sur une imprimante réseau et ne puisse pas trouver la solution appropriée. De plus, Shell_exec ("AcroRd32.exe") et via "other pdfprinter" ne fonctionne pas car mon serveur WAMP nécessite une autorisation spéciale pour les programmes à interface graphique. Maintenant, j'ai enfin trouvé une solution qui fonctionne pour moi.
Ceci est pour la solution Windows uniquement
Télécharger PDFtoPrinter
Code à imprimer sur une imprimante réseau/locale
$command = escapeshellcmd('PDFtoPrinter YOURFILE.PDF "\\\YOURSERVERNAME\YOURPRINTERNAME"');
$output = Shell_exec($command);
echo $output;