termica seleccionar puedo predeterminada imprimir impresora exportar desde descargar java jsf jboss seam

java - seleccionar - JSF/Seam: ¿Cómo descargar e imprimir un archivo PDF generado dinámicamente sin la intervención del usuario?



pdf java (2)

Tengo una aplicación web JSF / Seam que tiene una página con un formulario que, cuando se envía (botón presionado), hace que se cree dinámicamente un archivo PDF (en Java, en el lado del servidor) según la entrada del formulario. Actualmente, lo que estoy trabajando es que el PDF resultante se devuelve al navegador como una descarga de archivos, por lo que el usuario puede optar por guardarlo o abrirlo en Acrobat Reader para su posterior impresión.

Lo que me gustaría que ocurra es que el PDF se envía al navegador y se imprime (lado del cliente) sin más intervención del usuario (bueno, aparte de que aparece el diálogo de opciones de la impresora de Windows, sobre el cual no puedo hacer nada).

La solución parece estar basada en tener un iframe oculto en la página en la que se carga el PDF y luego llamar a .contentWindow.print() en el iframe . Sin embargo, no tengo idea de cómo obtener el PDF en el iframe a través de HttpServletResponse (en Java), y mucho menos cómo llamar automáticamente a print () en el iframe una vez que se ha cargado el pdf.


Sin embargo, no tengo idea de cómo obtener el PDF en el iframe a través de HttpServletResponse (en Java)

Deje que el <iframe src> apunte a un servlet URL que obtiene un InputStream del PDF y lo escribe en el OutputStream de la respuesta. Si es necesario, puede pasar las propiedades de beans JSF como parámetros GET adicionales para que pueda controlar la generación de PDF.

<iframe src="pdfServlet?foo=#{bean.foo}&amp;bar=#{bean.bar}"></iframe>

El método doGet() del servlet en cuestión puede verse así:

String foo = request.getParameter("foo"); String bar = request.getParameter("bar"); response.setContentType("application/pdf"); InputStream input = generatePdfSomehowBasedOn(foo, bar); OutputStream output = response.getOutputStream(); // Now just write input to output.

mucho menos cómo llamar automáticamente a print () en el iframe una vez que se ha cargado el pdf.

Enganche una función en <iframe onload> . Sin embargo, debes tener en cuenta los comportamientos específicos del navegador. Se pueden encontrar más sugerencias en esta pregunta: ¿Cómo imprimo un IFrame desde javascript en Safari / Chrome?


Esta no es una respuesta a su pregunta, pero puede pasar el cuadro de diálogo de impresión en cromo usando el modo "kiosco" (omitiendo el diálogo de impresión) ver:

¿Cómo deshabilitar la vista previa de impresión en Google Chrome ver 38?

Espero que eso funcione para usted :)

citado de la respuesta:

El argumento de línea de comandos --disable-print-preview funciona en la versión más nueva de Chrome, yo mismo la probé.