Normalmente, en los sistemas que desarrollamos, nos encontramos con la necesidad de exportar algún tipo de información ya sea un archivo de texto, de excel o PDF. Generar archivos de texto es sumamente fácil ya que .Net provee librerías para hacerlo pero ¿qué pasa cuando necesitamos exportar información a formatos mas complejos como excel o PDF? Hay una excelente librería para crear y manipular archivos de excel llamada EPPlus. Estaré hablando de ella mi próxima publicación pero hoy voy a tocar específicamente cómo generar archivos PDF ya que este formato es estándar y no es modificable. Para esto usaremos iTextSharp.

iTextSharp es una librería, de código abierto (open source) y específicamente para .Net, que nos permite crear y modificar documentos PDF. Si usted prefiere programar en Java, también se puede beneficiar de iText para Java y Android. Estos son los enlaces para descargar las librerías:

Así que queremos crear un documento en PDF, ponerle data y, finalmente, almacenarlo en nuestra computadora.Ok, primero, descargamos la librería y hacemos referencia a ella en nuestro proyecto de Visual Studio. Ahora, ¡manos a la obra!

// Creamos el documento con el tamaño de página tradicional
Document doc = new Document(PageSize.LETTER);
// Indicamos donde vamos a guardar el documento
PdfWriter writer = PdfWriter.GetInstance(doc,
                            new FileStream(@"C:\prueba.pdf", FileMode.Create));

// Le colocamos el título y el autor
// **Nota: Esto no será visible en el documento
doc.AddTitle("Mi primer PDF");
doc.AddCreator("Roberto Torres");

// Abrimos el archivo
doc.Open();

En el pedazo de código arriba creamos el documento PDF, con las medidas de una página tradicional, le dijimos que guardara el documento en C:\ con el nombre prueba.pdf y le colocamos el título y el autor del documento. Finalmente lo abrimos para comenzar a añadirle información.

// Creamos el tipo de Font que vamos utilizar
iTextSharp.text.Font _standardFont = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 8, iTextSharp.text.Font.NORMAL, BaseColor.BLACK);

// Escribimos el encabezamiento en el documento
doc.Add(new Paragraph("Mi primer documento PDF"));
doc.Add(Chunk.NEWLINE);

// Creamos una tabla que contendrá el nombre, apellido y país
// de nuestros visitante.
PdfPTable tblPrueba = new PdfPTable(3);
tblPrueba.WidthPercentage = 100;

// Configuramos el título de las columnas de la tabla
PdfPCell clNombre = new PdfPCell(new Phrase("Nombre", _standardFont));
clNombre.BorderWidth = 0;
clNombre.BorderWidthBottom = 0.75f;

PdfPCell clApellido = new PdfPCell(new Phrase("Apellido", _standardFont));
clApellido.BorderWidth = 0;
clApellido.BorderWidthBottom = 0.75f;

PdfPCell clPais = new PdfPCell(new Phrase("País", _standardFont));
clPais.BorderWidth = 0;
clPais.BorderWidthBottom = 0.75f;

// Añadimos las celdas a la tabla
tblPrueba.AddCell(clNombre);
tblPrueba.AddCell(clApellido);
tblPrueba.AddCell(clPais);

// Llenamos la tabla con información
clNombre = new PdfPCell(new Phrase("Roberto", _standardFont));
clNombre.BorderWidth = 0;

clApellido = new PdfPCell(new Phrase("Torres", _standardFont));
clApellido.BorderWidth = 0;

clPais = new PdfPCell(new Phrase("Puerto Rico", _standardFont));
clPais.BorderWidth = 0;

// Añadimos las celdas a la tabla
tblPrueba.AddCell(clNombre);
tblPrueba.AddCell(clApellido);
tblPrueba.AddCell(clPais);

Una vez terminemos de ponerle data al documento, no queda otra cosa que cerrar el archivo y ver nuestro resultado final.

// Finalmente, añadimos la tabla al documento PDF y cerramos el documento
doc.Add(tblPrueba);

doc.Close();
writer.Close();

iTextSharp es una excelente librería, de libre de costo, que nos permite crear y modificar documentos PDF y añadirle todo tipo de información (incluyendo imágenes), lo que lo hace una herramienta, casi necesaria, en nuestro desarrollo.

El código del tutorial puede ser encontrado aquí: iTextSharpDemo
Un ejemplo del resultado puede ser encontrado aquí: prueba.pdf

Publicaciones relacionadas

Encuentra más ayuda sobre iTextSharp en mis otras publicaciones: