InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
También puedes ver ...
SubVersion y Visual Studio
Encriptación con AES Rijndael - Ejemplo
TripleDES - Un ejemplo practico en C#
Insertar una marca de agua en documentos PDF
Serialización: XmlSerializer y BinaryFormater
Handler para manipular imagenes
Conversiones de tipos personalizadas (VB y C#)
Compresión por gzip y deflate
La página Web que está abriendo contiene tanto elementos seguros como no seguros.
Cómo insertar un fichero .xml en un campo de tipo XML de SQL server 2005 o 2008


Generar archivos PDF con C#

En este articulo vamos a  ver como generar documentos PDF con C# directamente desde código. Antes de nada, dar la gracias a Raul - compañero de trabajo - por enseñarme que existia iTextSharp - la librería que vamos a utilizar para este ejemplo. 

Normalmente, cuando queremos generar un documento PDF recurrimos a una impresara virtual PDF - como explicamos en este artículo:
http://www.devjoker.com/contenidos/Articulos/311/DoPDF-Crea-archivos-PDF-facilmente.aspx,
pero en muchas ocasiones necesitamos hacerlo directamente desde código.

Ya hemos dicho que vamos a utilizar iTextSharp - una librería que proviene del mundo Java (iText), pero que ha sido portada a C# y que podemos descargar desde el siguiente enlace:
http://sourceforge.net/projects/itextsharp/

En este ejemplo hemos utilizado C# 3.0 ( Visual Studio 2008 ) - es decir .Net Framework 3.5 - , pero la librería funciona correctamente con cualquier versión de .Net, incluido el Framework 1.0.

Vamos a obviar temas de permisos de escritura en los directorios y esas cosas, asuminos que tenemos los permisos necesarios para escribir en disco y esas cosas (aunque como veremos más adelante también podríamos usar un MemoryStream).

Mi primer documento PDF.

Lo primero que tenemos que hacer es decargar la librería desde el enlace que hemos indicado y añadir la referencia a nuestro proyecto: itextsharp.dll.

En mi caso he creado un proyecto de tipo Windows Forms, y he diseñado un formulario con un único botón que servira para crear el documento pdf.

Tenemos que incluir las siguientes directivas using a nuestro formulario:

 

using iTextSharp.text;

using iTextSharp.text.pdf;

using System.IO;

Crear documentos PDF es realmente simple, vemos como y lo explicamos un poco más adelante.

 

private void button1_Click(object sender, EventArgs e)

{

Document document = new Document();

PdfWriter.GetInstance(document,

new FileStream("devjoker.pdf",

FileMode.OpenOrCreate));

document.Open();

document.Add(new Paragraph("Este es mi primer PDF al vuelo"));

document.Close();

}

Con esto ya tenemos nuestro primer PSF. Vamos a ver que hemos hecho ...

  • Creamos un objeto de tipo Document. Es nuestro PDF.
  • Invocamos al método estatico GetInstance de la clase PdfWriter - como argumentos recibe el documento que acabamos de crear y un Stream. En este caso utilizamos un FileStream pero podríamos haber usado cualquier Stream que admita escritura como por ejemplo MemoryStream. 
  • Abrimos el documento con el método Open.
  • Le añadimos un parrafo con Add. Debemos darnos cuenta que el método Add recibe como parametro una interface -IElement. Esto nos va a simplificar enormemente el trabajo.
  • Cerramos el documento con Close.

¡Que dificil! Con esto ya tenemos creado el archivo en la ruta indicada al FileStream (en mi caso la misma ruta que el ejecutable).

La librería es bastante amplia y permite controlar casi todo. Por ejemplo, para modificar la fuente y el tamaño del parrafo solo tendremos que utilizar el siguiente código:

 

Chunk chunk = new Chunk("Texto subrayado",

FontFactory.GetFont("ARIAL",

12,

iTextSharp.text.Font.UNDERLINE ));

 

document.Add(new Paragraph(chunk ));

Como hemos comentado antes, el método Add recibe como parámetro una interface - IElement . Todos los objetos que podemos añadir al documento implementan esta interface por lo que la manera de añadir elementos al documento es siempre la misma. Por ejemplo, insertar una imagen en el documento es igual de simple que un parrafo, solo cambiamos el objeto Paragraph pòr un objeto Image (no confundir con System.Drawing.Image!):

 

iTextSharp.text.Image jpg =

iTextSharp.text.Image.GetInstance(@"C:\...\ghostsandgoblins.jpg");

jpg.Alignment = iTextSharp.text.Image.MIDDLE_ALIGN;

document.Add(jpg);

Solo hemos visto una mínima para de la funcionalidad que ofrece la librería, pero espero que sea suficiente como para que os pique la curiosidad. Podemos encontrar un completo tutorial de como usar la librería en esta dirección:http://itextsharp.sourceforge.net/tutorial/index.html

Saludos, DJK


 Versión para imprimir  Foros de consulta

 
Muy lento por Java4ever
Respuesta recibida el [23/10/2008 07:30:20]
Sigue siendo más complicado y menos potente que el uso de JasperReports en Java. Directamente en plantillas .jrxml se monta la estructura del documento y luego se rellena de datos desde las clases, olvídandote de todo lo demás porque el formato de la plantilla ya está creado en el JRXML. 

Como siempre, dando pasos hacia atrás, es como si ahora volviésemos en Java a pintar los html línea a línea desde un Servlet. No tiene lógica hacer un PDF línea a línea

 
El articulo es una introducció... por devjoker
Respuesta recibida el [23/10/2008 04:57:15]
El articulo es una introducción a la libreria iTextSharp, cuyas posibilidades van mucho más alla de la simple generación de archivos. Manipular archivos existentes, obtener metainformación,leerlos para construir un indice, combinar varios archivos ... - por poner algunos ejemplos. En este tipo de casos es necesaria la potencia de una librería como la que presentamos en este articulo.
Por supuesto, si lo que quieres es realizar un simple informe es mejor que utilices una herramienta de informes - como Reporting Services, Crystal Reports, Actuate ... hay muchas y muy buenas.

 
otras ventajas de iTextSharp por felix
Respuesta recibida el [12/11/2008 02:24:44]
No solo eso te permite iTextSharp.. tambien te permite colocar firmas digitales imagenes, pdf con objetos como radio button, dropdown list.

Realmente iTextSharp es muy versatil

 
COMO ALAMCENARLO EN BDD por OPERA
Respuesta recibida el [13/11/2008 03:15:48]
USTED PODRIA AYUDARME A ALMACENAR ESTE TIPO DE ARCHIVO EN UNA BDD DE SQL SERVER, POR FAVOR...........

 
Tuanis por Steven
Respuesta recibida el [08/02/2009 05:22:50]
Excelente aporte, para lo que quiero esta excelente quisiera saber como asignarle constraseña al archivo para que el documento quede a lo que mas se pueda evitar que se modifique

 
Gracias, muchas gracias... por SAguilarSV
Respuesta recibida el [07/04/2009 07:01:13]
Le agradezco mucho al creador de este curso, no se nada de programacion, soy experto en logistica, pero siempre he tenido la inquietud de aprender a programar, como un pasatiempo...  es 5 años seguro sere un experto...  saludos

 
Excelente por Marco
Respuesta recibida el [19/05/2009 11:14:14]
Muchas gracias por la informacion, he intentado hacer pdfs sin usar herramientas extras pero no lo consegui, haces parecer que el uso de la libreria sea muy sencillo, muchas gracias, por fin logre hacer los docs pdf en linea.

Saludos.

 
Rtf a PDF por omar
Respuesta recibida el [20/05/2009 06:58:21]
Hola, me gustaria saber si hay forma de exportar un RTF a PDF, utilizando esta libreria

 
Para Java4ever por Yo
Respuesta recibida el [19/07/2009 08:21:16]
El equivalente a JasperReports en C# sería Crystal Reports, que hace exactamente lo que comentas.

iTextSharp sería para el que quiera hacerlo "a pelo", por el motivo que sea: no poder usar Crystal, necesitar un mayor grado de control, etc.

 
con SQL?? por D.1.1
Respuesta recibida el [20/08/2009 05:46:11]
Que tal, excelente, me gusto mucho, tiene muchas funcionalidades solo una pregunta, podrían mandarme o poner un ejemplo de cómo lo podría manipular mandandole secuencias de sql? (como cristal reports) Gracias =) 

 
con SQL?? por D.1.1
Respuesta recibida el [20/08/2009 05:46:14]
Que tal, excelente, me gusto mucho, tiene muchas funcionalidades solo una pregunta, podrían mandarme o poner un ejemplo de cómo lo podría manipular mandandole secuencias de sql? (como cristal reports) Gracias =) 

 
excellent por excelente
Respuesta recibida el [24/08/2009 03:08:03]
excelente informacion amigo
muchas gracias por el esfuerzo

 
Menuda tontería, lo de los "pa... por rr7
Respuesta recibida el [09/09/2009 02:51:03]
Menuda tontería, lo de los "pasos hacia atrás", y es oque yo soy programador Java, pero no soy fanático anti .Net. Y es que para empezar, iText ES una librería Java. iTextSharp es simplemente un port a .Net. De hecho, JasperReports usa iText para generar los PDF. Y estoy de acuerdo en que Jasper es una herramienta excelente y muy potente, pero NO todo la información que uno genera en un programa es un reporte. He desarrollado aplicaciones pequeñas (y cliente) que dan la posibilidad de generar archivos PDF de documentos simples (un par de columnas de texto, alguna tabla y poco más), que es muy fácil de hacer usando únicamente iText, que es precisamente lo que he hecho. Sería ridículo (e injusto para mis usuarios) hacer más pesado mi software tan sólo por ahorrarme unas cuantas líneas de código. Lamentablemente esto es algo que muchos programadores no entienden y de ahí que nos encontremos con simples visualizadores de documentos de más de 100 MB.

 
buenisimo por vugjam
Respuesta recibida el [03/12/2009 12:29:57]
Muy agradecido, funciono perfectamente y sera bastante util. Gracias. 

 
PDF sin Tools Bar por vladimir
Respuesta recibida el [11/12/2009 06:05:34]
puedo usando esta libreria un PDF sin la tools bar que aparece al abrirlo
desde el IE

 
Excelente por Pedro Bedoya
Respuesta recibida el [05/02/2010 06:36:16]
Excelente, este abre bocas, tendre que explorar  bastante esta libreria  esta  supr buena.

GRACIAS

 
Mil gracias por Lucia
Respuesta recibida el [07/02/2010 06:18:15]
Muchisimas gracias por este post, me has salvado jejjejje...estoy con el PFC y esto era justo lo que necesitaba, de una forma sencilla y simple :D:D

 
Excelent por Hernán Quiroga
Respuesta recibida el [21/02/2010 02:51:01]
muy buena expliacion muchas gracias

 
Portabilidad por Claudio Pérez
Respuesta recibida el [09/03/2010 08:41:48]
Esta liberia y muchas otras con la cuales puedes generar PDF "a mano", ayudan enormemente a la portabilidad de la aplicación.  Es una gran solución, por ejemplo, cuando necesitas subir una app web a un web hosting que no tiene soporte para Cristal Reports o Reporting services.

 
itextSharp por betty
Respuesta recibida el [09/03/2010 10:55:29]
en el foro viene q tengo que descargar el itextSharp, lo descargo pero no se como ulizarlo o ejecutarlo me podrian acesorar


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



 Versión para imprimir

Generar archivos PDF con C#
Autor: Pedro Herrarte Sánchez
Visitas: 17613 Fecha de publicación: 18/09/2008
Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación.

Posee mas de diez años de experiencia trabajando para las principales empresas de España.

Es especialista en tecnologías .NET, entornos Web, bases de datos (SQL Server y ORACLE) e integración de sistemas.

Es experto en desarrollo (C#, ASP.NET, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE).

Es fundador, diseñador y programador de www.devjoker.com.




Visitas: 111 | Comentarios: 3 | Archivo: Articulos
02/02/2010 iPad vs Telesketch
Visitas: 812 | Comentarios: 2 | Archivo: Articulos
Categorias: Humor
Visitas: 767 | Comentarios: 3 | Archivo: Articulos
Visitas: 3185 | Comentarios: 2 | Archivo: Articulos
Categorias: C#
Visitas: 14575 | Comentarios: 7 | Archivo: Articulos
Categorias: C#|Seguridad
Visitas: 1502 | Comentarios: 3 | Archivo: Articulos
Visitas: 697 | Comentarios: 2 | Archivo: Articulos
Visitas: 369 | Comentarios: 0 | Archivo: Articulos
Visitas: 2035 | Comentarios: 2 | Archivo: Articulos
Categorias: C#

Útimos temas recibidos en los foros ...
Solicitud certificado de afiliaciones a pensiones y cesantias proteccion por hz ... [Actualidad] 62 10/02/2010
certificado de pensiones del bbva horizonte por danger ... [Actualidad] 127 12/01/2010
certificacion cesantias porvenir por martha perez ... [Actualidad] 6 04/03/2010
cerificado fondo horizonte de pensiones y cesantias por carlos fideligno torres herrera ... [Actualidad] 148 18/01/2010
certificado de afiliacion por EDDY ... [Actualidad] 0 14/03/2010
Cursores por nopodes ... [ORACLE] 0 14/03/2010
peticion urgente mi nombre es juan pablo osorio cardona cc 71115218 por juancho ... [Actualidad] 0 14/03/2010
peticion por juancho ... [Actualidad] 0 14/03/2010
estrato de pencion por carlos antonio mateus gomez ... [Actualidad] 0 14/03/2010
quiero aprender c# por alcapego ... [C#] 4 16/02/2008
certificado pensiones horizonte por angela patricia rodriguez ... [Actualidad] 140 26/01/2010
certificado de penciones y cesantias por fredy ... [Actualidad] 2 29/01/2010

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
31/03/2006 Operadores en PL/SQL    forma parte de...Tutorial PL/SQL
12/01/2006 Introducción a PLSQL    forma parte de...Tutorial PL/SQL
22/10/2005 Insertar datos. INSERT    forma parte de...Tutorial SQL
11/10/2006 Métodos    forma parte de...Tutorial C#
13/10/2006 Constructores    forma parte de...Tutorial C#
25/08/2007 Variables en Transact SQL    forma parte de...Tutorial de Transact SQL
22/10/2005 Vistas    forma parte de...Tutorial SQL
14/07/2007 Como encriptar texto y variables usando algoritmos estandard como DES o TRIPLEDES
21/11/2007 Desencriptar Texto y variables con .NET VB y C# (segunda parte)
13/08/2007 Reiniciar un campo identity en SQL Server

 

Encuesta
¿A que perfil te adaptas mejor?




[Ver] [Votar]