Descarga contenido exclusivo en
Ofimática y Programación + Tecnología

domingo, 27 de mayo de 2012



iTextSharp y VB .Net: Texto con formato


pay per click En la primera entrega sobre la librería iTextSharp ya vimos como insertar texto simple, pero claro que esa no es la... thumbnail 1 summary



En la primera entrega sobre la librería iTextSharp ya vimos como insertar texto simple, pero claro que esa no es la única opción para el texto ya que también es posible darle formato.

Tomando el ejemplo itextsharp - texto.rar vamos a modificarlo para ver distintas opciones de formato.

1
Para darle color al texto modificamos el código para que quede de la siguiente forma:

 
Imports iTextSharp.text.pdf
Imports iTextSharp.text
Imports System.IO


Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim ruta As Integer
        Save.Filter = "Archivos Adobe PDF (*.pdf)|*.pdf"
        'save.FileName = t2.Text
        ruta = Save.ShowDialog
        If ruta = 2 Then GoTo salir

        Try
            Kill(Save.FileName)
        Catch ex As Exception
        End Try

        Dim oDoc As New iTextSharp.text.Document(PageSize.LETTER, 40, 20, 0, 0)
        Dim pdfw As iTextSharp.text.pdf.PdfWriter
        Dim cb As PdfContentByte
        Dim linea As PdfContentByte
        Dim rectangulo As PdfContentByte
        Dim fuente As iTextSharp.text.pdf.BaseFont
        Dim NombreArchivo As String = Save.FileName
        Try
            pdfw = PdfWriter.GetInstance(oDoc, New FileStream(NombreArchivo, _
            FileMode.Create, FileAccess.Write, FileShare.None))

            'Apertura del documento.
            oDoc.Open()
            cb = pdfw.DirectContent
            linea = pdfw.DirectContent
            rectangulo = pdfw.DirectContent

            'Agregamos una pagina.
            oDoc.NewPage()

            'Iniciamos el flujo de bytes.
            cb.BeginText()

            'Instanciamos el objeto para la tipo de letra.
            fuente = FontFactory.GetFont(FontFactory.HELVETICA, iTextSharp.text.Font.DEFAULTSIZE, iTextSharp.text.Font.NORMAL).BaseFont
            cb.SetFontAndSize(fuente, 8)




            'Seteamos el color del texto a escribir.
            cb.SetColorFill(iTextSharp.text.BaseColor.BLACK)
            cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "TEXTO de prueba (centro)", 315, 730, 0)

            'Seteamos el color del texto en azul.
            cb.SetColorFill(iTextSharp.text.BaseColor.BLUE)
            cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "TEXTO de prueba (izquierda)", 315, 700, 0)

            'Seteamos el color del texto con formato CMYK.
            cb.SetColorFill(New CMYKColor(0.631F, 0.439F, 0.0F, 0.161F))
            cb.ShowTextAligned(PdfContentByte.ALIGN_RIGHT, "TEXTO de prueba (derecha)", 315, 670, 0)




            'Fin del flujo de bytes.
            cb.EndText()
            'Forzamos vaciamiento del buffer.
            pdfw.Flush()
            'Cerramos el documento.
            oDoc.Close()
        Catch ex As Exception
            'Si hubo una excepcion y el archivo existe …
            If File.Exists(NombreArchivo) Then
                'Cerramos el documento si esta abierto.
                'Y asi desbloqueamos el archivo para su eliminacion.
                If oDoc.IsOpen Then oDoc.Close()
                '… lo eliminamos de disco.
                File.Delete(NombreArchivo)
            End If
            Throw New Exception("Error al generar archivo PDF (" & ex.Message & ")")
        Finally
            cb = Nothing
            pdfw = Nothing
            oDoc = Nothing
        End Try
salir:
    End Sub
End Class


Con esta modificación obtenemos lo siguiente:




Podemos poner el nombre del color:
 
cb.SetColorFill(iTextSharp.text.BaseColor.BLUE)

También podemos personalizar con formato de color CMYK
 
cb.SetColorFill(New CMYKColor(0.631F, 0.439F, 0.0F, 0.161F))

Descarga del ejemplo aquí: itextsharp - texto con formato 1.rar



2
Por supuesto que el color no es lo único que interesa en el formato del texto, también se tienen opciones como cursiva y negrita, esto con la siguiente modificación en el código de nuestro ejemplo:


 
Imports iTextSharp.text.pdf
Imports iTextSharp.text
Imports System.IO


Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim ruta As Integer
        Save.Filter = "Archivos Adobe PDF (*.pdf)|*.pdf"
        'save.FileName = t2.Text
        ruta = Save.ShowDialog
        If ruta = 2 Then GoTo salir

        Try
            Kill(Save.FileName)
        Catch ex As Exception
        End Try

        Dim oDoc As New iTextSharp.text.Document(PageSize.LETTER, 40, 20, 0, 0)
        Dim pdfw As iTextSharp.text.pdf.PdfWriter
        Dim cb As PdfContentByte
        Dim linea As PdfContentByte
        Dim rectangulo As PdfContentByte
        Dim fuente1 As iTextSharp.text.pdf.BaseFont
        Dim fuente2 As iTextSharp.text.pdf.BaseFont
        Dim fuente3 As iTextSharp.text.pdf.BaseFont
        Dim NombreArchivo As String = Save.FileName
        Try
            pdfw = PdfWriter.GetInstance(oDoc, New FileStream(NombreArchivo, _
            FileMode.Create, FileAccess.Write, FileShare.None))

            'Apertura del documento.
            oDoc.Open()
            cb = pdfw.DirectContent
            linea = pdfw.DirectContent
            rectangulo = pdfw.DirectContent

            'Agregamos una pagina.
            oDoc.NewPage()

            'Iniciamos el flujo de bytes.
            cb.BeginText()




            fuente1 = FontFactory.GetFont(FontFactory.HELVETICA, iTextSharp.text.Font.DEFAULTSIZE, iTextSharp.text.Font.NORMAL).BaseFont 'fuente negrita
            cb.SetFontAndSize(fuente1, 8) 'llamada a la fuente y tamaño
            'Seteamos el color del texto a escribir.
            cb.SetColorFill(iTextSharp.text.BaseColor.BLACK)
            cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "TEXTO de prueba (centro)", 315, 730, 0)

            fuente2 = FontFactory.GetFont(FontFactory.HELVETICA, iTextSharp.text.Font.DEFAULTSIZE, iTextSharp.text.Font.BOLD).BaseFont 'fuente cursiva
            cb.SetFontAndSize(fuente2, 8) 'llamada a la fuente y tamaño
            'Seteamos el color del texto en azul.
            cb.SetColorFill(iTextSharp.text.BaseColor.BLUE)
            cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "TEXTO de prueba (izquierda)", 315, 700, 0)

            fuente3 = FontFactory.GetFont(FontFactory.HELVETICA, iTextSharp.text.Font.DEFAULTSIZE, iTextSharp.text.Font.ITALIC).BaseFont 'fuente subrayada
            cb.SetFontAndSize(fuente3, 8) 'llamada a la fuente y tamaño
            'Seteamos el color del texto con formato CMYK.
            cb.SetColorFill(New CMYKColor(0.631F, 0.439F, 0.0F, 0.161F))
            cb.ShowTextAligned(PdfContentByte.ALIGN_RIGHT, "TEXTO de prueba (derecha)", 315, 670, 0)




            'Fin del flujo de bytes.
            cb.EndText()
            'Forzamos vaciamiento del buffer.
            pdfw.Flush()
            'Cerramos el documento.
            oDoc.Close()
        Catch ex As Exception
            'Si hubo una excepcion y el archivo existe …
            If File.Exists(NombreArchivo) Then
                'Cerramos el documento si esta abierto.
                'Y asi desbloqueamos el archivo para su eliminacion.
                If oDoc.IsOpen Then oDoc.Close()
                '… lo eliminamos de disco.
                File.Delete(NombreArchivo)
            End If
            Throw New Exception("Error al generar archivo PDF (" & ex.Message & ")")
        Finally
            cb = Nothing
            pdfw = Nothing
            oDoc = Nothing
        End Try
salir:
    End Sub
End Class


Con esta modificación obtenemos lo siguiente:

Descarga del ejemplo aquí: itextsharp - texto con formato 2.rar



3
También hay una opción para hacer rotar el texto con la siguiente modificación del código:

 
Imports iTextSharp.text.pdf
Imports iTextSharp.text
Imports System.IO


Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim ruta As Integer
        Save.Filter = "Archivos Adobe PDF (*.pdf)|*.pdf"
        'save.FileName = t2.Text
        ruta = Save.ShowDialog
        If ruta = 2 Then GoTo salir

        Try
            Kill(Save.FileName)
        Catch ex As Exception
        End Try

        Dim oDoc As New iTextSharp.text.Document(PageSize.LETTER, 40, 20, 0, 0)
        Dim pdfw As iTextSharp.text.pdf.PdfWriter
        Dim cb As PdfContentByte
        Dim linea As PdfContentByte
        Dim rectangulo As PdfContentByte
        Dim fuente1 As iTextSharp.text.pdf.BaseFont
        Dim fuente2 As iTextSharp.text.pdf.BaseFont
        Dim fuente3 As iTextSharp.text.pdf.BaseFont
        Dim NombreArchivo As String = Save.FileName
        Try
            pdfw = PdfWriter.GetInstance(oDoc, New FileStream(NombreArchivo, _
            FileMode.Create, FileAccess.Write, FileShare.None))

            'Apertura del documento.
            oDoc.Open()
            cb = pdfw.DirectContent
            linea = pdfw.DirectContent
            rectangulo = pdfw.DirectContent

            'Agregamos una pagina.
            oDoc.NewPage()

            'Iniciamos el flujo de bytes.
            cb.BeginText()




            fuente1 = FontFactory.GetFont(FontFactory.HELVETICA, iTextSharp.text.Font.DEFAULTSIZE, iTextSharp.text.Font.NORMAL).BaseFont 'fuente negrita
            cb.SetFontAndSize(fuente1, 8) 'llamada a la fuente y tamaño
            'Seteamos el color del texto a escribir.
            cb.SetColorFill(iTextSharp.text.BaseColor.BLACK)
            cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "TEXTO de prueba (izquierda)", 315, 670, 90) 'giro de 90 grados

            fuente2 = FontFactory.GetFont(FontFactory.HELVETICA, iTextSharp.text.Font.DEFAULTSIZE, iTextSharp.text.Font.BOLD).BaseFont 'fuente cursiva
            cb.SetFontAndSize(fuente2, 8) 'llamada a la fuente y tamaño
            'Seteamos el color del texto en azul.
            cb.SetColorFill(iTextSharp.text.BaseColor.BLUE)
            cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "TEXTO de prueba (izquierda)", 315, 640, 60) 'giro de 60 grados

            fuente3 = FontFactory.GetFont(FontFactory.HELVETICA, iTextSharp.text.Font.DEFAULTSIZE, iTextSharp.text.Font.ITALIC).BaseFont 'fuente subrayada
            cb.SetFontAndSize(fuente3, 8) 'llamada a la fuente y tamaño
            'Seteamos el color del texto con formato CMYK.
            cb.SetColorFill(New CMYKColor(0.631F, 0.439F, 0.0F, 0.161F))
            cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "TEXTO de prueba (izquierda)", 315, 610, 30) 'giro de 30 grados




            'Fin del flujo de bytes.
            cb.EndText()
            'Forzamos vaciamiento del buffer.
            pdfw.Flush()
            'Cerramos el documento.
            oDoc.Close()
        Catch ex As Exception
            'Si hubo una excepcion y el archivo existe …
            If File.Exists(NombreArchivo) Then
                'Cerramos el documento si esta abierto.
                'Y asi desbloqueamos el archivo para su eliminacion.
                If oDoc.IsOpen Then oDoc.Close()
                '… lo eliminamos de disco.
                File.Delete(NombreArchivo)
            End If
            Throw New Exception("Error al generar archivo PDF (" & ex.Message & ")")
        Finally
            cb = Nothing
            pdfw = Nothing
            oDoc = Nothing
        End Try
salir:
    End Sub
End Class


Con esta modificación obtenemos lo siguiente:

Descarga del ejemplo aquí: itextsharp - texto con formato 3.rar


Existen otras opciones de formato que pueden explorar.