imprimir - ¿Se puede abrir el diálogo de impresión de un archivo PDF con Javascript?
imprimir pdf html (10)
¿Por qué no usar la opción de menú Acciones para configurar esto?
Haga lo siguiente: Si tiene Acrobat Pro, vaya a la pestaña de sus páginas, haga clic con el botón derecho en la miniatura de la primera página y haga clic en las propiedades de la página. Haga clic en la pestaña de acciones en la parte superior de la ventana y debajo de seleccionar activar seleccione abrir página. Debajo de seleccionar acción, seleccione ''Ejecutar un elemento de menú'' . Haga clic en el botón Agregar, luego seleccione ''Archivo> Imprimir'' y luego OK. Haga clic en Aceptar nuevamente y guarde el PDF.
Sé cómo abrir una página web en una nueva ventana y agregar javascript para que aparezca el cuadro de diálogo de impresión. ¿Hay alguna manera de hacer algo similar con un archivo PDF?
Acabo de descubrir cómo hacerlo en el propio PDF: si tienes acrobat pro, ve a la pestaña de páginas, haz clic con el botón derecho en la miniatura de la primera página y haz clic en las propiedades de la página. Haga clic en la pestaña de acciones en la parte superior de la ventana y debajo de seleccionar activar seleccione abrir página. En seleccionar acción, seleccione "ejecutar un javascript". Luego, en la ventana javascript, escribe esto:
this.print({bUI: false, bSilent: true, bShrinkToFit: true});
Esto imprimirá su documento sin un diálogo a la impresora predeterminada en su máquina. Si desea el cuadro de diálogo de impresión, simplemente cambie bUI a verdadero, bDe silencioso a falso y, opcionalmente, elimine el parámetro de contracción para ajuste.
¡Impresión automática de PDF!
Ejemplo de código incrustado:
<object type="application/pdf" data="example.pdf" width="100%" height="100%" id="examplePDF" name="examplePDF"><param name=''src'' value=''example.pdf''/></object>
<script>
examplePDF.printWithDialog();
</script>
Puede tener que jugar con los identificadores / nombres. Usando adobe reader ...
Normalmente hago algo similar al enfoque dado por Cómo usar JavaScript para imprimir un PDF (eHow.com) , usando un iframe
.
una función para albergar el disparador de impresión ...
function printTrigger(elementId) { var getMyFrame = document.getElementById(elementId); getMyFrame.focus(); getMyFrame.contentWindow.print(); }
un botón para dar acceso al usuario ...
(
onClick
button
en unbutton
o oinput
o lo que desee)<input type="button" value="Print" onclick="printTrigger(''iFramePdf'');" />
un iframe que apunta a su PDF ...
<iframe id="iFramePdf" src="myPdfUrl.pdf" style="display:none;"></iframe>
Idea de bonificación n.º 1 : cree el iframe
y agréguelo a su página dentro de printTrigger();
para que el PDF no se cargue hasta que el usuario haga clic en el botón "Imprimir", ¡entonces el javascript puede atacar! el iframe y activa el cuadro de diálogo de impresión.
Idea adicional n . ° 2 : crédito adicional si desactiva su botón "Imprimir" y le da al usuario una pequeña barra de carga o algo así después de que hacen clic, para que sepan que algo está en proceso en lugar de hacer clic repetidamente.
Otra solución:
<input type="button" value="Print" onclick="document.getElementById(''PDFtoPrint'').focus(); document.getElementById(''PDFtoPrint'').contentWindow.print();">
Sí tu puedes...
Los archivos PDF tienen soporte Javascript. Necesitaba tener capacidades de impresión automática cuando se creó un PDF generado por PHP y pude usar FPDF para que funcione:
Si está utilizando la gema de prawn para Ruby on Rails para generar su PDF, puede usar la siguiente gema adicional para activar el diálogo de impresión:
Si sabe cómo están estructurados los archivos PDF (o si está dispuesto a pasar un poco leyendo las especificaciones), puede hacerlo de esta manera.
Utilice la Acción con nombre "Imprimir" en el campo OpenAction del objeto Catálogo; la acción "Imprimir" no está documentada, pero Acrobat Reader y la mayoría de los otros lectores importantes lo entienden. Un buen beneficio de este enfoque es que no recibe ninguna advertencia de JavaScript. Consulte aquí para obtener más información: http://www.gnostice.com/nl_article.asp?id=157
Para hacerlo aún más brillante, agregué un segundo URI de Acción, que ordena al lector que regrese a la página que originó la solicitud. Luego adjunté esta acción a la primera acción nombrada usando su campo Siguiente. Con la disposición de contenido establecida en "en línea", esto hace que cuando el usuario haga clic en el enlace de impresión:
- Abre Adobe Reader en la misma pestaña y carga el archivo
- Muestra de inmediato el diálogo de impresión
- Tan pronto como se cierra el cuadro de diálogo Imprimir (si presionan "Aceptar" o "Cancelar"), la pestaña del navegador vuelve a la página web.
Pude hacer todos estos cambios en Ruby con bastante facilidad usando solo los módulos File y IO; Abrí el PDF que había generado con una herramienta externa, seguí la refX a la sección Catálogo existente, luego agregué una nueva sección al PDF con un objeto Catálogo actualizado que contenía mi línea especial OpenAction, y también los nuevos objetos de Acción.
Debido a las características de revisión incremental de PDF, no tiene que hacer ningún cambio en los datos existentes para hacer esto, solo agregue una sección adicional hasta el final.
Utilizo named action
lugar de javascript porque JavaScript a menudo está deshabilitado, y si no lo está, da una advertencia.
Mi aplicación web crea un archivo postscript que luego se convierte con ghostscript a un pdf. Quiero que se imprima automáticamente porque el usuario ya ha hecho clic en imprimir dentro de mi aplicación. Con la información sobre acciones nombradas de @DSimon anterior, investigué cómo resolver esto. Todo se reduce para insertar la cadena /Type /Action /S /Named /N /Print
en el lugar correcto en el pdf.
Estaba pensando en escribir una pequeña utilidad, pero tiene que analizar el pdf para encontrar el nodo raíz, insertar /OpenAction
con una referencia de un objeto con la acción, y volver a calcular los byte-offset en xref.
Pero luego descubrí acerca de pdfmark que es una extensión de Postscript para expresar, en sintaxis postscript, modismos que se convierten a pdf por Adobes destilador o por ghostscript.
Como ya estoy usando ghostscript, todo lo que tengo que hacer es agregar lo siguiente al final de mi archivo PostScript:
%AUTOPRINT
[ /_objdef {PrintAction} /type /dict /OBJ pdfmark
[ {PrintAction} << /Type /Action /S /Named /N /Print >> /PUT pdfmark
[ {Catalog} << /OpenAction {PrintAction} >> /PUT pdfmark
y ghostscript creará la acción, lo vinculará y calculará los desplazamientos xref. (En postscript %
es un comentario y PrintAction
es mi nombre para el objeto)
Al mirar el PDF, veo que ha creado esto:
1 0 obj
<</Type /Catalog /Pages 3 0 R
/OpenAction 9 0 R
/Metadata 10 0 R
>>
endobj
9 0 obj
<</S/Named
/Type/Action
/N/Print>>endobj
1 0
es el objeto 1, la revisión 0 y el 9 0
es el objeto 9, revisión 0. En el pdf-trailer se dice que el objeto 1 es el nodo raíz. Como puede ver, hay una referencia del objeto 1, /OpenAction
para ejecutar la revisión 0 del objeto 9.
Con ghostscript es posible convertir un pdf a postscript (pdf2ps), agregar el texto anterior y convertirlo a pdf con ps2pdf
. Cabe señalar que la metainformación sobre el pdf se pierde en esta conversión. No he buscado más en esto.
si inserta el pdf en su página web y hace referencia a la identificación del objeto, debería poder hacerlo.
p.ej. en tu HTML:
<object ID="examplePDF" type="application/pdf" data="example.pdf" width="500" height="500">
en tu javascript:
<script>
var pdf = document.getElementById("examplePDF");
pdf.print();
</script>
Espero que eso ayude.