php network-printers

Impresión de PHP a impresora de red



network-printers (2)

Aunque, gran parte de mi intento no se pudo imprimir en la impresora de red y no puedo encontrar la solución adecuada. También shell_exec ("AcroRd32.exe") y a través de "otra impresora pdf" que no funcionan, ya que mi servidor WAMP necesita un permiso especial para los programas GUI. Ahora finalmente he encontrado una solución que funciona para mí.

Esto es solo para windows.

Descargar PDFtoPrinter

Código para imprimir en red / impresora local

$command = escapeshellcmd(''PDFtoPrinter YOURFILE.PDF "///YOURSERVERNAME/YOURPRINTERNAME"''); $output = shell_exec($command); echo $output;

Lo que estoy tratando de hacer

Imprima un documento PDF en una impresora de red mientras pasa parámetros de impresión para cosas como color, orientación, dúplex, etc.

Más información

  • Tenemos varias impresoras de red , para las cuales las IP son estáticas y conocidas (es decir, 192.168.0.10)
  • Encontré un documento que contiene una lista de parámetros / opciones que se pueden pasar a la impresora para cambiar la configuración de impresión here (la mayoría de los cuales se encuentran en la página 25)
  • Estamos creando un proceso mediante el cual imprimiremos un documento en blanco y negro EXCEPTO la segunda página. Esto significa que la primera página , así como la página 3 y más, se imprimen en blanco y negro ; La página 2 se imprimirá en color . (Esto se debe al costo de la impresión en color, además de que nuestras otras páginas no contienen color, por lo que imprimirlas en color es EXTREMADAMENTE sin sentido y aproximadamente 8 veces más caro. Este proceso imprimirá miles de páginas cada mes, lo que se suma a mucho $$$)

Lo que he tenido <algo> con éxito

Me registré en una de las impresoras (192.168.0.10 - Ricoh MP C5503 [si realmente debes saberlo]) y agregué acceso a FTP
¡Imprimir un documento usando el símbolo del sistema en Windows funciona!

> ftp 192.168.0.10 > User (192.168.0.10:(none)): username > Password: password > put path/to/file.pdf filetype=PDF > bye

Lo que he tratado de hacer

Intento 1 usando la función exec () de PHP
He intentado MUCHAS maneras de hacer funcionar a los ejecutivos, pero sin éxito. No he podido ejecutar comandos multilínea usando la función exec de PHP (idealmente, ejecutando lo siguiente). Al ejecutar lo siguiente dentro de exec (), no puedo conectarme a FTP ya que cada línea debe ejecutarse después de que se haya ejecutado la línea anterior. No he encontrado nada en línea (las búsquedas múltiples en Google no producen resultados [excepto cómo hacer eco de varias líneas de salida desde cmd, no cómo insertar varias líneas cmd consecutivamente])

> ftp 192.168.0.10 > User (192.168.0.10:(none)): username > Password: password > put path/to/test.pdf filetype=PDF > bye

Intento 2 usando la función exec () de PHP
Intenté ejecutar el comando ftp pasando un archivo de texto como sugieren algunas respuestas en this publicación. Esta solución no funciona como se esperaba. Cuando se ejecuta ftp -i -s:test.txt desde un símbolo del sistema, esto funciona; en PHP, no lo hace.

Archivo PHP

exec("ftp -i -s:test.txt");

Archivo de texto ( test.txt )

open 192.168.0.10 username password put test.pdf filetype=PDF bye

Intento 3 usando las funciones FTP de PHP
Lo que no puedo entender ahora es cómo enviar el archivo a la impresora a través de ftp y cómo establecer la configuración de la impresora.

$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''; }

Idealmente...

Estoy buscando una solución que funcione tanto en sistemas Windows como Linux, ya que también estamos en el proceso de pasar de IIS a NGINX (gracias a Dios ...). El método que creo que sería la mejor implementación es usar ftp para Windows y rcp o rsh para Linux (ya que la documentación de la impresora que adjunté en Más información en la sección Lo que estoy tratando de hacer menciona estos métodos para imprimir).

También me gustaría si no tuviéramos que generar archivos txt o algún otro tipo de archivo para imprimir estos documentos. Nuestros usuarios pueden estar procesando cientos de archivos a la vez, lo que entiendo que podemos nombrar de forma única cada archivo txt y luego eliminarlos una vez que el script se haya ejecutado correctamente, aunque preferiría una solución limpia donde podamos pasar parámetros como la impresora ( IP o nombre de la gethostbyaddr() , nombre de usuario, contraseña, archivo a imprimir, opciones (es decir, color, dúplex, tipo de archivo, orientación, enlace, etc.). Estamos utilizando MDPF para generar nuestros archivos PDF, por lo que se preferiría un método que colocara el archivo sin crearlo realmente en nuestro servidor, donde tendríamos que eliminarlo (es decir, MPDF cadena MPDF para correo electrónico), pero no son necesarios.

Adicionalmente

La solución debe funcionar con PHP.

Seguiré investigando más métodos para imprimir documentos en impresoras de red después de publicar esto hasta que se encuentre una solución viable y actualice mi publicación según sea necesario después de cada intento.

Cualquier ayuda al respecto es muy apreciada.

Ediciones

Métodos fallidos

Método: Funciones de la impresora PHP

Las funciones de la impresora permiten la impresión, pero no permiten el control sobre los trabajos de impresión (opciones como la impresión en color / en blanco y negro, el tipo de archivo, dúplex, etc.). Por lo tanto, estas opciones (a menos que alguien tenga un "hack", no funcionarán)

Método: JavaScript / AJAX

Si bien JavaScript / AJAX funcionaría para imprimir (y permitiría la configuración de impresión), estaremos procesando potencialmente cientos de páginas a la vez y el procesamiento puede estar enviando trabajos de impresión a varias impresoras (es decir, en diferentes oficinas). La idea es automatizar nuestra impresión para este proceso y para procesos futuros por igual.

Métodos no probados

Métodos: Aún no probado

  • Usando IPP (según @Dezza: Dezza )
  • Usando PrintNode (según @odedta: odedta )

Prueba esto:

$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''; } }

Dejame saber lo que obtienes.

Actualización: en here de here en la página 19, puede usar el siguiente comando para enviar un archivo y configurar las opciones del dispositivo al mismo tiempo:

ftp> put file1 filetype=postscript,tray=tray1,copies=3,resolution=600

En ese ejemplo, file1 es el nombre del archivo local que desea enviar, tipo de filetype=postscript,tray=tray1,copies=3,resolution=600 es el nombre del archivo remoto. Para ser precisos, el comando FTP real es:

STOR filetype=postscript,tray=tray1,copies=3,resolution=600

Usando las funciones FTP de PHP, el código PHP es:

ftp_put($ftp,''filetype=postscript,tray=tray1,copies=3,resolution=600'',''file1'',FTP_BINARY);

Donde $ftp es el identificador de conexión de una llamada exitosa a ftp_connect() .

Poniéndolo en mi primer ejemplo, el código se convierte en:

$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''; } }

Darle una oportunidad.