Impresión “silenciosa” en una aplicación web

Estoy trabajando en una aplicación web que necesita impresiones silenciosas, es decir, sin la participación del usuario. ¿Cuál es la mejor manera de lograr esto? No le gusta que se pueda hacer estrictamente con Javascript, Flash y / o AIR. Lo más cerca que he visto implica un applet de Java.

Puedo entender por qué sería una mala idea para cualquier sitio web el poder hacer esto. Esta instancia específica es para una aplicación interna, y es perfectamente aceptable si el usuario necesita agregar la URL a una lista de sitios de confianza, instalar un complemento, etc.

Esto es lo que debe hacer para permitir que Firefox imprima inmediatamente sin mostrar el cuadro de diálogo de preferencias de impresión.

  1. Escribe about: config en la barra de direcciones de Firefox y presiona Enter.

  2. Haga clic derecho en cualquier lugar de la página y seleccione Nuevo> Booleano

  3. Ingrese el nombre de preferencia como print.always_print_silent y haga clic en Aceptar.


Lo encontré en algún lado y me ayudó

Aquí hay dos ejemplos de código que puedes probar:

1 :

   

2 :

 if (navigator.appName == "Microsoft Internet Explorer") { var PrintCommand = ''; document.body.insertAdjacentHTML('beforeEnd', PrintCommand); PrintCommandObject.ExecWB(6, -1); PrintCommandObject.outerHTML = ""; } else { window.print(); } 

Es posible que deba agregar el sitio / página que está probando en su zona de intranet local.

Como @Axel escribió, Firefox tiene la opción print.always_print_silent.

Para Chrome, use la opción --kiosk-printing para omitir el cuadro de diálogo Vista previa de impresión:

Edite el acceso directo que usa para iniciar Chrome y agregue “–kiosk-printing” y luego reinicie Chrome.

Nota: si no funciona, lo más probable es que debido a que no detuviste por completo Chrome, cerrar la sesión y volver a ingresar seguramente servirá.

Luchamos con un problema similar. Necesitábamos imprimir cheques en una impresora de cheques, tags en una impresora de tags y facturas de clientes en una impresora de facturas para la tienda minorista de embrasse-moi . Tenemos computadoras falsas, rincones, ipads, iphones sin capacidades de impresión. La impresión de una característica de factura era básicamente una impresión silenciosa. Se escribió un pdf en el servidor y se usó un script de shell localmente para recuperarlo e imprimirlo.

Usamos lo siguiente para una solución perfecta con bibliotecas mínimas:

  1. use TCPDF en PHP para crear PDF. Almacene el PDF en el servidor. Ponlo en una carpeta ‘Print Queue’. Felicitaciones por TCPDF, un poco difícil de aprender, pero SICK SICK SICK. Tenga en cuenta que estamos imprimiendo 80 tags por página usando avery 5167 con un código de barras con una precisión perfecta. Tenemos una cola de impresión de tags, cheques y facturas. Diferentes carpetas básicamente para diferentes impresoras.

  2. Utilice el script de shell incluido para conectarse al servidor a través de FTP, descargue el PDF, elimine el PDF del servidor, envíe el PDF a la impresora y, nuevamente, elimine el PDF.

  3. Usando una computadora local conectada a la impresora, ejecute la secuencia de comandos en la terminal. obviamente, modifique sus impresoras y rutas.

  4. Como siempre quiere que esto se ejecute, y porque usa un MAC, cree una ‘aplicación’ usando el automatizador. Inicie el automatizador, coloque el script en un ‘ejecutar script de shell’ y guárdelo. A continuación, pega esa aplicación en un elemento de inicio de sesión. Vea la secuencia de comandos debajo del script de shell si desea ver la ventana de ‘salida’ en el MAC.

BAM: trabaja enfermo.

Aquí está el script de shell

 #!/bin/bash # Get a remote directory Folder # List the contents every second # Copy the files to a local folder # delete the file from server # send the file to a printer # delete the file # compliments of embrasse-moi.com clear # clear terminal window echo "##########################################" echo "Embrasse-Moi's Remote Print Queue Script" echo "##########################################" #Local Print Queue Directory COPY_TO_DIRECTORY=/volumes/DATA/test/ echo "Local Directory: $COPY_TO_DIRECTORY" #Priter PRINTER='Brother_MFC_7820N' echo "Printer Name: $PRINTER" #FTP Info USER="user" PASS="pass" HOST="ftp.yourserver.com" #remote path COPY_REMOTE_DIRECTORY_FILES=/path echo "Remote Print Queue Directory: $HOST$COPY_REMOTE_DIRECTORY_FILES" echo 'Entering Repeating Loop' while true; do #make the copy to directory if not exist echo "Making Directory If it Does Not Exist" mkdir -p $COPY_TO_DIRECTORY cd $COPY_TO_DIRECTORY ######################### WGET ATTEMPTS ############################################ #NOTE wget will need to be installed echo "NOT Using wget to retrieve remote files..." # wget --tries=45 -o log --ftp-user=$USER --ftp-password=$PASS ftp://ftp.yourserver.com$COPY_REMOTE_DIRECTORY_FILES/*.pdf ######################### FTP ATTEMPTS ############################################ echo "NOT Using ftp to retrieve and delete remote files..." #This seems to fail at mget, plus not sure how to delete file or loop through files ftp -n $HOST <  

y la secuencia de comandos del autómata si desea ver la salida, mantenga la aplicación con la secuencia de comandos, elija una opción ejecutar secuencia de comandos de la manzana:

 on run {input, parameters} tell application "Finder" to get folder of (path to me) as Unicode text set workingDir to POSIX path of result tell application "Terminal" do script "sh " & "'" & workingDir & "script1.sh" & "'" end tell return input end run 

Escribí un tsr de python que sondeaba el servidor de vez en cuando (extraía la frecuencia de sondeo del servidor) y se imprimía en la impresora de tags. Fue relativamente agradable.

Una vez escrito en python, utilicé py2exe en él, luego compilé el ino setup, luego puse intranet e hice que el usuario lo instalara.

No fue genial, pero funcionó. Los usuarios lo lanzarían por la mañana y el progtwig recibiría el interruptor de cierre del servidor por la noche.

Lo tengo trabajando todo el día usando una página JSP simple y la biblioteca Java PDF Renderer (https://pdf-renderer.dev.java.net). Esto funciona porque Java imprime utilizando el sistema operativo y no el navegador. Supuestamente, la “impresión silenciosa” se considera una vulnerabilidad / exploit del navegador y se parcheó después de IE 6, por lo que es una buena idea hacerlo funcionar a través de Javascript o Active X. Quizás sea posible, pero no pude hacerlo funcionar sin Java.

Sé que este es un hilo más antiguo, pero sigue siendo la principal búsqueda de Google de “impresión silenciosa”, así que agregaré mis hallazgos para el beneficio de cualquiera que se encuentre con esto ahora.

Tuvimos un problema similar con la impresión de tags de varios tipos en varias impresoras para un sistema de stock. Tomó algo de prueba y error, pero lo solucionamos haciendo que el sistema creara un pdf de las tags, con el nombre de la impresora y el código de la página codificados en el pdf. Todo lo que debe hacer es: EN IE, vaya a Opciones de Internet >> Seguridad >> Sitios de confianza >> Sitios eliminados ‘Requerir verificación del servidor (https 🙂 para todos los sitios en esta zona’ agregar ‘ http: // [yoururl] “y el pdf se imprimirá automáticamente.

Cuando originalmente configuramos esto, usamos Chrome como navegador predeterminado, pero en septiembre de 2015, Chrome dejó de tener la capacidad de ejecutar complementos NPAPI. Esto significaba que ya no se podía seleccionar el plugin de Adobe pdf como manejador de PDF predeterminado, y el plugin incorporado en pdf no maneja la impresión silenciosa 🙁 Todavía funciona en Internet Explorer (IE11 al momento de escribir) pero yo he No intenté ningún otro navegador.

HTH Cheers, Nige

Tengo que ser honesto, estoy pensando en voz alta aquí … Pero no podría hacerse con un applet o algún tipo (ya sea Java o lo que sea) que tenga permisos de confianza (como el de la zona de Intranet) o algo así ?

¿Puede valer la pena investigar qué permisos se pueden otorgar a cada zona?

Siguiendo a Google, creo que definitivamente tienes un desafío, hasta ahora la mayoría de los artículos que he visto implican la impresión en impresoras conectadas al servidor .

Si es interno, ¿sería posible enrutar la impresión desde el servidor a las impresoras de departamento / usuario o algo así?

Si solo se trata de una aplicación interna, puede evitar la impresión desde el navegador y enviar una impresión directamente desde el servidor a la impresora más cercana al usuario.

Estoy en el mismo problema aquí, esto es lo que aprendí hasta ahora.

R .: Necesita configurar un servidor de impresión IPP

Tiene múltiples implementaciones de servidor de impresión que puede intentar.

  1. Hardware Servidor de impresión IPP: como DLINK DPR-1020 o similar, algunas impresoras tienen esta funcionalidad incorporada.

  2. Servidor Linux con CUPPS: http://www.howtoforge.com/ipp_based_print_server_cups

  3. Servidor XP-Pro con ISS: http://www.michaelphipps.com/ipp-print-server-windows-xp-solution

B .: Necesita hacer que su aplicación web sea un cliente de este servidor IPP para que pueda seleccionar y enviar las solicitudes de impresión de cada usuario al servidor de impresión.

PHP :: PRINT :: IPP es una biblioteca php que puedes probar (está bien probado en servidores de tazas).

Deberías echarle un vistazo a PrintNode . Proporcionan servicios de impresión remota silenciosa para aplicaciones web. Instala una pieza de software en el escritorio que se sincroniza con sus servidores. A continuación, puede enviar impresiones utilizando una solicitud json y se imprimen al instante.