6/08/2012

Convertir texto a PDF con iTextSharp y Visual Basic .Net VB.Net



Explicamos en este tutorial cómo convertir un texto plano (sin formato) a fichero PDF usando la DLL gratuita iTextSharp y el lenguaje de programación Microsoft Visual Basic .Net 2010. Publicamos una aplicación completa de ejemplo con el código fuente en VB.Net: AjpdSoft Convertir Texto a PDF.


 

Descarga del componente gratuito iTextSharp

Para desarrollar una aplicación que convierta texto en PDF (portable document format ó formato de documento portátil) usaremos la librería iTextSharp, por lo tanto necesitaremos descargar el fichero de esta librería dll. Accederemos a la URL:
http://sourceforge.net/projects/itextsharp
Descargaremos la versión más reciente de iTextSharp (iText#), en nuestro caso: iTextSharp 5.2.1. Se descargará el fichero itextsharp-all-5.2.1.zip, lo descomprimiremos. Este fichero contiene, a su vez, los siguientes ficheros comprimidos:
  • itextsharp-dll-cores-5.2.1.zip
  • itextsharp-dll-xtra-5.2.1.zip
  • itextsharp-src-core-5.2.1.zip
  • itextsharp-src-xtra-5.2.1.zip
iTextSharp está desarrollado en Microsoft Visual C# y, además, la descarga anterior incluye el código fuente completo (itextsharp-src-core-5.2.1.zip). En nuestro caso usaremos la DLL ya compilada de iTextSharp por lo que descomprimiremos el fichero "itextsharp-dll-cores-5.2.1.zip" que contiene el fichero itextsharp.dll, este será el fichero necesario para trabajar con ficheros PDF usando Visual Basic .Net (VB.Net) o Visual C#. Copiaremos este fichero a la carpeta que queramos (por ejemplo la raíz de nuestros proyectos). Más adelante deberemos seleccionarlo desde nuestro proyecto VB.Net:
Descarga del componente gratuito iTextSharp
 

Instalación de Microsoft Visual Studio .Net

Para desarrollar la aplicación que nos permita convertir texto a PDF usaremos el lenguaje de programación Microsoft Visual Basic .Net 2010 perteneciente a la suite de desarrollo Microsoft Visual Studio .Net. En el siguiente tutorial explicamos cómo instalar esta suite de desarrollo:

Convertir texto a PDF con VB.Net y iTextSharp

A continuación explicaremos cómo crear un proyecto o solución en Visual Basic .Net para convertir texto a PDF. Para ello abriremos Visual Basic .Net, pulsaremos en el menú "Archivo" - "Nuevo proyecto":
Convertir texto a PDF con VB.Net y iTextSharp
Seleccionaremos en la parte izquierda "Visual Basic" - "Windows", en la parte derecha seleccionaremos "Aplicación de Windows Forms" e introduciremos el nombre del proyecto, por ejemplo "AjpdSoftConvertirTextoPDF":
Convertir texto a PDF con VB.Net y iTextSharp
Agregaremos la referencia a iTextSharp (iText#), para ello pulsaremos en el menú "Proyecto" - "Agregar referencia":
Convertir texto a PDF con VB.Net y iTextSharp
Pulsaremos en la pestaña "Examinar" y seleccionaremos el fichero "itextsharp.dll" descargado anteriormente:
Convertir texto a PDF con VB.Net y iTextSharp
Añadiremos los "imports" al proyecto, para ello pulsaremos en el menú "Ver" - "Código":
Convertir texto a PDF con VB.Net y iTextSharp
Al principio agregaremos el siguiente código:
Convertir texto a PDF con VB.Net y iTextSharp
Imports iTextSharp
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports System.IO
Añadiremos los siguientes componentes al formulario principal de nuestra aplicación para convertir texto a PDF:
  • TextBox: con la propiedad "Multiline" a True, con nombre (name): txtTexto.
  • Button: cuatro botones para "Abrir fichero", "Limpiar texto", seleccionar fichero PDF, "Generar PDF".
  • TextBox: para los metadatos título, asunto, palabras clave, autor y para el fichero destino PDF.
  • OpenFileDialog: para selección de fichero de texto plano a abrir y convertir a PDF.
  • SaveFileDialog: para seleccionar fichero destino de conversión de texto a PDF.
Convertir texto a PDF con VB.Net y iTextSharp
A continuación mostramos el código fuente VB.Net de cada botón:
  • Botón "Abrir fichero":
  Private Sub btAbrirFicheroTexto_Click(sender As System.Object,
                 e As System.EventArgs) Handles btAbrirFicheroTexto.Click
        dlAbrir.CheckFileExists = True
        dlAbrir.CheckPathExists = True
        dlAbrir.Multiselect = False
        dlAbrir.DefaultExt = "txt"
        dlAbrir.FileName = ""
        dlAbrir.Filter = "Archivos de texto (*.txt)|*.txt|Todos los archivos (*.*)|*.*"
        dlAbrir.Title = "Abrir fichero de texto para convertir a PDF"
        If dlAbrir.ShowDialog = Windows.Forms.DialogResult.OK Then
            Dim objFichero As New  _
                System.IO.StreamReader(dlAbrir.FileName, System.Text.Encoding.Default)
            txtTexto.Text = objFichero.ReadToEnd
  End If
  • Botón "Limpiar texto":
    Private Sub btLimpiarTexto_Click(sender As System.Object,
                 e As System.EventArgs) Handles btLimpiarTexto.Click
        txtTexto.Text = ""
    End Sub

  • Botón "Seleccionar PDF":
    Private Sub btSeleccionarPDF_Click(sender As System.Object, _
                 e As System.EventArgs) Handles btSeleccionarPDF.Click
        dlGuardar.CheckFileExists = False
        dlGuardar.CheckPathExists = True
        dlGuardar.DefaultExt = "txt"
        dlGuardar.FileName = ""
        dlGuardar.Filter = "Archivos PDF (*.pdf)|*.pdf|Todos los archivos (*.*)|*.*"
        dlGuardar.Title = "Fichero PDF destino"
        If dlGuardar.ShowDialog = Windows.Forms.DialogResult.OK Then
            txtFicheroPDF.Text = dlGuardar.FileName
        End If
    End Sub
  • Botón "Generar PDF":
    Private Sub btGenerarPDF_Click(sender As System.Object,
                 e As System.EventArgs) Handles btGenerarPDF.Click
        If txtTexto.Text = "" Then
            MsgBox("Debe introducir el texto a convertir a PDF.",
                   MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly)
            txtTexto.Focus()
        Else
            If txtFicheroPDF.Text = "" Then
                MsgBox("Debe indicar el fichero PDF destino de la conversión del texto.",
                       MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly)
                txtFicheroPDF.Focus()
            Else
                Try
                    'Creamos el objeto documento PDF
                    Dim documentoPDF As New Document
                    PdfWriter.GetInstance(documentoPDF,
                        New FileStream(txtFicheroPDF.Text, FileMode.Create))
                    documentoPDF.Open()

                    'Escribimos el texto en el objeto documento PDF
                    documentoPDF.Add(New Paragraph(txtTexto.Text,
                          FontFactory.GetFont(FontFactory.TIMES, 11,
                              iTextSharp.text.Font.NORMAL)))

                    '  documentoPDF.Add(New Paragraph("Documento generado por http://www.ajpdsoft.com",
                    '      FontFactory.GetFont(FontFactory.COURIER, 8,
                    '          iTextSharp.text.Font.NORMAL)))

                    'Añadimos los metadatos para el fichero PDF
                    documentoPDF.AddAuthor(txtAutor.Text)
                    documentoPDF.AddCreator("AjpdSoft Convertir texto a PDF - www.ajpdsoft.com")
                    documentoPDF.AddKeywords(txtPalabrasClave.Text)
                    documentoPDF.AddSubject(txtAsunto.Text)
                    documentoPDF.AddTitle(txtTitulo.Text)
                    documentoPDF.AddCreationDate()
                    'Cerramos el objeto documento, guardamos y creamos el PDF
                    documentoPDF.Close()
                    'Comprobamos si se ha creado el fichero PDF
                    If System.IO.File.Exists(txtFicheroPDF.Text) Then
                        If MsgBox("Texto convertido a fichero PDF correctamente " + _
                               "¿desea abrir el fichero PDF resultante?",
                               MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
                            'Abrimos el fichero PDF con la aplicación asociada
                            System.Diagnostics.Process.Start(txtFicheroPDF.Text)
                        End If
                    Else
                        MsgBox("El fichero PDF no se ha generado, " + _
                               "compruebe que tiene permisos en la carpeta de destino.",
                               MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly)
                    End If
                Catch ex As Exception
                    MsgBox("Se ha producido un error al intentar convertir el texto a PDF: " + _
                        vbCrLf + vbCrLf + ex.Message,
                        MsgBoxStyle.Critical + MsgBoxStyle.OkOnly)
                End Try
            End If
        End If
    End Sub

AjpdSoft Convertir Texto a PDF

AjpdSoft Convertir Texto a PDF permite convertir texto plano (sin formato) a fichero PDF sin necesidad de usar impresoras PDF ni Acrobat Professional. El manejo de la aplicación es muy sencillo, es suficiente con escribir el texto a convertir en el cuadro de texto, o bien pulsar en el botón "Abrir fichero" y seleccionar un fichero de texto plano, la aplicación lo mostrará en el cuadro de texto. Una vez que hayamos introducido el texto a convertir a PDF, introduciremos los metadatos: título, asunto, palabras clave y autor. Seleccionaremos el fichero PDF de destino (el que se creará en la conversión) en "Fichero PDF de destino" y para generar el fichero PDF pulsaremos en "Generar PDF":
AjpdSoft Convertir Texto a PDF
Si la conversión de texto a PDF se realiza correctamente la aplicación AjpdSoft Convertir Texto a PDF mostrará el siguiente mensaje, pulsando en "Sí" se abrirá el fichero PDF resultante:
AjpdSoft Convertir Texto a PDF
Con el texto: "Texto convertido a fichero PDF correctamente ¿desea abrir el fichero PDF resultante?"
El fichero PDF abierto con Acrobat Reader:
AjpdSoft Convertir Texto a PDF
Consultando las propiedades del fichero PDF generado podremos ver los metadatos introducidos anteriormente (título, autor, asunto, palabras clave, creador):
AjpdSoft Convertir Texto a PDF

Código fuente completo de AjpdSoft Convertir Texto a PDF

A continuación mostramos el enlace para descargar gratuitamente el código fuente completo de la aplicación AjpdSoft Convertir Texto a PDF desarrollada con VB.Net 2010 (Microsoft Visual Basic .Net 2010):
El listado completo del código fuente de la aplicación AjpdSoft Convertir Texto a PDF:
Imports iTextSharp
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports System.IO


Public Class formPDF

    Private Sub btLimpiarTexto_Click(sender As System.Object,
                 e As System.EventArgs) Handles btLimpiarTexto.Click
        txtTexto.Text = ""
    End Sub

    Private Sub btAbrirFicheroTexto_Click(sender As System.Object,
                 e As System.EventArgs) Handles btAbrirFicheroTexto.Click
        dlAbrir.CheckFileExists = True
        dlAbrir.CheckPathExists = True
        dlAbrir.Multiselect = False
        dlAbrir.DefaultExt = "txt"
        dlAbrir.FileName = ""
        dlAbrir.Filter = "Archivos de texto (*.txt)|*.txt|Todos los archivos (*.*)|*.*"
        dlAbrir.Title = "Abrir fichero de texto para convertir a PDF"
        If dlAbrir.ShowDialog = Windows.Forms.DialogResult.OK Then
            Dim objFichero As New  _
                System.IO.StreamReader(dlAbrir.FileName, System.Text.Encoding.Default)
            txtTexto.Text = objFichero.ReadToEnd
        End If
    End Sub

    Private Sub btGenerarPDF_Click(sender As System.Object,
                 e As System.EventArgs) Handles btGenerarPDF.Click
        If txtTexto.Text = "" Then
            MsgBox("Debe introducir el texto a convertir a PDF.",
                   MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly)
            txtTexto.Focus()
        Else
            If txtFicheroPDF.Text = "" Then
                MsgBox("Debe indicar el fichero PDF destino de la conversión del texto.",
                       MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly)
                txtFicheroPDF.Focus()
            Else
                Try
                    'Creamos el objeto documento PDF
                    Dim documentoPDF As New Document
                    PdfWriter.GetInstance(documentoPDF,
                        New FileStream(txtFicheroPDF.Text, FileMode.Create))
                    documentoPDF.Open()

                    'Escribimos el texto en el objeto documento PDF
                    documentoPDF.Add(New Paragraph(txtTexto.Text,
                          FontFactory.GetFont(FontFactory.TIMES, 11,
                              iTextSharp.text.Font.NORMAL)))

                    '  documentoPDF.Add(New Paragraph("Documento generado por http://www.ajpdsoft.com",
                    '      FontFactory.GetFont(FontFactory.COURIER, 8,
                    '          iTextSharp.text.Font.NORMAL)))

                    'Añadimos los metadatos para el fichero PDF
                    documentoPDF.AddAuthor(txtAutor.Text)
                    documentoPDF.AddCreator("AjpdSoft Convertir texto a PDF - www.ajpdsoft.com")
                    documentoPDF.AddKeywords(txtPalabrasClave.Text)
                    documentoPDF.AddSubject(txtAsunto.Text)
                    documentoPDF.AddTitle(txtTitulo.Text)
                    documentoPDF.AddCreationDate()
                    'Cerramos el objeto documento, guardamos y creamos el PDF
                    documentoPDF.Close()
                    'Comprobamos si se ha creado el fichero PDF
                    If System.IO.File.Exists(txtFicheroPDF.Text) Then
                        If MsgBox("Texto convertido a fichero PDF correctamente " + _
                               "¿desea abrir el fichero PDF resultante?",
                               MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
                            'Abrimos el fichero PDF con la aplicación asociada
                            System.Diagnostics.Process.Start(txtFicheroPDF.Text)
                        End If
                    Else
                        MsgBox("El fichero PDF no se ha generado, " + _
                               "compruebe que tiene permisos en la carpeta de destino.",
                               MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly)
                    End If
                Catch ex As Exception
                    MsgBox("Se ha producido un error al intentar convertir el texto a PDF: " + _
                        vbCrLf + vbCrLf + ex.Message,
                        MsgBoxStyle.Critical + MsgBoxStyle.OkOnly)
                End Try
            End If
        End If
    End Sub

    Private Sub btSeleccionarPDF_Click(sender As System.Object, _
                 e As System.EventArgs) Handles btSeleccionarPDF.Click
        dlGuardar.CheckFileExists = False
        dlGuardar.CheckPathExists = True
        dlGuardar.DefaultExt = "txt"
        dlGuardar.FileName = ""
        dlGuardar.Filter = "Archivos PDF (*.pdf)|*.pdf|Todos los archivos (*.*)|*.*"
        dlGuardar.Title = "Fichero PDF destino"
        If dlGuardar.ShowDialog = Windows.Forms.DialogResult.OK Then
            txtFicheroPDF.Text = dlGuardar.FileName
        End If
    End Sub

    Private Sub formPDF_Load(sender As System.Object,
                e As System.EventArgs) Handles MyBase.Load
        txtFicheroPDF.Text =
            System.IO.Path.Combine(System.Environment.GetFolderPath(
                Environment.SpecialFolder.MyDocuments), "documento.pdf")
    End Sub
End Class
 

Artículos relacionados

 

Créditos

Artículo realizado íntegramente por Alonsojpd miembro fundador del Proyecto AjpdSoft.

No hay comentarios: