2008-08-22 21 views
36

Estoy trabajando en una aplicación web que necesita imprimirse de forma silenciosa, sin intervenció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.Impresión "silenciosa" en una aplicación web

Entiendo 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.

+0

¿Cuál es la solución que funcionó para usted? – noamtm

+4

terminamos con un applet de Java. fue una pesadilla. Normalmente habría sido horrible, pero como esto fue para los Juegos Olímpicos de Beijing 2008, la distancia adicional y las diferencias de idioma lo convirtieron en una pesadilla. Al final, funcionó "suficiente". Pero, de nuevo, pesadilla. No recomendaría ndlo. – Bill

+0

Si ha tropezado aquí solo para descubrir que la ruta del applet de Java ya no funciona muy bien, aquí hay una buena discusión al respecto: http://stackoverflow.com/questions/27057816 – tresf

Respuesta

0

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 Intranet) o algo así?

¿Valdría la pena investigar qué permisos se pueden otorgar a cada zona?

Siguiendo un Google, creo que sin duda tiene un desafío, hasta ahora la mayoría de los artículos que he visto implican la impresión en printers connected to the server.

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

1

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

Una vez escrito en python, utilicé py2exe, luego el compilador inno 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 programa recibiría el interruptor de cierre del servidor por la noche.

6

Éstos son dos ejemplos de código que puede probar:

:

<script> 
function Print() { 
    alert ("THUD.. another tree bites the dust!") 
    if (document.layers) 
    { 
    window.print(); 
    } 
    else if (document.all) 
    { 
    WebBrowser1.ExecWB(6, 1); 
    //use 6, 1 to prompt the print dialog or 6, 6 to omit it 
    //some websites also indicate that 6,2 should be used to omit the box 
    WebBrowser1.outerHTML = ""; 
    } 
} 
</script> 
<object ID="WebBrowser1" WIDTH="0" HEIGHT="0" 
CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"> 
</object> 

:

if (navigator.appName == "Microsoft Internet Explorer") 
{ 
    var PrintCommand = '<object ID="PrintCommandObject" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></object>'; 
    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.

0

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.

+0

No, es una aplicación interna en el sentido de que está disponible para el público en general, pero será en lugares como varias cadenas minoristas, etc. – Bill

29

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. Tipo sobre: ​​config en la barra de direcciones de Firefox y pulse Enter.

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

  3. Introduzca el nombre de preferencia como print.always_print_silent y haga clic en OK.


He encontrado que en algún lugar y me ayudó

+1

¡Esto funciona! Gracias. ¿Alguien sabe si puedes hacer esto? ¿Algún otro navegador también? – aron

+0

Gracias! Me salvó horas de frustración! – patrickdamery

+1

¿Qué pasa con IE y Chrome? – Arunster

1

tengo que trabajar todo el día utilizando una página JSP simple y la biblioteca de Java PDF Procesador (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.

0

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

R .: Usted necesita configurar un servidor de impresión IPP

Tiene varias implementaciones del servidor de impresión que puede probar.

  1. hardware IPP servidor de impresión: como DLINK DPR-1020 o similares, algunas impresoras han incorporado esta funcionalidad.

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

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

B .: Es necesario para que su aplicación web a un cliente de este servidor IPP por lo que pick proceso: envíe la solicitud de impresión de cada usuario al servidor de impresión.

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

5

Tuvimos problemas con un problema similar. Necesitábamos imprimir cheques en una impresora de cheques, etiquetas en una impresora de etiquetas y facturas de clientes en una impresora de facturas para la tienda minorista 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.

Se utilizó la siguiente para una solución perfecta, con un mínimo de bibliotecas:

  1. uso 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 etiquetas por página usando avery 5167 con un código de barras con una precisión perfecta. Tenemos una cola de impresión de etiquetas, 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 funcione, y porque usa un MAC, cree una 'aplicación' usando el autómata. 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 - works sick.

Aquí está la secuencia de comandos 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 <<END_SCRIPT 
    quote USER $USER 
    quote PASS $PASS 
    cd $COPY_REMOTE_DIRECTORY_FILES 
    ls 
    prompt 
    mget * 
    mdel * 
END_SCRIPT 


    echo "Examining Files in $COPY_TO_DIRECTORY" 
    for f in $COPY_TO_DIRECTORY/*.pdf 
    do 
     # take action on each file. $f store current file name  
     #print 
     echo "Printing File: $f To: $PRINTER" 
     lpr -P $PRINTER $f 

     # This will remove the file..... 
     echo "Deleting File: $f" 
     rm "$f" 
    done 
    echo "Script Complete... now repeat until killed..." 
    sleep 5 
done 

y el guión automator si desea ver una salida, mantener la aplicación con el guión elegir una opción de ejecución de script de 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 
0

Usted debe echar 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.

4

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

para Chrome, utilice la opción --kiosk-printing saltarse el diálogo Vista preliminar:

editar el acceso directo se utiliza para iniciar Chrome y añadir "--kiosk de impresión" y luego reiniciar Chrome.

Nota: Si no funciona, lo más probable es que debido a que no detuvo por completo Chrome, cerrar la sesión y volver a entrar seguramente hará el truco.

+0

tienes que asegurarte de que todos los procesos de Chrome se eliminen (hangouts, etc.). Esto siempre me hacía tropezar cuando no podía entender por qué mis banderas de inicio no eran reconocidas. '--disable-print-preview' es otra forma de pasar por alto la ventana de vista previa de Chrome y obtener las opciones predeterminadas de diálogo de impresión del sistema. – timbrown

+0

¿Developer.chrome.com/extensions/printerProvider ofrece una solución para imprimir silenciosamente en cromo? – mmu36478

1

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 las etiquetas de impresión 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 etiquetas, con el nombre de la impresora y el código de la página codificados en el pdf. Todo lo que tiene que hacer es: EN IE, vaya a Opciones de Internet >> Seguridad >> Sitios de confianza >> Sitios Borrar 'Requerir verificación del servidor (https :) para todos los sitios en esta zona' agregar "" y el pdf se imprimirá automáticamente.

Cuando originalmente configuramos esto, usamos Chrome como el 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 I ' no he tratado de cualquier otro navegador.

HTH Saludos, Nige

Cuestiones relacionadas