Atención: Estoy suponiendo que tienes un conocimiento medio de Java y que usas fluidamente Netbeans. Gracias.
En un par de pasos vamos a crear un archivo PDF en JAVA
Materiales:
1. Libreria iText (http://sourceforge.net/projects/itext/files/iText/iText5.2.0/)
Para este ejemplo use la version 5.2.0
2. Una pequeña imagen
Para este ejemplo use una imagen en formato PNG, puede ser cualquiera
Deberás añadir las librerías de iText a tu proyecto, para que puedas hacer uso de las clase que se detallan aquí.
Teniendo todo esto vamos a crear nuestro archivo.
Vamos a crear una clase con cualquier nombre, en mi caso yo le pondré CreatePDF y dentro de ella voy a crear un método llamado writePDF. Tambien vamos
a colocarle un método main, el esqueleto quedaria así.
public class CreatePDF
{
public void writePDF()
{...}
public static void main(String args[])
{
new CreatePDF().writePDF();
}
}
Luego de esto lo primero que debemos hacer es importar los Objetos que vamos a utilizar, para nuestro básico ejemplo solo debemos añadir los
siguientes
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
public class CreatePDF ...
Ahora bien dentro del método writePDF() irá toda nuestra lógica para crear nuestro documento, vamos primero a crear un bloque try/catch y dentro de
él colocaremos las siguientes líneas; las cuales iré explicando paso a paso.
Document document = new Document(PageSize.LETTER, 80, 80, 50, 50);
FileOutputStream salida = new FileOutputStream("archivo.pdf");
PdfWriter writer = PdfWriter.getInstance(document, salida);
writer.setInitialLeading(0);
Como todo en Java debemos tener una instancia de un objeto antes de trabajar con el, por eso debemos tener una referencia a un objeto de tipo
Document que es quien representa nuestra hoja en blanco para escribir. Con el atributo PageSize.LETTER lo que le estamos indicando es que el
documento tendrá las dimesiones de un archivo en formato CARTA (si tambien hay para los demas estandares, investígalos), acompañando lo antes mencionado
esta el valor de los margenes de nuestro documento (margenIzq, margenDer, margenArriba, margenAbajo), pueden ser los valores que gustes compañero.
Con la línea del FileOutputStream únicamente estamos creando físicamente nuestro archivo en disco, allí iran todos nuestros cambios al documento.
Luego necesitamos tener una instancia de quien escribira nuestros cambios y darle su punto de inicio para que pueda escribir, (writer.setInitialLeading(0);).
Hecho todo esto solo nos queda ir "escribiendo" dentro de nuestro papel en blanco que ya hemos preparado, vamos a añadir dos párrafos sencillos juntos a
una imagen.
Paragraph paragraph = new Paragraph();
paragraph.add("Primera linea del documento");
paragraph.setAlignment(Paragraph.ALIGN_CENTER);
Para escribir texto usamos la clase Paragraph, como ves tiene un metodo add en el que puedes escribir lo que desees...
esta clase tiene muchos métodos interesantes, como el que vemos aquí paragraph.setAlignment(Paragraph.ALIGN_CENTER) que como lo
adivinaste es para alinear en donde queramos.
Image image = Image.getInstance("imagen.png");
image.scaleToFit(150, 150);
image.setAlignment(Chunk.ALIGN_CENTER);
Para colocar imégenes debemos instanciar un objeto de tipo Image, darle la ubicacion de nuestra imagen al constructor, darle el tamaño que
gustemos y alinearla.
Paragraph paragraph_2 = new Paragraph();
paragraph_2.setFont(new Font(FontFactory.getFont("Courier", 12, Font.BOLD, BaseColor.ORANGE)));
paragraph_2.add("Ultima linea del documento");
paragraph_2.setAlignment(Paragraph.ALIGN_LEFT);
En este parrafo lo unico que hemos hecho diferente es darle una fuente y color especifico a nuestro texto, hay otras formas de hacerlo
incluso si tienes fuentes extrañas instaladas en su carpeta Fonts de Windows puedes crear una nueva fuente a partir de esa, ya que por lo
general las fuentes "extrañas" no las reconoce, hagan la prueba y me comentan (si si si, tengo la solución si les llega a pasar..)
Antes de añadir todo nuestro contenido debemos abrir el documento para poder usarlo:
document.open();
luego ir añadiendo en el orden en que queremos que aparezcan todos los checheres que hemos creado
document.add(paragraph);
document.add(image);
document.add(paragraph_2);
y por logica... si abres algo, cierralo.
document.close();
Eso es todo! Luego de que lo corras deberás tener en tu carpeta de proyecto tu archivo PDF.
Saludos, para dudas a la orden!!!
Hola que tal, leyendo tu publicacion, me interesa la parte de las fuentes.
ResponderEliminarQuiero suponer que no jalara fuentes instaladas en nuestros equipos dado que la libreria Itext solo hace funcionar las fuentes OpenType, no es asi?
Me gustaria saber si me podrias ayudar a poder usar cualquier fuente que tenga en el equipo, saludos :)
Hola Arauz, hasta donde he trabajado el tema con iText he podido trabajar con ambos tipos de fuente (otf y ttf) y no he tenido problemas, prueba el siguiente codigo con cualquier fuente y me informas si has tenido algún inconveniente.
ResponderEliminarDe hecho te dejo el codigo con varias pruebas :)
Crea una BaseFont y una Font en donde gustes ...
BaseFont iTextFont = null;
Font nueva_font;
Luego pasamos al metodo que construira el tipo de fuente que usarás en tu documento ...
public Font crearNuevaFuente()
{
DefaultFontMapper.BaseFontParameters params = null;
try
{
//iTextFont = BaseFont.createFont("C:\\WINDOWS\\Fonts\\Arial.ttf",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
//iTextFont = BaseFont.createFont("recursos/sheep sans.ttf",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
iTextFont = BaseFont.createFont("C:\\WINDOWS\\Fonts\\Web Serveroff.otf",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
params = new DefaultFontMapper.BaseFontParameters("recursos/sheep sans.ttf");
external_font = new Font(iTextFont);
} catch(DocumentException e)
{
/*Exception*/
}
catch(IOException e)
{
/*Exception*/
}
return external_font;
}
Como ves el metodo retorna una Font ...
nueva_font = crearNuevaFuente();
Aplica tu fuente donde la requieras ...
Paragraph texto = new Paragraph();
texto.setFont(slogan_font);
Espero tus comentarios .... saludos!
Saludos. Yo acabo de generar mi pdf de un Jtable pero no se como ajustarlo para que quede correcto en la hoja, se empalman las columnas. No se si se pueda de alguna manera.
ResponderEliminarLo creo de la sig manera:
FileOutputStream ArchPdf = new FileOutputStream("Reporte1.pdf");
PdfWriter.getInstance(doc,ArchPdf).setInitialLeading(10);
doc.open();
doc.add(new Paragraph("Tabla Proforma "));
doc.add(new Paragraph(" "));
doc.add(new Paragraph(" "));
PdfPTable tabla = new PdfPTable(var.columnas+1);
for (int j=0; j "+fecha));
doc.close();
ArchPdf.close();
hola buenos dias lo q pasa es q yo tengo una plantilla pre definida y quisiera saber como hago para q algunos campos traidos de una base de datos se me reflejen en el pdf gracias
ResponderEliminaramigo para q el pdf se abre como hago!!!
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarcomo puedo llenar una tabla desde text que al puslsar un boton me valla agregando el texto
ResponderEliminarQue tal, este blog ya no tiene mantenimiento. Se ha cambiado a http://ropherpanama.github.io/ por favor pasate por allá y detalla un poco más tu pregunta ya que no la comprendo. Saludos!
Eliminar