2008-10-15 37 views
25

En una aplicación web, ¿es posible forzar la impresión de un archivo PDF en el cliente? Si el navegador está configurado para abrir el PDF dentro de la ventana, creo que la llamada a window.print() funcionará, pero algunos navegadores (como el mío) están configurados para abrir el PDF de forma externa.Cómo imprimir un PDF desde el navegador

Respuesta

28

La forma en que lo hace google do es incorporando JavaScript en el PDF que le dice a Acrobat Reader o cualquier otro lector compatible que lo imprima.

Necesitará un kit de herramientas PDF para hacer esto con un PDF aleatorio.

+4

no es necesario kit de herramientas PDF si se puede usar iTextSharp. Aquí hay un enlace a una página que le dice cómo agregar javascript al PDF usando iTextSharp que imprimirá el pdf. http://itextsharp.sourceforge.net/tutorial/ch11.html – Dave

+34

iTextSharp es un kit de herramientas PDF. –

+2

checkout FPDF para PHP y este complemento para FPDF: http://www.fpdf.de/downloads/addons/36/ – Brenden

0

¿Quiere decir que quiere forzar que el archivo se envíe a una impresora? ¿Estás pensando en la Ley de las consecuencias imprevistas: el dispositivo del usuario no está conectado a una impresora? Podría ser un BlackBerry, podría ser una computadora portátil en wi-fi. ¿Qué sucede si el usuario no quiere que vaya a la impresora predeterminada?

+0

Mi única impresora en casa es PDFCreator. – Kibbee

+1

Spot on. Cada vez que hago este tipo de preguntas y luego sigo adelante y lo implemento, resulta que realmente debería haber deseado que alguien señalara lo que señaló DOK. –

+13

Sí, pero su jefe, que sabe que solo diez empleados en su oficina usarán esta página web, y sabe que tienen impresoras, se desconcertará por el hecho de que puede hacer que una computadora haga casi cualquier cosa, pero no puede hacer abre un diálogo de impresión. – PeterAllenWebb

3

puede establecer un encabezado http para application/pdf y luego forzar una nueva ventana abierta con javascript e imprimir de esa manera. pero, ¿quién realmente haría eso? Quiero decir ahora.

6
<html> 
<script language="javascript"> 
timerID = setTimeout("exPDF.print();", 1000); 
</script> 
<body> 
<object id="exPDF" type="application/pdf" data="111.pdf" width="100%" height="500"/> 
</body> 
</html> 
+0

Eso es interesante. Gracias –

+3

Esto no funciona en un Firefox 9 con el plugin Adobe Reader (en Ubuntu). ('exPDF.print no es una función'). ¿Dónde conseguiste que funcionara? –

+0

Paulo, exPDF es la ID del artículo que está imprimiendo en PDF. – Jared

3

de manera similar a la sugerencia de Taeyoung puede utilizar un iframe para hacer que el PDF y luego usar contentWindow.print();

+0

Al igual que para la solución de Taeyoung, esto no funciona en un Firefox 9 con el plugin Adobe Reader (en Ubuntu). ('exPDF.print no es una función'). ¿Dónde conseguiste que funcionara? –

+0

Creo que esto solo funciona con webkit. Los otros navegadores simplemente lo descargarán. –

+0

En realidad, Firefox muestra el PDF en el iframe e ignora la llamada al método (el mensaje de error está visible en la consola JS en Firebug). –

0

No puede imprimir un documento PDF directamente desde el navegador usando Javascript. La función de Javascript window.print() utiliza la función de impresión del navegador y esto no es lo que necesita. Puede lograr su objetivo al comenzar la impresión a través de Java Web Start. Coloque su documento PDF directamente en el jnlp para que pueda ejecutar un programa Java que reciba el documento en formato PDF como argumento. Ahora se está ejecutando en el sistema y ya no está en el navegador, por lo que puede interactuar directamente con el controlador de impresión a través de la API JAVA. Esto parece bastante simple, pero realmente no es porque la API de impresión JAVA no acepte un archivo como entrada, sino una estructura de datos particular que implementa la interfaz ava.awt.print.Pageable.

Existe un servicio web en www.pdfprint.it que hace todo el trabajo por usted. Aquí un fragmento tomado de la documentación oficial.

<?php 

// 1. GET the jnlp file with curl 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://www.pdfprint.it/printPdf?auth=XXXX");   
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //return the transfer as a string  
$jnlp = curl_exec($ch); 
curl_close($ch); 

$pdfDoc ="example.pdf"; 


//2. put in the jnlp your PDF document base64 encoded 

$jnlp = str_replace("####", base64_encode(file_get_contents($pdfDoc)),$jnlp); 


//3. echo the jnlp file 

header('Content-type: application/x-java-jnlp-file'); 

echo $jnlp; 

Sólo es necesario para obtener el archivo jnlp, poner en su documento PDF y enviar el jnlp al navegador. El programa JAVA que ejecuta la impresión se descargará directamente desde el servicio web. También puede configurar algunas opciones de impresión como copias, lados, y así sucesivamente

2

puede utilizar la biblioteca simple increíble printjs "http://printjs.crabbly.com" se tarda archivo PDF e imprimirlo sin mostrar diálogo de impresión si es necesario, una forma sencilla de hacerlo a continuación:

<button type="button" onclick="printJS('docs/printjs.pdf')"> 
 
    Print PDF 
 
</button>

Cuestiones relacionadas