Enviar el contenido de un DataGridView a un archivo .PDF

Una vez que tengamos el DataGridView con la información, creamos un botón que llama la función.
El DataGridView tendrá una columna llamada RUTA_IMAGEN que almacenara la ruta donde se encuentra la imagen a exportar, ejemplo: "c:\imagenes\articulo1.jpg"

Para el ejemplo necesitaremos la librería iTextSharp.
Puedes descargar la librería: http://sourceforge.net/projects/itextsharp/ 


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

Private Sub impresion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles impresion.Click
Try
   Dim doc As New Document(PageSize.A4.Rotate(), 10, 10, 10, 10)
   'Guarda el reporte en el escritorio de windows (Desktop).
   Dim filename As String = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\Reporte.pdf"
   Dim file As New FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.ReadWrite)
  PdfWriter.GetInstance(doc, file)
  doc.Open()
  ExportarDatosPDF(doc)
  doc.Close()
 
Process.Start(filename)
Catch ex As Exception
   MessageBox.Show(ex.Message)
End Try
End Sub


Public Function GetColumnasSize(ByVal dg As DataGridView) As Single()
   Dim values As Single() = New Single(dg.ColumnCount - 1) {}
   For i As Integer = 0 To dg.ColumnCount - 1
     values(i) = CSng(dg.Columns(i).Width)
   Next
   Return values
End Function

Public Sub ExportarDatosPDF(ByVal document As Document)
   'Se crea un objeto PDFTable con el numero de columnas del DataGridView.
   Dim datatable As New PdfPTable(DataGridView2.ColumnCount)
   'Se asignan las propiedades del .PDF
   datatable.DefaultCell.Padding = 3
   Dim headerwidths As Single() = GetColumnasSize  (DataGridView2)
   datatable.SetWidths(headerwidths)
   datatable.WidthPercentage = 100
   datatable.DefaultCell.BorderWidth = 2
datatable.DefaultCell.HorizontalAlignment = Element.ALIGN_LEFT
   'Se crea el encabezado en el PDF.
   Dim encabezado As New Paragraph("REPORTE", New Font(Font.Name = "Tahoma", 20, Font.Bold))
   Dim texto1 As New Paragraph("Nombre: " + Me.TextBox_nombre.Text, New Font(Font.Name = "Tahoma", 14, Font.Bold))
   Dim texto2 As New Paragraph("Fecha: " + Me.DateTimePicker_fecha.Text, New Font(Font.Name = "Tahoma", 14, Font.Bold))
   'Se capturan los nombres de las columnas del DataGridView.
   For i As Integer = 0 To DataGridView2.ColumnCount - 1
     datatable.AddCell(DataGridView2.Columns(i).HeaderText)
 
 
   Next
   datatable.HeaderRows = 1
   datatable.DefaultCell.BorderWidth = 1
 
'Se generan las columnas del DataGridView.
   For i As Integer = 0 To DataGridView2.RowCount - 2
       For j As Integer = 0 To DataGridView2.ColumnCount - 1
          If (j = 3) Then 'ubica la imagen en la columna 3 de datagridview
             'capturo la ruta de la imagen
             Dim RutaImage As String
             RutaImage = DataGridView2("ruta_imagen", i).Value
             'Procedo a convertir la imagen de tipo itextsharp.text.image
             Dim Img As Image = Image.GetInstance(RutaImage)
             'agrego la imagen a la celda
             datatable.AddCell(Img)  
           Else
             datatable.AddCell(DataGridView2(j, i).Value.ToString())  
           End If
       Next
       datatable.CompleteRow()  
    Next
    'Se agrega el PDFTable al documento.
    document.Add(encabezado)
    document.Add(texto1)
    document.Add(texto2)
    document.Add(datatable)
 
 
End Sub

Publicar un comentario

9 Comentarios

  1. Buenas tardes. Gracias por él tutoríal.
    Como puedo modificar el tamaño de la Fuente en el DTGV? Ej. Un tamaño de fuente 8.

    Muchas gracias

    ResponderBorrar
  2. Buenas tardes. Gracias por él tutoríal.
    Como puedo modificar el tamaño de la Fuente en el DTGV? Ej. Un tamaño de fuente 8.

    Muchas gracias

    ResponderBorrar
  3. Muchas gracias por el tutorial.
    Como podría modificar el tamaño de fuente del DTGV exportado al PDF.
    Ej. Que lo exporte con un tamaño de fuente 8.

    Muchas gracias.

    ResponderBorrar
  4. Muchas gracias por el tutorial.
    Como podría modificar el tamaño de fuente del DTGV exportado al PDF.
    Ej. Que lo exporte con un tamaño de fuente 8.

    Muchas gracias.

    ResponderBorrar
  5. Solo modifica las líneas New Font(Font.Name = "Tahoma", 14, Font.Bold) con el tamaño y fuente que necesites.

    ResponderBorrar
  6. hola en esta linea
    Process.Start(filename)
    se origina el error de "No se ha podido encontrar la aplicación
    el .pdf lo hace , pero no se muestra, que puede ser?

    ResponderBorrar