style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Imprimir PDF con servlet

Espero alguien pueda ayudarme con esto:

Tengo un servlet que me genera un pdf y me lo muestra en una pagina, pero no se como hacer para mandarlo a imprimir ya que no es un archivo fisico, solamente aparece en pantalla y tambien quisiera saber como cierro la pagina donde me muestra ese pdf, espero de verdad que alguien pueda ayudarme porque me urge mucho

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de benek

RE:

Si se muestra en pantalla seguramente debe existir el archivo físico, supongo que depende de la librería con la que se está generando, ¿sabes cuál es?

Una vez abierto el PDF no hay manera de invocar la impresión ya que quien tiene el control es Adobe Reader y no la aplicación.

La impresión de un PDF la puedes hacer con JPedal o PDF-renderer pero para ambos requieres la ubicación del archivo, lo más conveniente es que revises en dónde deja el servlet el archivo físico, ¿tienes manera de saber esto?

Saludos.

Imagen de dahaliz

ya intente buscar el archivo

ya intente buscar el archivo fisico pero no lo encuentro simplemente lo muestra en pantalla, no se si lo este metiendo en una carpeta temporal y de ser asi desconozco la carpeta

Imagen de JaimeItlzc

Que libreria usas?

Que libreria usas? podrias usar lo que comenta @benek para la impresión de PDF aqui te dejo algo sobre JPedal

JPedal

Imagen de dahaliz

estoy usando la API del

estoy usando la API del PDFWriter pero no tiene mucho que yo pueda usar

Imagen de JaimeItlzc

Aqui te dejo

Aqui te dejo las librerias para el manejo de PDF espero te sirvan Open Source PDF Libraries

Saludos.

Imagen de luxspes

IcePdf: No necesitas ruta fisica local, solo la URL

No es necesario conocer la ruta del archivo fisico, lo que tienes que hacer es escribir un Applet que traiga el PDF desde la URL en la que lo este exponiendo y lo mandes a imprimir. El applet lo podrias construir utilizando el API de IcePdf. Hasta podrias, si quieres hacerlo (es completamente opcional), pedirle al applet que te previsualice el documento.

Imagen de luxspes

JPedal vs IcePdf (o vs PDF-renderer)

La desventaja de JPedal frente IcePdf (o frente a PDF-renderer), es que JPedal es comercial, mientras que IcePdf (y tambien PDF-renderer) es gratuito (ademas de ser Opensource)

Imagen de JaimeItlzc

@Dahaliz

@Dahaliz como vas con el impresion de Pdf?

Alguna mejorar o sigue igual?

Saludos.

Imagen de dahaliz

opte por generar el archivo

opte por generar el archivo fisico pero no hallo aun como imprimirlo

Imagen de JaimeItlzc

Podrias hacer

Podrias hacer algo asi como esto!
Podrias chechar este post Como imprimir un PDF existente

O tambien te dejo este ejemplo:

import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.PrinterJob;
import javax.print.PrintService;
import org.jpedal.PdfDecoder;

public final void imprimir(final String fileName) {
    PdfDecoder pdf = null;
    try {
        // Obtengo el servicio de impresión, asigno el 0
        // aunque habría que ir mirando una a una si es la
        // impresora que queremos
        PrintService[] service =
            PrinterJob.lookupPrintServices();
        PrinterJob printJob = PrinterJob.getPrinterJob();
        printJob.setPrintService(service[0]);

        // Asigno el tamaño del papel (A4)
        Paper paper = new Paper();
        paper.setSize(595, 842);
        paper.setImageableArea(0, 0, 595, 842);
        PageFormat pf = printJob.defaultPage();
        pf.setPaper(paper);

        // Cargo el PDF para imprimir
        pdf = new PdfDecoder(true);
        pdf.openPdfFile(fileName);
        pdf.setPageFormat(pf);
           
        // Mando imprimir
        printJob.setPageable(pdf);
        printJob.print();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        pdf.closePdfFile();
    }
}

Saludos.

Imagen de JaimeItlzc

O tambien

O tambien podrias darle un vistazo aqui jPDFPrint

Saludos o postea tu codigo.

Imagen de ezamudio

Imprimir donde?

Lo quieres imprimir en el servidor, o en el cliente? Porque si metes codigo para imprimir el PDF despues que lo generaste, en el servlet, el archivo se imprimira en el servidor. Para que se imprima en el cliente tendrias que hacer algo con javascript y aun asi no tienes manera 100% certera de controlar lo que ocurre con el archivo una vez que llega al cliente (el cliente podria ni siquiera ser un navegador estandar sino un curl o wget etc)

Imagen de dahaliz

Con respecto a lo que

Con respecto a lo que comenta JaimeItlzc no he encontrado manera de conseguir el jPedal, por eso no lo he implementado, ademas de que no se si pueda implementarlo al 100% porque al parecer no es libre. Con respecto a lo que comenta ezamudio el PDF esta siendo generado en un servlet, ya intente mandarlo a imprimir mediante javascript del lado del cliente, y es funciona bien si es un proyecto simple, pero estoy trabajando con un Kiosko entonces este no me muestra el cuadro de dialogo de imprimir al menos, no se que otras opciones pueda tener

Imagen de JaimeItlzc

jPedal

Mira aqui te dejo este link espero te sirva de jPedal
jPedal.jar

Saludos.

IcePdf and JPedal both have OS and commercial versions

Both Icepdf and JPedal offer free (as in Open Source) and enhanced commercial offering. In JPedal you get a better viewer, the printing and extraction while in IcePdf you get much support for fonts. PDF-renderer is only available as a free open-source offering but it only supports a subset of PDFs.

Imagen de luxspes

Archivo Innecesario, Streams la respuesta.

Pero estoy trabajando con un Kiosko entonces este no me muestra el cuadro de dialogo de imprimir al menos, no se que otras opciones pueda tener

Yo participe en un proyecto precisamente para un Kiosco que requeria impresion de PDFs, toda la interfaz estaba en web, y los reportes se generaban en PDF... la solucion para imprimir los PDF? IcePdf en un applet. Te repito no es necesario (y probablemente ni siquiera recomendable, a menos que quieras que todas las impresiones se den en una impresora conectado al servidor y no en tus kioscos) generar el archivo, lo unico que tienes que hacer es generar el reporte en el servidor (con JasperReports o BIRT, o JFreeReports, o lo-que-te-guste), y hacer que este disponible mediante una URL determinada, y luego con el applet te conectas a la URL, la abres con un stream, y le pasas el stream a tu applet con IcePdf, y mandas a imprimir en tu kiosco.

iText

A mi me jala bastante bien el iText y no hace falta generarlo en disco duro para que te escupa el documento en un browser, aqui te va algo que espero se te ajuste bien a tu necesidad:

http://www.geek-tutorials.com/java/itext/servlet_jsp_output_pdf.php

Para todos los demas framewors me imagino que usas un objeto, intenta tener su Writer, OutputStream o algo que puedas llevarlo al response y usas el canal del response como salida y seguro que te lo imprime directo al navegador sin pasarlo por el disco duro, finalmente para el disco duro usaste el flujo de salido solo que se lo asignas seguramente a un flujo de salida para archivos... asocialo con el flujo de salida del rsponse.

Ejemplo de lo que te digo esta en la liga que te escribo:
    PdfWriter.getInstance(document, response.getOutputStream());

donde document es el objeto que encapsula la estructura del PDF y response.getOutputStream() es el flujo de salida donde sera escrito el PDF. Por lo tanto tambien puedes hacer esto:
    PdfWriter.getInstance(document, new FileOutputStream(docPdf));

Saludos!

Http Headders

Puede controlarse en las cabeceras del response que es un 'Content-type: application/pdf' para que reconozca directamente que se esta respondiendo con un PDF y para forzarlo a descargar es el tipico "Content-Disposition attachment" es verdad que es util controlarlo con javascript que manda a llamar al PDF, yo lo que hago es lanzar una ventana nueva que solo le responde un action o un servlet que escupe el PDF y se acabo, si lo llaman de un curl o wget o del navegador, siempre obtendran su PDF

Imagen de witho

Client Side Printing

Para luxspes ,

estoy desarrollando una applicación Java para un kiosko electrónico y necesito hacer una impresión en el cliente de un PDF creado en Java (en el servidor). He leído que tu has desarrollado algo parecido con applets y IcePDF, estoy mirando como hacerlo y si me pudieras echar una mano en este tema lo agradecería mucho.

Mil gracias.

Imagen de CesarAlducin

Ayuda,Con la misma Situacion

yo estoy tratando de generar un archivo pdf del lado del servidor y que lo pueda visualizar el cliente, el problema es que no me marca ningun error mi Servlet pero tampoc me genera nada, me podrian hechar la mano con mi codigo por fa.

Gracias, por cierto estoy usando la libreria iText

import java.io.IOException;
import java.util.Date;
import java.io.File;
import java.io.OutputStream;
import java.io.FileOutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfPageEventHelper;
import com.lowagie.text.pdf.PdfWriter;

public class GeneraWeb extends HttpServlet {

public void doGet (HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException
{
Document document = new Document(PageSize.A4, 50, 50, 100, 72);
try {
// Paso 2: Establecemos el ContentType y creamos una instancia del Writer
response.setContentType("application/pdf");
OutputStream file = new FileOutputStream(new File("C:\\Test.pdf"));
PdfWriter writer = PdfWriter.getInstance(document, response.getOutputStream());
writer.setPageEvent(new PdfPageEventHelper());
// Paso 3
document.open();
// Paso 4
document.add(new Paragraph("Hello World"));
document.add(new Paragraph(new Date().toString()));
}
catch(DocumentException de) {
de.printStackTrace();
System.err.println("document: " + de.getMessage());
}
// Paso: Cerramos el ‘document (el ‘outputstream’ se cierra automáticamente internamente)
document.close();
}

public void doPost (HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException
{

doPost(request,response);
}

}

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">