2009-06-10 73 views
24

Tengo una página web con PDF incrustado. Mi código es el siguiente:Impresión silenciosa de un PDF incrustado

<embed 
    type="application/pdf" 
    src="path_to_pdf_document.pdf" 
    id="pdfDocument" 
    width="100%" 
    height="100%"> 
</embed> 

que tienen el código Javascript para imprimir el PDF:

function printDocument(documentId) { 

    //Wait until PDF is ready to print  
    if (typeof document.getElementById(documentId).print == 'undefined') { 

     setTimeout(function(){printDocument(documentId);}, 1000); 

    } else { 

     var x = document.getElementById(documentId); 
     x.print(); 
    } 
} 

Cuando este código se ejecuta Acrobat plug-in abre el diálogo de impresión conocido. Algo como esto:

PrintDialog

Dos preguntas:

  • ¿Cómo mejorar la manera de detectar que PDF está cargada y lista para la impresión?
  • ¿Cómo evitar mostrar el cuadro de diálogo de impresión?

Un poco más de información acerca de mi sistema:

OS: Windows XP

Navegador: Internet Explorer 7

PDF Plugin: Acrobat Reader 9

+0

@gideon por alguna razón el esto no funciona en IE8 .... ff o cromo ... es decir, dar a esta web error Detalles de error Mensaje: 'nulo' es nulo o no un objeto Línea : 26 Char: 5 Código: 0 URI: http: //localhost/mpdf/pdf.php si pongo en alerta() dentro de si typeof la alerta continúa siguen apareciendo incluso después de que se carga el documento –

Respuesta

18

No podrá imprimir de forma silenciosa con JavaScript simple. ¿Cómo le gustaría que su impresora empiece a imprimir 100000000 páginas de negro? No es algo bueno Si desea imprimir de forma silenciosa y hacer que funcione solo para Internet Explorer, existen controles ActiveX que pueden hacerlo. Esto requiere una mayor configuración de seguridad para su página y para que sus usuarios realmente confíen en su sitio.

+0

Gracias, es para la intranet corporativa no para Internet, deben confiar! :-) ¿Puede señalarme este ActiveX? Lo evaluaré. – sourcerebels

+0

Creo que su punto era que si el navegador permitía la impresión silenciosa, sería un agujero de seguridad. Por lo tanto, es probable por diseño que un navegador/complemento no lo permita. – JohnFx

+0

La tecnología ha cambiado bastante desde que se aceptó esta solución. Estas son algunas soluciones de impresión silenciosa, algunas de las cuales pueden imprimir en forma silenciosa el PDF por URL exactamente como se solicitó. http://stackoverflow.com/questions/27057816 – tresf

1

Me pregunto si realmente necesita esperar antes de imprimir - ¿El trabajo de impresión no lo manejará por usted? Y realmente espero que ningún navegador moderno le permita a usted (ni a ningún sitio web para ese asunto) imprimir sin ese diálogo de confirmación (algunos navegadores antiguos solían hacer eso, hace mucho tiempo).

+0

Hola Arjan, Gracias por su respuesta rápida. Si llamo al método .print antes de cargar el archivo PDF, aparece un error de Javascript como "este método no está permitido para este objeto" (aparece el mensaje de error en español). En su segunda apreciación creo que el PDF no está impreso por el navegador está impreso por el complemento de Acrobat :-) – sourcerebels

+0

Pero ese complemento podría estar presente en el navegador de cualquiera, ¿verdad? Si es así, entonces no espero que la confirmación desaparezca. ¿El evento de carga para el elemento del cuerpo se dispara antes de que se cargue su PDF? – Arjan

+0

Oh, me parece que Internet Explorer admite onload() para incrustar también: http://msdn.microsoft.com/en-us/library/cc197055(VS.85).aspx – Arjan

1

Puede hacer esto en Firefox cambiando about:config. Agregue print.always_print_silent y configúrelo en true.

4

Esto es posible en un entorno Intranet de confianza.

<object id="pdfDoc" style="position:absolute;z-index:-1;" name="pdfDoc" classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="900px" height="100%"> 
     <param name="SRC" value="yourdoc.pdf" /> 
    </object> 

<input type="button" ... onclick="pdfDoc.printAll();" /> 

Esto omitirá el cuadro de diálogo de impresión y se enviará directamente a la impresora predeterminada.

+5

No pude obtener este método para trabajar en FF o Safari. ¿Es esto solo IE? – Karl

+0

Gracias un millón de veces. Funciona impecablemente en IE9. ¡¡¡Me salvaste!!! –

Cuestiones relacionadas