martes, 28 de julio de 2009

Generar un PDF en Java usando iText JAR






 El propósito de este post es generar un pdf sencillo mediante Java.

Descargar la librería.

Nos vamos a la página http://www.lowagie.com/iText/download.html y descargamos iText core. La importamos en nuestro proyecto yendo al menú Project / Properties / Java Build Path / Libraries / Add External JARs ... y seleccionamos dicho paquete

El código.

Se trata de una aplicación muy sencilla que escribirá en el pdf un párrafo con un saludo y otro con la fecha actual.
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;

import com.lowagie.text.Document;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;

public class GeneratePDF {

    public static void main(String[] args) {
        try {
            OutputStream file = new FileOutputStream(new File("C:\\Test.pdf"));

            Document document = new Document();
            PdfWriter.getInstance(document, file);
            document.open();
            document.add(new Paragraph("Hola a todos!"));
            document.add(new Paragraph(new Date().toString()));

            document.close();
            file.close();

        } catch (Exception e) {

            e.printStackTrace();
        }
    }
}

Fuentes.


http://viralpatel.net/blogs/2009/05/20-useful-java-code-snippets-for-java-developers.html




148 Comentarios:

Unknown dijo...

Buen aporte me sirvio gracias

Felipe Martínez D. dijo...

Hola Gilberto.
Gracias a tí por comentar!

Anónimo dijo...

Gracias Parcero, Saludos desde Colombia

Felipe Martínez D. dijo...

De nada Parcero, para eso estamos.
Saludos!

Anónimo dijo...

disculpa la molestia pero trato de correr el ejemplo y me da error, en PdfWriter....

Felipe Martínez D. dijo...

Buenas.

Debes importar el paquete iText JAR como explico al principio:

menú Project / Properties / Java Build Path / Libraries / Add External JARs ... y seleccionamos dicho paquete.

Asegúrate que tienes en tu código todos los import.

Saludos.

Carlita dijo...

Alguien sabe como agregar líneas si ya se escribió una vez el pdf o eso no se puede? gracias

Felipe Martínez D. dijo...

Hola Carlita. Yo creo que sí se puede. Voy a hacer unas pruebas y ya te comento.

Saludos!

Felipe Martínez D. dijo...

Hola Carlita.

He encontrado una solución, que si bien no es exactamente lo que pides, puede servirte bastante. Se trata de un ejemplo en el que mezclan dos pdfs y genera otro con el resultado. Lo puedes encontrar aquí:

http://www.mindfiresolutions.com/Java-Merging-multiple-PDFs-into-a-single-PDF-using-iText-671.php

Espero que te sea de ayuda.

Anónimo dijo...

Excelente aportación sencilla y prática. GRACIAS

Felipe Martínez D. dijo...

Gracias a tí por comentar. Me alegro de que te sirviera.

Saludos.

Unknown dijo...

quisera saber como puedo hacer un archivo PDF pero utilizando la informacion que tengo en una base de dato gracias saludos!!

Felipe Martínez D. dijo...

Hola adiorock_182.

Para que te pueda ayudar, debes especificar qué tipo de base de datos estás utilizando y cómo te conectas a ella. De todas formas, si puedes obtener la información de la BD desde tu aplicación Java, crear el PDF es inmediato, sólo debes seguir los pasos descritos en este artículo.

Ya me contarás si has solucionado tu duda. Si tienes otros inconvenientes, no dudes en preguntarme.

Saludos.

Aneita dijo...

Hola Alguien sabe si puedo crear un PDF con esta libreria utilizando Crystal Report?, Saludos!

Felipe Martínez D. dijo...

Hola Aneita.

No he utilizado nunca Crystal Report, pero por lo que he leido, dicha herramienta permite exportar el informe como PDF.

De todas formas iText JAR permite generar un PDF, apartir de cualquier origen de datos, siempre que éstos puedan ser obtenidos desde la aplicación Java.

Saludos.

Anónimo dijo...

Hola, alguien sabe como configurar el PDF o alguna manera de solucionar el problema que encuentro al generarlo, ya que si escribo mas de 6 lineas de texto en una area de texto al generar el PDF se sobre escribe dicho texto con el pie de pagina que tengo y me remueve el encabezado de la pagina siguiente.

Agradeceria cualquier sugerencia
Saludos!

Felipe Martínez D. dijo...

Hola.

Si quieres envíame el texto e intento ayudarte.

Saludos.

Anónimo dijo...

Hola!
Alguien podria ayudarme con algun ejemplo, quisiera generar un PDF e imprimirlo , sin necesidad de ir y tener que abrir el archivo.

Saludos!

Anónimo dijo...

Hola Felipe, envie a tu correo un ejemplo de lo que ocurre al sobreescribir el texto espero me puedas dar una sugerencia para corregirlo.

Saludos!

Felipe Martínez D. dijo...

Hola. Contesto a los dos últimos comentarios:

Penúltimo comentario:
Si quieres generar un PDF en imprimirlo sin abrir el archivo, entonces no creo que sea necesario que crees el archivo sea PDF. Si es una aplicación web, puedes generar un archivo HTML y mediante Javascript, imprimirlo. Si es una aplicación de escritorio, puedes imprimir directamente el texto, como se explica en este ejemplo: http://chuwiki.chuidiang.org/index.php?title=Imprimir_desde_java .

Último comentario:
Te he contestado en tu correo.

Saludos a los dos y gracias por comentar.

Anónimo dijo...

hey brother estoy intentandolo pero me sale error en los impor com y ya le intale los jar del itext pero nada ayudenme plis

Felipe Martínez D. dijo...

Hola.

¿Estás utilizando Eclipse u otro IDE? ¿Has importado la librería tal y como se describe en el apartado "Descargar la librería"? ¿Qué import es el que te da el error?

Saludos.

Anónimo dijo...

por lo que mas quieran diganme como agregar el jar ,, porq lo descargo y me aparece como rar
o q onda

Felipe Martínez D. dijo...

Hola.

He estado mirando la última versión (la 5.1.0) y efectivamente, está comprimido como un zip. Debes descomprimirlo y verás que contine el archivo itexpdf-5.1.0.jar , que es el que nos interesa. Impórtalo en Eclipse tal y como se explica en este post.

Espero que te sirva.

Saludos.

Anónimo dijo...

Como hago para agregar formato de tabla a los datos agregados en el pdf? Espero una pronta respuesta.
Saludos

Felipe Martínez D. dijo...

Hola.

Aquí hay un artículo que aunque está en inglés, explica de forma muy sencilla cómo crear tablas con iText:

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

Si tienes cualquier duda, indícamelo e intentaré ayudarte.

Saludos.

Armando dijo...

Hola Felipe muy bueno el aporte, pero tengo una duda que te agradecería me ayudes a esclarecerla, el problema es que tengo que montar plantillas con campos vacíos para que el cliente ingrese datos y finalmente se genere un pdf con los datos llenos como crees que puedo lograrlo ?? se puede con iText ??
Gracias adelantadas...

Felipe Martínez D. dijo...

Hola Armando.

Para hacer formularios PDF necesitarás la versión Pro del Acrobat de Adobe. He encontrado un ejemplo que aunque está en inglés puede serte de ayuda:

http://www.mindfiresolutions.com/Fill-a-PDF-form-using-iText-in-NET-683.php

Ahí te explica cómo deberás crear los campos en el PDF para que posteriormente desde tu aplicación Java se puedan rellenar. Espero que te sea útil. Si tienes alguna duda, coméntamelo.

Anónimo dijo...

buenas tarde me gustaria saber como puedo generar el pdf de forma horizontal para que cuando se visualize ya se obsrve de esa forma gracias

Felipe Martínez D. dijo...

Hola.

He encontrado esta solución:

Rectangle a4 = PageSize.A4;
Rectangle a4Landscape = a4.rotate();
Document doc = new Document(a4Landscape);

Si no te funciona, comentamelo e intentamos solucionarlo.

Saludos.

Anónimo dijo...

me pueden ayudar

necesito mandar a ejecutar el pdf, este ya es uno existente.

me podrian ayudar??

Felipe Martínez D. dijo...

Hola.

He encontrado un ejemplo sencillo y claro en el que puedes ver cómo se modifica un PDF ya existente usando la librería iText JAR. Échale un vistazo y me comentas si te ha sido útil:
http://tutorials.jenkov.com/java-itext/modifying-pdf-documents.html

Saludos y gracias por comentar.

Nacho dijo...

Estimado, excelente aporte, yo utilizo NetBeans como IDE y tengo algunos problemas para los imports de com.lowagie...
Quizás haya importado mal el jar con los paquetes del iText.
Podrias darme una mano?
muchas gracias

Felipe Martínez D. dijo...

Hola Nacho.

Dime exáctamente qué error te aparece. ¿Has descargado el paquete iText? ¿Cómo lo has importado en NetBeans?. En este artículo sólo explico como importarlo en Eclipse (es el que yo utilizo), pero aquí hay un tutorial de cómo hacerlo en Netbeans:
http://www.apuntes.delibertad.com/netbeans/agregar-librerias-a-un-proyecto-de-netbeans/

Siento no haber contestado antes.

Saludos.

Anónimo dijo...

Hola Disculpa a mi me aparece el mismo error que a Nacho lo he importado a netbeans asi como lo dice el tutorial que has puesto. este es el error:

Uncompilable source code - package com.lowagie.text does not exist

Felipe Martínez D. dijo...

Hola.

Perdona por la tardanza en contestar. Parece que es un problema a la hora de importar el paquete iText-jar. ¿Cómo lo has importando? ¿Qué IDE utilizas, Eclipse, NetBeans, ...?. Dame más detalles para que pueda ayudarte.

Saludos.

Anónimo dijo...

Tengo el mismo problema que nacho, uso netbeans 7.0 y la version 5.1.2 de itex. Cuando baje el itex viene en un zip con varios jar, el que agregue a mi proyecto fue itextpdf-5.1.2.jar pero nada, tuve que regresar a utilizar la vercion iText1.3.1.jar

Felipe Martínez D. dijo...

Hola.

Este ejemplo lo hice con itext-1.3.jar y vosotros lo estaréis haciendo con la versión nueva, que es la 1.5 . He estado mirando la versión nueva y han cambiado los directorios y por eso os dan esos errores en los import. Así que habría que cambiar los import, sustituyendo estas tres líneas:

import com.lowagie.text.Document;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;


Por éstas líneas:


import com.itextpdf.text.Document;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;



Por favor, probadlo y decidme si lográis solucionar esos errores.


De todas formas, los que quieran utilizar la versión 1.3 (no habría que modificar el código), el jar está aquí:
http://www.findjar.com/jar/itext/jars/itext-1.3.jar.html

Saludos.

Anónimo dijo...

Cordial saludo Felipe, saludos desde Colombia.

Una consulta, como se puede hacer para que no se separen las tablas al final de la pagina, estoy intentando hacer un documento pero al momento que la tabla o el Paragraph queda casi al final de la tabla, se me divide y no quiero eso, y no puedo hacer una plantilla porque estoy generando un documento desde una base de datos y el tamaño de la tabla o del Paragraph es variable de acuerdo a cada registro.

Ejemplo:

estoy tratando de evitar que el texto se me
__________ final de la pagina ___________
__________ inicio de la pagina ___________
separe de una pagina a otra, o con tablas

Felipe Martínez D. dijo...

Hola.

Si tenemos varias tablas que queremos añadir al documento, iText hace lo siguiente: si su tamaño es menor que el tamaño de la página, no se hace salto de página. Pero si una tabla no se ajusta a la página, se inserta un salto de página.

En tu caso, al no conocer el tamaño de las tablas de antemano, se hace muy complicado ajustar las tablas a la página sin que queden espacios en blanco.

Mi consejo sería que previamente trabajaras con tablas que contengan texto de prueba y fijes su tamaño al tamaño de la página. Luego trataría el texto que recibes de la base de datos para que su longitud sea similar al texto de prueba.

Espero que te sirva.

Saludos.

Anónimo dijo...

Buenas, te comento. He realizado los pasos tal y como pones y me da error. Me he descargado iText 5.1.3. Al descomprimirlo me salen 6 jar. Siguiendo la ruta que pones he añadido los 6, pero cuando coloco el codigo salen errores en los import y por consiguiente en el resto del codigo. Estoy utilizando eclipse, q puedo hacer??

Felipe Martínez D. dijo...

Hola.

Lo acabo de probar y funciona correctamente tal y como dije en un comentario anterior, es decir haciendo los import así:

import com.itextpdf.text.Document;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;


Sólo tienes que importar itextpdf-5.1.3.jar . Inténtalo y me comentas qué tal te fue.

Saludos.

Anónimo dijo...

Tengo un problema con el itext y es que libero el .jar y me sale una excepción
Exception in thread "main" java.lang.NoClassDefFoundError: com/itextpdf/text/DocumentException
Caused by: java.lang.ClassNotFoundException: com.itextpdf.text.DocumentException
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)

No se que hacer porque el programa muere cuando pasa esto, agredecería cualquier ayuda

Felipe Martínez D. dijo...

Hola.

Ese error ocurre porque no has importado correctamente el fichero jar . También puede ser que estés utilizando la versión 1.5 de itext-jar y en ese caso hay que hacer los imports de ésta forma:

import com.itextpdf.text.Document;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;


Espero haberte ayudado, si tienes alguna duda, puedes comentármelo.

Saludos.

Anónimo dijo...

Hola!
Primeramente lo felicito por este excelente blogs, es bantante interesante y dinámico.

soy nuevo en java y en iText, he estado investigando y parece que es la herramienta que necesito para realizar lo que quiero, pero no se como hacerlo. He realizado una aplicación bastante pequeña para que por favor me ayuden,
se trata de dos interfaz en swing, la primera permite registrar datos a una BD en mysql, y la otra permite la información guardada en la BD pero sólo un registro a la vez, ella tiene un boton Exportar a PDF, ¡y es alli donde quiero que me ayuden! de manera que cuando se seleccione ese boton la información consultada pueda ser exportada a un archivo pdf y asi poder imprimirla... De antemano les agradesco su ayuda y acontinuación adjunto todo lo necesario para su ejecución.


ESTRUCTURA DE LA BASE DE DATOS


CREATE DATABASE bd_registro;
USE bd_registro;
CREATE TABLE datos (cedula INTEGER NOT NULL PRIMARY KEY, nombre VARCHAR (20) NOT NULL, apellido VARCHAR (20) NOT NULL);
INSERT INTO datos (cedula, nombre, apellido)VALUES (123456, 'Carlos', 'Blanco');

Anónimo dijo...

Lo envie en varios comentarios por el limite de palabras para publicar en este blogs

David Barrera dijo...

Hola buenas noches!! oye fijate que ando buscando generar el pdf y mostrarlo en otra pestaña o ventana de el explorador, esto con tal de incluirlo en una aplicación web, sabes de alguna manera de generarlo como tu lo estás haciendo y luego mandarlo a llamar en html o jsp, gracias

Felipe Martínez D. dijo...

Hola.

Para Anónimo: He tenido que eliminar algunos de tus comentarios, puesto que la parte de comentarios de este post resultaba demasiado larga, y la gente puede perderse entre tanto código. Pero no te preocupes, me los he copiado. Para que te pueda ayudar, indícame exactamente qué texto es el que obtienes de tu base de datos.

Para David: Yo generaría el PDF tal y como explico aquí y luego en la página web pondría un enlace a ese pdf de tal forma que al pinchar se abriera en otra ventana, algo así:

a href="mipagina.com/mipdf">Abrir PDF</a

(añadiendo target="_blank" si quieres abrir el PDF en otra página, aunque esto depende de la configuración del navegador y su forma de abrir PDFs).

Espero que te sirva y si tienes dudas, no dudes en preguntarme.

Saludos a los dos.

Anónimo dijo...

buenas noche soy de vzla trabajo con itext tengo un problema estoy pasando una plantilla ya creada y si se exede en una cantidad que no se cual es me dispara un error al generar el pdf lo que hago es borrar hasta que sale la pagina pdf que podria hacer gracias

Felipe Martínez D. dijo...

Hola.

¿Cómo estás pasando esa plantilla? ¿Cuántos caracteres o páginas tiene esa plantilla y apartir de cuando encuentras ese error?. Contéstame a estas preguntas para que pueda ayudarte. Hasta la versión iText 0.99 la limitación estaba en 8192 páginas, pero dudo que ésto sea lo que provoca tu problema.

Saludos.

Anónimo dijo...

hola muy buen aporte sigue asi

Felipe Martínez D. dijo...

Hola. Muchas gracias.

ronsalas dijo...
Este comentario ha sido eliminado por el autor.
ronsalas dijo...

Hola amigos desde costa rica les saludo y les consulto

1. como hacer para agregar las imagenes desde esta ruta "c:temp\xxx\xxx.jpg" y adjuntarlas en el pdf.

2. como insertar un salto de pagina con itextpdf.

agrego un poco de codigo en donde traigo una imagen pero desde la carpeta del projecto y no desde otra ruta.

try
{
Image grafico_1 = Image.getInstance("imagen/Grafico_2.jpg");
grafico_1.scalePercent(40);
grafico_1.setAlignment(Chunk.ALIGN_MIDDLE);
documento.add(grafico_1);
} catch ( IOException e )
{
e.printStackTrace();
}

Felipe Martínez D. dijo...

Hola ronsalas.

Te recomiendo que los archivos como imágenes o audio los referencies de forma relativa. Puedes referenciar los archivos apartir del classpath mediante getClass().getResource(path). Mira este ejemplo:

http://www.devx.com/tips/Tip/5697

Para los saltos de página puedes utilizar document.newPage(). En la siguiente página se explica muy bien:

http://itextpdf.com/examples/iia.php?id=99


Saludos.

Anónimo dijo...

Tengo problema cuando exporto la tabla es demaciado grande y no se como ponerla mas grande, porque con esto
int[] medidacelda = {200, 70, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65};
tabla.setWidths(medidacelda);
le doy tamaño a las celdas pero me hace falta poner la tabla mas grande, pues tengo varios valores.

Felipe Martínez D. dijo...

Hola.

Para ayudarte tendría que ver tener los valores que quieres introducir en las celdas y como los estás introduciendo en ellas. ¿No se soluciona dando un tamaño mayor a las celdas?. ¿Has probado la función setTotalWidth para ajustar la anchura total de la tabla?.

Saludos.

Valeria dijo...

Saludos, por favor me podría ayudar quiero poner un encabezado en un documento PDF. El encabezado es de dos líneas: la 1era una imagen y la 2da un texto.

Es factible con esta librería?.

Gracias.

Felipe Martínez D. dijo...

Hola Valeria.

Para añadir un título o encabezamiento puedes utilizar ésto:

document.addTitle("Mi título de prueba");

Para añadir una imagen puedes utilizar este código:
Image img = Image.getInstance("imagen.jpg");
img.setAbsolutePosition(100, 650); // Colocación de la imagen

Si quieres más información, puedes revisar los siguientes enlaces:
http://www.avajava.com/tutorials/lessons/how-do-i-write-to-a-pdf-file-using-itext.html
http://www.geek-tutorials.com/java/itext/itext_image.php


Si tienes alguna duda puedes preguntarme.

Saludos.

Valeria dijo...

Gracias por la respuesta, pero me refería con encabezado a un titulo que se repite en todas las hojas. La función addTitle agrega la metadata del archivo.

Yo tengo agregado en el cuerpo del documento imágenes y texto, pero necesito 2 lineas(imagen y texto) que se repitan en todas las páginas de mi archivo.

Gracias.

Felipe Martínez D. dijo...

Hola Valeria, te entendí mal.

He encontrado un ejemplo en el que se crea una plantilla que incluye un ecabezamiento y un pie. De tal forma que cuando se aplica esta plantilla a un documento, se añaden dichos elementos.


import java.io.*;
import com.lowagie.text.*;
import com.lowagie.text.pdf.*;

public class CreatePDF{
public static void main(String arg[])throws Exception{
try{
Document document=new Document();
FileOutputStream fos=new FileOutputStream("C:/header-footer.pdf");
PdfWriter writer = PdfWriter.getInstance(document, fos);
document.open();
Image image1 = Image.getInstance("C:/image1.jpg");
Image image2 = Image.getInstance("C:/image2.jpg");

image1.setAbsolutePosition(0, 0);
image2.setAbsolutePosition(0, 0);

PdfContentByte byte1 = writer.getDirectContent();
PdfTemplate tp1 = byte1.createTemplate(600, 150);
tp1.addImage(image2);

PdfContentByte byte2 = writer.getDirectContent();
PdfTemplate tp2 = byte2.createTemplate(600, 150);
tp2.addImage(image1);

byte1.addTemplate(tp1, 0, 715);
byte2.addTemplate(tp2, 0, 0);

Phrase phrase1 = new Phrase(byte1 + "", FontFactory.getFont(FontFactory.TIMES_ROMAN, 7, Font.NORMAL));
Phrase phrase2 = new Phrase(byte2 + "", FontFactory.getFont(FontFactory.TIMES_ROMAN, 7, Font.NORMAL));

HeaderFooter header = new HeaderFooter(phrase1, true);
HeaderFooter footer = new HeaderFooter(phrase2, true);
document.setHeader(header);
document.setFooter(footer);
document.close();
System.out.println("File is created successfully showing header and footer.");
}
catch (Exception ex){
System.out.println(ex);

}
}
}


La URL de donde he sacado ese ejemplo es ésta:
http://www.roseindia.net/answers/viewqa/Java-Beginners/20666-Adding-Image-to-Header-and-footer-at-generating-Itext-PDF.html

Espero que te sirva, si no es así, coméntamelo.

Saludos.

Sistemas Distribuidos dijo...

Muy buen aporte, pero si tengo en un jsp y digamos un link q diga GENERAR PDF y q me genere lo q se muestra en mi jsp por ejemplo que se muestre una consulta que hice a oracle como seria?

Felipe Martínez D. dijo...

Hola jml.

Se haría igual. Debes realizar la consulta y su salida la formateas para formar el texto. Posteriormente añades el texto al archivo. Te pongo un ejemplo.



// Realizamos la consulta y obtenemos el texto
QueryString = "SELECT * from ciudades";
rs = statement.executeQuery(QueryString);
String cadena = "Las ciudades candidatas son: ";
while (rs.next()) {
cadena = cadena + " " +rs.getInt(1)"\n");
}
// Se añade el texto al archivo
document.add(new Paragraph("Hola a todos!"));


Espero que te sirva.

Saludos.

carniceria.ingrato dijo...

donde encuentro e archivo de jasper.jasper me aparece un error

Felipe Martínez D. dijo...

Hola.

Dime exactamente qué error te aparece para que te pueda ayudar. ¿Estás probando a hacer el ejemplo de este post?. En caso de no ser así, muéstrame tu código.

Saludos.

Cemail dijo...

Hola tengo una duda espero me puedas ayudar, ya genero el archivo pdf ahora lo que busco es que me pregunte en que lugar lo kiero guardar a travez de una ventana es decir no kiero indicar desde codigo en donde se va a guardar el archivo. agradeceria mucho tu ayuda ya que soy nueva en esto de los reportes en pdf. Gracias :)

Anónimo dijo...

hola que tal primero q nada muchas felicidades por todo el entusiasmo que le pones al tema yo tengo un error de la ruta cuando se crea el pdf uso netbeans y tengo este error:

java.io.FileNotFoundException: C:\Users\ARTHUR\Documents\NetBeansProjects\vinos (Acceso denegado)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.(FileOutputStream.java:212)
at java.io.FileOutputStream.(FileOutputStream.java:165)
at clases.GeneratePDF.main(GeneratePDF.java:22)

que es lo que tengo q corregir segun yo es un import gracias por la ayuda!

Anónimo dijo...

jaja ya resolvi mi problema solo cambie la ruta del pdf por otra fuera de C por que tengo mi discoduro protejido y no se como darle permisos a netbeans pero cambien a cualquier otra ruta fuera de C y listo bye!

david dijo...

Hola,

gracias por el blog sobre este asunto.

Quería saber si es posible a partir de un fichero excel creado usando jxl y java, convertirlo con iText en un pdf??

Salu2

verovega dijo...

Muy buen aporte!!!!! Gracias por compartirlo, queria saber como hago para abrir el pdf una vez generado, para poder imprimirlo???
Nuevamente gracias!!!!

Felipe Martínez D. dijo...

@Cemail:

Puedes utilizar la clase JFileChooser (http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/JFileChooser.html) que te permite lanzar una ventana emergente para guardar el archivo. He encontrado este ejemplo que creo que te puede

ayudar:

http://www.exampledepot.com/egs/javax.swing.filechooser/createdlg.html

Si encuentras dificultades o tienes alguna duda, coméntamelo.

Los demás comentarios los responderé en breve.

Saludos.

Felipe Martínez D. dijo...

Hola.

@Anónimo:
Me alegro de que encontraras la solución.


@david:
No me había hecho esa pregunta, así que he investigado un poco y parece que se puede hacer utilizando la API de OpenOffice. En el siguiente enlace se explica cómo exportar a PDF con esa API:

http://wiki.services.openoffice.org/wiki/API/Tutorials/PDF_export


@verovega:
Mi consejo es el siguiente:
Si quieres generar un PDF e imprimirlo sin abrir el archivo, entonces no es necesario que crees el archivo PDF: - Si es una aplicación web, puedes generar un archivo HTML y mediante Javascript, imprimirlo.
- Si es una aplicación de escritorio, puedes imprimir directamente el texto, como se explica en este ejemplo: http://chuwiki.chuidiang.org/index.php?title=Imprimir_desde_java .


Si os surge alguna duda o encontráis alguna dificultad, comentádmelo.

Saludos a todos.

GuateSim dijo...

Hey Que tal excelente Aporte , toy usando Netbeans, ya importe las librerias, con el tutorial que diste, e hizo los importes correctos estoy usando Itex5.3.0, cuando lo corro me saca este problema y el programa para, me podrias ayudar, Grcias

java.lang.NoClassDefFoundError: com/itextpdf/text/Element
Caused by: java.lang.ClassNotFoundException: com.itextpdf.text.Element
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: Formularios.FenixInicio. Program will exit.
Exception in thread "main" Java Result: 1

GuateSim dijo...

Sabes ya me di cuenta que el error seta aqui

document.add(new Paragraph("Hola!"));
pero no entiendo porque, si lo comento, el programa corre perfecto, pero no escribe nada en el pdf

ahora mi otro problema es que mis 3 discos estan protegidos, y noc como darle permiso para que neatbeans escriba en los discos

Felipe Martínez D. dijo...

Hola GuateSim.

Si comentas esa línea no se va a escribir nada en el PDF, ya que ésa es la que se encarga de añadir el texto que queremos que aparezca en el PDF.

¿A qué te refieres con que tus discos están protegidos?. Intenta crear el PDF y guardarlo en un directorio que no esté protegido contra escritura.

Saludos.

Anónimo dijo...

hola, gracias por hablar de tema, espero que me puedas ayudar estoy intentando calgar una imagen para android con:
Image foto = Image.getInstance("foto.jpg");
y me sale el error:
Excepcion:java.oi.FileNotFoundException:/foto.jpg(No such file or directory)
un saludo

Felipe Martínez D. dijo...

Hola.

Por favor, utilizad los comentarios de este post para preguntar acerca de la generación de un archivo PDF en Java. Si tienes dudas relacionadas con otros asuntos de la programación, puedes enviarme un mail a mi correo electrónico.

Saludos.

Anónimo dijo...

perdona no me explique bien necesito insertar la imagen en un archivo pdf, pero parece que no encuentra el directorio donde esta. gracias.

Felipe Martínez D. dijo...

Hola.

Te pongo un pequeño ejemplo que puse anteriormente para insertar una imagen:

Para añadir una imagen puedes utilizar este código:
Image img = Image.getInstance("imagen.jpg");
img.setAbsolutePosition(100, 650); // Colocación de la imagen

Quizás estés poniendo la ruta de la imagen incorrectamente. Dime donde se encuentra la imagen y te indicaré como tienes que modificar el código.


Si quieres más información, puedes revisar los siguientes enlaces:
http://www.avajava.com/tutorials/lessons/how-do-i-write-to-a-pdf-file-using-itext.html
http://www.geek-tutorials.com/java/itext/itext_image.php

Saludos.

Anónimo dijo...

gracias por contectar, la imagen la tengo en la carpeta "drawable-hdpi" de la carpeta "res", quizas no tenga bien instalada la libreria itext, porque he probado los ejemplos de los enlaces que me pones y parece que "com.lowagie.text.Image" me da error, un saludo.

Anónimo dijo...

hola, soy nueva en esto de reportes con itext y me gustaria saber como puedo crear una tabla dentro del pdf con celdas combinadas de distintas formas, de antemano agradezco la ayuda :D

Unknown dijo...

hola!! muy buen aporte, me ayudó y mucho. Mi consulta es por el tema de las imágenes. ¿Se pueden colocar imágenes utilizando esta librería?

Chris dijo...

hola quiero modificar un archivo pdf
lo que quiero es en base al formato del pdf agregar informacion en un area determinado como haria eso??
de antemano gracias

Felipe Martínez D. dijo...

Buenos días.

@fjbalsamo Sí se pueden insertar imágenes con esta librería, puedes leer mi comentario del día 17 de abril de 2012 18:58, en él hablo de ésto.

@Anónimo Sí se pueden hacer tablas con celdas combinadas. Se utilizaría en el caso de combiarn columnas el método PdfPCell.setColspan(2). Puedes ver un ejemplo en la siguiente URL: http://www.geek-tutorials.com/java/itext/itext_table.php

@Chris Hay un artículo en el que se explica de manera clara y sencilla cómo añadir contenido a un PDF existente. Está en ingĺes pero es fácil de seguir:
http://tutorials.jenkov.com/java-itext/modifying-pdf-documents.html

Saludos a todos.

Anónimo dijo...

Hola estoy trabajando con itext y creo una plantilla con todo su encabezado y pie de pagina, bueno genero una tabla utilizando itext para tenerlo como plantilla en mi pdf el asunto es que cuando jalo los datos de la BD pues como pueden ser datos que crecen con el tiempo por decir los años pueden seguir en aumento de acuerdo con sus valores. Bueno esos datos si se agregan pero lo que pasa es k las celdas se hacen mas pequeñas y nose ajustan al tamaño d elos datos y estos a la vez se ajustaran al limite de la hoja,como hacer k las celdas esten fijas y lleguen solo asta el limite de los margenes y una vez sobre pasado eso se pase a la siguiente hoja sin perderse el formato de la tabla.

Las columnas de la tabla aumentan dinamicamente , lo que quiero es que si estas columnas no caben en la hoja se salten a la siguiente pero sin afectar el formato de la tabla y continúen con los datos asta donde se quedaron.

Espero me puedas o puedan ayudar de antemano muchas gracias.

Felipe Martínez D. dijo...

Hola.

Por favor, muéstrame un estracto de tu código para que pueda ayudarte. Al tratarse de una cuestión muy específica y compleja, quizás pueda interesarte hacer tu pregunta en el foro oficial de iText: http://support.itextpdf.com/forum

Saludos.

Anónimo dijo...

Tengo un problema y no se si os ocurre lo mismo: yo creo varios parrafos justificados, pero el problema me ocurre cuando 1 parrafo se queda entre 2 paginas que el texto de la 1º página me lo justifica pero el de la segunda página no me lo justifica (me lo alinea a la izquierda).
Si alguien tiene la solucion podría mandarmelo a floren-82@hotmail.com

Un saludo.

Anónimo dijo...

hola a todos alguien me prodria ayudar generar un pdf con jsp y servlet en java utilizando lo libreria itext se los voi agradecer mucho

Felipe Martínez D. dijo...

Hola.

A mí no me ha pasado, pero si alguien sabe como solucionarlo, por favor, que lo indique.

Saludos.

Anónimo dijo...

quisera saber como puedo hacer un archivo PDF pero utilizando la informacion que tengo en una base de datos sqlite con una tabla clientes(id,nombre,domicilio,etc...) donde ya inserto datos como los saco de ahi para generar un pdf la aplicacion es para hacer una factura gracias saludos!!

Felipe Martínez D. dijo...

Hola.

El primer paso sería obtener los datos de sqlite. No conozco tu aplicación, así que no sabría decirte cómo obtenerlos. Puede ser haciendo una consulta sql o utilizando algún método ya existente. Si me muestras tu código podré ayudarte de forma más precisa.

Una vez que tengas los datos, insertarlos en el PDF es un paso sencillo, sólo tendrás que utilizar los métodos que muestro en este artículo.

Saludos.

Unknown dijo...

Hola..Buen aporte..Saludos desde México.

ESpero y me pueda apoyar con la duda que tengo..
estoy mandando a imprimir al pdf:
una cadena ejemplo "Una vez que tengas los datos"
pero me interesa que solamente la palabra tengas este en negritas saludos..

Unknown dijo...

Hola, soy un novato en todo esto, pero estoy muy interesado en el tema y quisiera saber si puedo utilizar esto para descifrar un PDF protegido contra copia, impresión y hasta visualización que no sea en un navegador con JAVA.

Anónimo dijo...

Hola Felipe, eres un caballero que colabora, es lo siguiente, tengo Eclipse JAVA EE, ya enruté los iText como lo has explicado, el algoritmo se ve limpio sin errores en rojo o alertas en amarillo, pero al ejecutar me genera esto comentarios que creo son los errores, los copié y aqui los pego:

Invalid layout of java.lang.String at value
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (javaClasses.cpp:129), pid=3216, tid=2268
# fatal error: Invalid layout of preloaded class
#
# JRE version: 7.0_11-b21
# Java VM: Java HotSpot(TM) Client VM (23.6-b04 mixed mode windows-x86 )
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# C:\Users\PC\workspace\PRUEBA01\hs_err_pid3216.log
#
# If you would like to submit a bug report, please visit:
# http://bugreport.sun.com/bugreport/crash.jsp
#

Anónimo dijo...

Felipe. Cordial Saludo:

¿Se puede crear un archivo pdf en un teléfo celular Android 2.2 Froyo? o ¿Conoces de código de programa que uno mismo pueda hacer para manipular un archivo Word o Excell en un celular, así como lo hacen algunas aplicaciones? y si lo anterior es muy avanzado o un tema complejo, entoces como podría interactuar entre el celular y el computador para que me genere estos documentos apartir de los datos que hay en la base de datos del celular

Felipe Martínez D. dijo...

Hola

@Hola Java: Para formatear el texto puedes utilizar el constructor Paragraph(String string, Font font) donde font es el tipo de letra. Puedes ver más detalles aquí: http://api.itextpdf.com/itext/com/itextpdf/text/Paragraph.html . Y un ejemplo aquí: http://itextpdf.com/examples/iia.php?id=114 .

@Cardigan peg: Desconozco cómo desproteger un PDF, ahí no puedo ayudarte. iText jar es una librería que se utiliza para crear y manipular PDFs, pero no para las operaciones que me indicas.

@Anónimo: Asegúrate que tienes permisos de escritura en la carpeta donde quieres crear el PDF. Comprueba que el formato del texto que quieres escribir en el PDF es correcto. ¿Qué tipo de proyecto estás creando en Eclipse para probar este ejemplo?.

@Anónimio: Siento no poder ayudarte. No se si es posible hacer lo que tú me indicas desde Android. Por favor, haz tu pregunta en un foro dedicado a Android, quizás ellos te puedan echar un mano.

Saludos a todos y gracias por comentar.

Anónimo dijo...

Hola de nuevo Felipe, sí se pueden generar documentos pdf en un celular Android (el mio es Android 2.2 Froyo); no sé porque con iText no me funciona, pero buscando la Web encontré DroidText 0.2, tiene alrededor de 6 Megas, podría pensarse que es algo pesado, pero para el servicio que presta practicamente no importa, sobre todo con las grandes memorias de los actuales móviles.
De todas maneras gracias porque sinó hubiera conocido el iText en tu página, tampoco había llegado al DroidText, no dudes en que algo te volveré a preguntar.
Saludo desde Cali-Colombia.

Felipe Martínez D. dijo...

Hola.

Gracias por comentar la solución, seguro que a alguien le será de ayuda. Cualquier duda que tengas y con la que pueda echarte una mano, no dudes en decírmelo.

Saludos.

Unknown dijo...

excelente hermano muy bien explicado asi es como debe ser para los novatos en java te agradezco por compartir el conociemiento..

Anónimo dijo...

Saludos Felipe:

Tengo dos inquietudes:
1) Image image = Image.getInstance (getClass().getResource("/icono_01"), el código anterior no me extrae una imagen(.jpg) en una carpeta llamada drawable ubicada en res, para pegar dicha imagen en un documento PDF ¿Qué no estoy haciendo bien?.
2) Tengo una tabla de tres columnas, necesito que la primera y la tercera se autoajusten al texto que contienen sus celdas, pero la segunda columna necesito que ocupe el resto del tamaño que queda de la tabla; para mas claridad, si se cambia el tamaño de la tabla (en mi caso el porcentaje de ocupación)las columnas primera y tercera no variarían sus tamaños (por su texto fijo), pero la segunda si. Creo que me entienden pero si necesitan mayor explicación no es problema.
Esta segunda inquietud es posible de realizar?

Gracias de antemano

Desde Cali-Colombia

Felipe Martínez D. dijo...

Hola.

@Vianey vargas morales: Muchas gracias a tí por comentar.

@Anónimo: 1) Creo que hay un error en tu código, debería ser así:
Image image = Image.getInstance (getClass().getResource("/ruta/archivo.jsp"));
2) Aquí no sabría responderte. Quizás planteando tu pregunta aquí: http://stackoverflow.com/questions/tagged/itext puedan echarte una mano.

Saludos a los dos.

Anónimo dijo...

Cordial Saludo Felipe:

Gracias por contestar y solucionar, te comento; 1)En algún momento la ruta estaba bien, lo que pasaba era que la aplicación no me reconocía la imagen en formato .jpg, imagen que estaba archivada en el PC (descargada de la Web), pero me dio por curiosear con otra imagen .jpg (que es una foto tomada con el celular donde tengo la aplicación) y esa imagen si la reconoció. ¿Porqué no reconoce la otra si ambas son del mismo formato jpg?.
2)¿Me puedes recomendar foros para programación android, iText e incluso Java pero en Español?

No hablo Inglés y a estas alturas de la vida ya no hablaré desafortunadamente. pero si en Español nos unimos, en Español ganamos

Desde Cali - Colombia.

Felipe Martínez D. dijo...

Hola.

1) No sabría decirte por qué una imagen sí la detectado y la otra no. Algún detalle se nos ha escapado.
2) Desgraciadamente, los foros con mayor información están en inglés. Aun así, en español hay también recursos muy útiles. Te recomiendo que utilices el buscador de Google para encontrarlos.

Saludos cordiales.

Anónimo dijo...

Hola!!
Tengo una pregunta, como hago para que los pdf que voy guardando no sean reemplazados?
Es decir, con este código me funciona super bien pero el que guardo me reemplaza el anterior y así sucesivamente, como hago para que los guarde con diferentes nombres por ejemplo?

Felipe Martínez D. dijo...

Hola.

Simplemente sustituye la línea siguiente:

OutputStream file = new FileOutputStream(new File("C:\\Test.pdf"))

Por ésta por ejemplo:


OutputStream file = new FileOutputStream(new File("C:\\Test1.pdf"))

Simplemente he cambiado el nombre del archivo a generar.

Saludos.

Anónimo dijo...

Exelente, sencillo y práctico, desde su fecha de publicación sigue siendo de ayuda, Saludos.

Erithiel dijo...

bueno primero, quiero felicitarte por el sitio.
a ver tengo lagunas dudas espero puedas ayudarme.
1. Cuando se generar el pdf y uno define el tamaño. en que medida están los margenes px, cm, porque por dios que me ha costado algo tan simple como definir unos margenes básicos.
2. he estado alineado un texto como justificado, el problema es que me sapara palabras como para rellenar que debo hacer


Paragraph parrafo = new Paragraph();
parrafo.add(new Paragraph("\b \b \b \b \b Se certifica que la señorita CONSTANZA ANDREA VIDELA PIZARRO, céluda de identidad Nº 18.449.711-5, " +
"es alumna regular de la carrera Secretariado Traductor Bilingüe, el cual tiene duración de seis meses.", smallBold));
addEmptyLine(parrafo, 1);
parrafo.add(new Paragraph("\b \b \b \b \b La señorita Videla Pizarro está cursando el primer semestre de su carrera, el cual inicio el 09 de abril " +
" y terminará el 17 de agosto.", smallBold));
addEmptyLine(parrafo,1);
parrafo.add(new Paragraph("\b \b \b \b \b Este instituto está reconocido por el Ministerio de Educación como Centro de Formación Técnica, segun Decreto Nº 29 " +
"del 2 de febrero de 1982, publicado en el Diario Oficial el 11 de febrero de 1982.", smallBold));
addEmptyLine(parrafo, 1);
parrafo.add(new Paragraph("Se extiende el presente certificado para ser presentado en la locomoción colectiva.", smallBold));
addEmptyLine(parrafo, 3);
parrafo.setAlignment(Element.ALIGN_JUSTIFIED_ALL);
Paragraph fechacreacion = new Paragraph("VIÑA DEL MAR, 10 de abril de 2013", smallBold);
fechacreacion.setAlignment(Element.ALIGN_LEFT);
document.add(parrafo);
document.add(fechacreacion);

Anónimo dijo...

Gracias por la informacion... me fue de mucha ayuda

Felipe Martínez D. dijo...

@Anónimo: Me alegro de que te haya servido. Saludos.

@Erithiel: Entiendo las dificultades que estás teniendo. Cuando no se trabaja con un editor de tipo wysiwyg, pueden ocurrir cosas como las que me comentas. Son los inconvenientes de trabajar con código para generar un documento. Sinceramente, esta librería la he utilizado solamente para generar documentos sencillos. Te recomiendo que visites la página de soporte de iText, donde podrás encontrar ejemplos y respuestas a dudas. Pero sobretodo hay un apartado en Stackoverflow en el que se habla de este paquete: http://stackoverflow.com/questions/tagged/itext . Espero que te sea de ayuda.

@Anónimo: Gracias a tí por comentar.

Saludos a todos.

Anónimo dijo...

OLA OYE TENGO UN PROBLEMITA ICE UNPROYECTO EN JAVA
Y ME GENERA LOS REPORTES EN PDF MEDIANTE LA LIBRERIA ITEX EL PROBLEMA ESKE POR EJEMPLO:

SESION EXTRAORDINARIA DE LA JUNTA LOCAL DEL DISTRITO
01 DES ESTA CIUDAD-----------------------------------------------------------
HOLA HOLA--------------------------------------------------------------------------
QUIERO QUE ME AGA ESTO QUE ME RRELLENE LOS ESPACIOS CON GUIONES.
ESPERO I ME PUEDAS AYUDAR DE ANTE MANO GRAXIAS

Felipe Martínez D. dijo...

Hola.

No he entendido bien lo que quieres. Puedes enviarme tu código para que me haga una idea. ¿Qué espacios quieres que te rellene con guiones?.

Saludos.

Anónimo dijo...

Hola! Muchas gracias por el tutorial. Tengo un pequeño problema... he descargado la libreria, la especial para android, la he importado al proyecto pero me sigue dando errores, vamos que no me coge las librerias.

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;

import com.lowagie.text.Document;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;

public class MainActivity {

public static void main(String[] args) {
try {
OutputStream file = new FileOutputStream(new File("C:\\Test.pdf"));

Document document = new Document();
PdfWriter.getInstance(document, file);
document.open();
document.add(new Paragraph("Hola a todos!"));
document.add(new Paragraph(new Date().toString()));

document.close();
file.close();

} catch (Exception e) {

e.printStackTrace();
}
}
}

El documento es tal cual lo has implementado tu, y las librerias que he cargado son:

itextg-5.4.4.jar
itextg-5.4.4-javadoc.jar
itextg-5.4.4-sources

Nosé por que me da error, igual llamo de forma inadecuada a los paquetes, como siempre me los agrega eclipse ya no sé ni como se incorporan.

Muchas gracias.

Anónimo dijo...

Ya lo he solucionado.... he visto en un comentario por arriba que habia cambiado la version y la manera de llamar a los paquetes era diferente. Ya siento aver escrito para nada... esque habia tantos comentarios que no me habia leido todos.

Muchas gracias por el tutorial!!!

Felipe Martínez D. dijo...

No te preocupes. Me alegro de que hayas solucionado tu error y gracias a tí por comentar.

Saludos.

Eduardo Ponce dijo...

Muy buen aporte
me gustaría saber si se puede lograr hacer un pdf
en base a código HTML, por ejemplo si yo desde mi web envió un pedazo de código con un tabla en html, podría generarse esa tabla en un pdf?
si es posible, como debo mandar ese código html, y como lo manipularía dentro de la clase java?
De antemano muchas gracias.
mi correo es
eduardo_ponce_martinez@hotmail.com
me gustaría mas información

Unknown dijo...

Vos disculpa tengo un gran problema, yo estoy llenando una plantilla pdf con datos y necesito ingresar un jpg dentro de la plantilla. pero solo me llena los campos con informacion y no me muestra la imagen y si lo cambio de posicion solo me muestra la imagen tengo el siguiente codigo me podrias ayudar???
public class PruebaItext{

protected static final String NOMBRE_PLANTILLA_OPE = "C:/Users/CF/Documents/Panama/workspaces/GAC/test/JavaSource/plantillas/plantillaOperacion.pdf";
protected static final String GENERADO = "C:/Users/CF/Documents/Panama/Proyecto Paperless/Paper/Pruebas/Pruebasfichero.pdf";
protected static final String RESOURCE = "C:/Users/CF/Documents/Panama/workspaces/GAC/test/WebContent/WEB-INF/classes/plantillas/firma.jpg";

public static void main(String [] args)throws IOException, DocumentException, InterruptedException{

PruebaItext datos = new PruebaItext();

datos.manipulatePdf("5460-3089","Sysdate","12345678","cancelacion","123456789","654321","123","456","1324357",
"adminlegal","cancelacion servicio","por falta de ingresos","se dio de baja a todos los no. de la persona",
"el cliente dijo que no puede seguir pagando los servicios","victor recinos","se cobrora todo los meses restantes");

}


public void manipulatePdf(String celular, String fecha, String abonado, String situacion, String caso, String cuenta,
String nocliente, String noabonado, String identi, String usuario, String gestion, String descrip, String detalle,
String comen, String cliente, String clausula) throws IOException, DocumentException, InterruptedException {

OutputStream file = new FileOutputStream(new File(GENERADO));
PdfReader reader;

System.out.println("Va a pintar datos");
reader = new PdfReader(NOMBRE_PLANTILLA_OPE);
PdfStamper stamper = new PdfStamper (reader,file);
AcroFields form = stamper.getAcroFields();

form.setField("txtfecha",fecha);
form.setField("txtnombre",cliente);
form.setField("txtcelular",celular);
form.setField("txtcuenta",cuenta);
form.setField("txtcliente",cliente);
form.setField("txtnocliente",nocliente);
form.setField("txtnoabonado",noabonado);
form.setField("txtabonado",abonado);
form.setField("txtsituacion",situacion);
form.setField("txtidenti",identi);
form.setField("txtcaso",caso);
form.setField("txtusuario",usuario);
form.setField("txtgestion",gestion);
form.setField("txtdescrip",descrip);
form.setField("txtdetalle",detalle);
form.setField("txtcomen",comen);
form.setField("txtclau",clausula);

stamper.close();
reader.close();
System.out.println("pinto datos");

Document document = new Document();

document.open();

Image foto = Image.getInstance("C:/Users/CF/Documents/Panama/workspaces/GAC/test/WebContent/WEB-INF/classes/plantillas/firma.jpg");
foto.scaleToFit(100, 400);
foto.setAlignment(Chunk.ALIGN_MIDDLE);
foto.setAbsolutePosition(250, 180);
com.lowagie.text.Image image =
com.lowagie.text.Image.getInstance(foto);
document.add(image);


document.close();
System.out.println("Creo doc");
file.close();
}

}

Felipe Martínez D. dijo...

@Eduardo Ponce: Desconozco si se puede enviar el código HTML como tal y convertirlo en PDF. Pero yo creo que no, ya que el paquete itext tiene su propia sintaxis. Puedes ver aquí su API: http://api.itextpdf.com/itext/ .

@Victor Recinos: ¿Te da algún error al ejecutar tu aplicación?. Te recomiendo que sigas el siguiente ejemplo, el cual está muy completo e indica como incluir imágenes en el archivo PDF a generar: http://itextpdf.com/examples/iia.php?id=72

Saludos a los dos.

Marlene dijo...

Holas
quisiera que me recomienden cual herramienta utilizar para generar 550,000 reportes pdf leyendo unas tablas de BD con la información a mostrar.
Actualmente utilizo iReport pero demora de 3 a 4 días

Muchas gracias!

Anónimo dijo...

Hola Felinfo y Seguidores.
Estoy generando un PDF y tengo la necesidad de que después de haber escrito en la segunda página inevitablemente tengo que volver a escribir en la primera. ¿Como se logra esto?.
El texto lo escribo mediante posición absoluta, y cada página recibe un nombre distinto, ¿entonces como revivo o mantengo viva la primer pagina o alguna página anterior para volver a escribir en ella?

Agradezco de antemeno alguna ayuda desde Cali-Colombia

Felipe Martínez D. dijo...

Hola.

@Marlene: Desconozco si hay alguna herramienta más rápida que la que ya estás utilizando, en ese sentido no te puedo ayudar. Si tienes alguna duda acerca de iText JAR, puedes preguntarme.

@Anónimo: Creo que lo mejor es que obtengas el texto que realmente quieres generar en el PDF y una vez que lo tengas, generes el PDF. El moverte en el PDF para reescribir contenido puede ser demasiado laborioso y el resultado puede que no sea el esperado. Si quieres puedes dar más detalles de lo que quieres hacer para que pueda ayudarte más específicamente.

Saludos cordiales.

Anónimo dijo...

Felinfo y seguidores.
Gracias por contestar y paso a decirte lo siguiente:
Realmente no puedo obtener el texto de la primer página sinó hasta cuando obtenga unos datos que se escriben en la seguna página, ¿Por qué?, porque con los datos de la segunda página hago un proceso y el resultado de este proceso se escribe es en la primer página y no en la segunda página que es la que está activa.
Y para ser mas preciso lo que requiero en realidad en caso de ser posible, es enviar texto a dos páginas simultáneamente o casi simultáneamente. Ayúdame o dame la guía, no importa que sea un tema laborioso, y es que no tengo otra manera; primero en la segunda y después en la primera.

Felipe Martínez D. dijo...

@Anónimo: Para no salirnos del tema de este post, escríbeme a mi correo, aportando tu código e intentaré ayudarte.

Saludos cordiales.

Anónimo dijo...

Hola, quisiera saber si me puedes ayudar a exportar la imagen al archivo pdf, pero en vez de tomarla del ordenador y pasarle una ruta, que la imagen sea tomada del icono de un jlabel.

Agradezco tu pronta respuesta

Felipe Martínez D. dijo...

Hola.

Para que la parte de los comentarios no se haga demasiado larga y no nos desviemos del asunto del post, mejor envíame el código a mi correo e intentaré ayudarte.

Saludos.

Anónimo dijo...

Felinfo y Seguidores Cordial Saludo Desde Cali - Colombia.
Asunto resuelto acerca de escribir en dos (o mas) páginas simultáneamente en un archivo PDF, es bastante sencillo.
Busquen por "itext-general, pages simultaneously", que allí ahi un ejemplo o al menos se puede deducir.

Felipe Martínez D. dijo...

De acuerdo. Muchas gracias por tu aportación.

Saludos.

Anónimo dijo...

Hola buen día! Primero felicidades por los aportes tan útiles y todo el apoyo que brindas, tengo un problemita, estoy llenado un formulario PDF usando itext en web hasta aquí todo bien, pero ahora quiero tener una página por cada registro de una consulta, osea añadir paginas al PDF, me podrías dar alguna idea de como hacerlo?

Gracias por tu apoyo

Felipe Martínez D. dijo...

Hola.

Perdona la tardanza en responder. He encontrado un ejemplo que podría servirte: http://itextpdf.com/examples/iia.php?id=99 . No se si es exactamente lo que pides, pero ahí te explica como añadir un salto de página e insertar páginas en blanco.

Saludos.

Anónimo dijo...

Amable Saludo
Felipe, ¿Cómo hago para que en el texto que se genere, se reconozca simbolos?, tales como π(pi), yo intento escribir 2*π*r, pero me escribe en el pdf 2**r

Gracias por el blog y por tu ayuda

Felipe Martínez D. dijo...

Hola.

Parece ser que estás utilizando una fuente que no contiene esos caracteres. En el siguiente hilo de stackoverflow comentan qué fuente hay que utilizar para que no tengas problema:
http://stackoverflow.com/questions/3753961/special-characters-in-itext

Saludos cordiales.

Anónimo dijo...

hola a todos exelente info de parte de todos ....
En mi caso tengo un pequeño detalle .....
tengo un html pero al quererlo convertir a pdf me muestra un error por los acentos y no se genera el pdf..
si se los quito lo genera perfectamente ...
y quisiera saber como la hago para que al momento de convertirlo me cargue los acentos ....
he aqui el codigo ...

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("pdf;charset=iso-8859-1");
try {
response.setHeader("Content-Disposition","attachment;filename=FormatoC.pdf");

String ficheroHTML = "D:\\ReportesC\\FormatoC.html";
String url = new File(ficheroHTML).toURI().toURL().toString();
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(url);

renderer.layout();
renderer.createPDF(out);
out.close();

} catch (Exception e) {
throw new RuntimeException(e);
}
}

Felipe Martínez D. dijo...

Hola.

Indícame el mensaje de error que te aparece.

Saludos.

Anónimo dijo...

Hola, todo me ha salido bien y he generado un buen archivo PDF pero ahora quiero adicionarle que sea del tipo Pdf/a, he buscado por muchos lados y aun no encuentro como poder generar el pdf con este estándar claro utilizando el itext.

Agradezco si me indicaras donde podría revisar este tema o si tienes conocimiento de esto. GRACIAS!!!

Felipe Martínez D. dijo...

Hola.

Desconozco si se puede hacer lo que dices. Te recomiendo que plantees tu pregunta en el foro oficial de iText: http://support.itextpdf.com/forum , donde seguro que te darán una respuesta. Siento no poder ayudarte más.

Saludos cordiales.

Sistemas Distribuidos dijo...

Buenas tardes, una consulta, cuando utilizo:
pdfPTable.addCell(Image.getInstance("D:\\mb.jpg"));

en el pdf me muestra la imagen porque esta en mi disco D, pero si quiero mostrar una imagen que solo esta dentro de mi proyecto no lo muestra y trata de buscarlo en el disco C, yo quiesiera mostrar desde esta ruta:
"/WebContent/imagenes/img/mb.jpg"

pero en la consola me dice que esa ruta no esta dentro del disco C.
Alguna idea porfavor, muy buen post.

Felipe Martínez D. dijo...

Hola jlm.

¿Has intentado poner la ruta de la imagen de forma relativa en vez de en forma absoluta?. Inténtalo y si sigue sin mostrarte la imagen dímelo para que busquemos otra solución.

Saludos.

Sistemas Distribuidos dijo...

Si ya cargo la imagen muchas gracias!!!!!

Felipe Martínez D. dijo...

Me alegro de que solucionaras el problema.

Saludos.

Anónimo dijo...

Saludo Felipe y a todos los demás.
Asunto:
Yo logro pegar una plantilla (un pdf) a otro pdf agregarle datos y el resultado es un archivo pdf de una sola página, hasta ahí voy bien, pero el problema consiste en que ahora así como el archivo se puede crear con una sola página también pueden ser dos o tres paginas según la cantidad de datos ingresados, pero siendo así (mas de una pagina), necesito pegar la misma plantilla a cada página creada, he buscado, y nada, espero me puedas echar una ayuda con esto, te aclaro que no son encabezados, ni pie de pagina, ni marca de agua, es una plantilla entera con espacios para llenar.
De antemano GRACIAS.
Sé que me vas a ayudar, ya lo has hecho antes.

Felipe Martínez D. dijo...

Hola.

No he trabajado con plantillas en itext-jar, así que no sabría darte una respuesta a tu pregunta. Te recomiendo que revises el foro oficial de iText http://support.itextpdf.com/forum por si se hubiera planteado una cuestión sobre ésto y de no ser así, te animo a que inicies un hilo preguntándolo. Seguro que ellos te pueden dar una respuesta.

Saludos cordiales.

Anónimo dijo...

Hola.

estoy trabajando con netbeans y me descargue el zip completo de iText7-7.0.0.zip y trato de importar a mi proyecto, que es una app de escritorio y no puedo tampoco se si lo descomprimo cual o cuales .jar debería importar para poder generar PDF's

Felipe Martínez D. dijo...

Hola.

En las últimas versiones han cambiado la forma de nombrar a los archivos. Si descargas itext-5.5.4.zip el jar que debes usar es el itextpdf-5.5.4.jar . La versión 7 no la he utilizado.

Saludos.

Anónimo dijo...

Buen día:

Espero que me puedan ayudar, estoy generando un reporte con iReport Designer, pero al momento de generr el PDF desde java no me respeta los diferentes tamaños de letra, por default me pone uno solo.

Espero que me puedan ayudar, muchas gracias.

Felipe Martínez D. dijo...

Hola.
No he utilizado iReport, siento no poder ayudarte.
Saludos.

Anónimo dijo...

Hola, disculpa sabes si hay alguna forma de que me convierta el pdf, tal cual se ve el html. Es que si me lo transforma, pero difiere en tamaños de las tablas por ejemplo, o posición de la tabla

Felipe Martínez D. dijo...

Hola. No se si se puede hacer con esta librería, pero sí he leído que con javascript se puede, mira este enlace: http://stackoverflow.com/questions/6896592/is-it-possible-to-save-html-page-as-pdf-using-javascript-or-jquery

Saludos.

Unknown dijo...

Hola Felipe... Tengo un problema al generar un pdf. Cuando lo hago desde el IDE Netbeans todo se ejecuta normal, puedo generr un reporte en formato pdf, utiulizando la libreria iText version 5. Sin embargo cuando lo ejecuto desde la extension creada en .jar de mi sistema, la hoja me sale en blanco.

Felipe Martínez D. dijo...

Hola.

Intenta poner mensajes de log en tu código para poder depurarlo y ver por qué no te crea bien el pdf.

Un saludo.

Publicar un comentario

Felinfo: Java, Linux, Virtualización. Open Source.  ©Template Blogger Green by Dicas Blogger .

TOPO