A continuación tenemos un ejemplo que nos permite exportar datos desde un datagridview a un PDF.
Para poder realizar dicha proceso se utiliza como referencia itextsharp.
Código fuente
Paso 1: Agregar las referencias
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports System.IO
Paso 2: Cargamos los productos en el datagridview
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Listar_Productos()
End Sub
Paso 3: Procedimiento para mostrar los productos
Sub Listar_Productos()
Try
Dim Codigo() As Integer = {1, 2, 3, 4, 5}
Dim Producto() As String = {"Camara", "Impresora", "Monitor", "Ordenador", "Scanner"}
Dim Precio() As Double = {12.5, 20.5, 78.5, 20.25, 12.8}
Dim Stock() As Double = {100, 150, 250, 300, 80}
Dim RutaImagen() As String = {"D:\Exportar Desde Datagridview a PDF\Imagenes\camara.jpg",
"D:\Exportar Desde Datagridview a PDF\Imagenes\Impresora.jpg",
"D:\Exportar Desde Datagridview a PDF\Imagenes\monitor.jpg",
"D:\Exportar Desde Datagridview a PDF\Imagenes\ordenador.jpg",
"D:\Exportar Desde Datagridview a PDF\Imagenes\scanner.jpg"}
dtgProductos.Rows.Clear()
For i As Integer = 0 To Codigo.Length() - 1
dtgProductos.Rows.Add()
dtgProductos("txt_dtgProductos_Codigo", i).Value = Codigo(i)
dtgProductos("txt_dtgProductos_Producto", i).Value = Producto(i)
dtgProductos("txt_dtgProductos_Precio", i).Value = Precio(i)
dtgProductos("txt_dtgProductos_Stock", i).Value = Stock(i)
dtgProductos("txt_dtgProductos_RutaImagen", i).Value = RutaImagen(i)
dtgProductos("img_dtgProductos_ImagenProducto", i).Value = System.Drawing.Image.FromFile(RutaImagen(i))
Next
Catch ex As Exception
MessageBox.Show(ex.Message, "vb.net", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Paso 4: Método para crear el reporte del PDF
'Metodo para crear el reporte en PDF.
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
Paso 5: Creamos un proceso para crear el reporte
Public Sub ExportarDatosPDF(ByVal document As Document)
'Se crea un objeto PDFTable con el numero de columnas del DataGridView.
Dim datatable As New PdfPTable(dtgProductos.ColumnCount)
'Se asignan algunas propiedades para el diseño del PDF.
datatable.DefaultCell.Padding = 3
Dim headerwidths As Single() = GetColumnasSize(dtgProductos)
datatable.SetWidths(headerwidths)
datatable.WidthPercentage = 100
datatable.DefaultCell.BorderWidth = 2
datatable.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER
'Se crea el encabezado en el PDF.
Dim encabezado As New Paragraph("PRODUCTOS INFORMATICOS", New Font(Font.Name = "Tahoma", 20, Font.Bold))
'Se crea el texto abajo del encabezado.
Dim texto As New Phrase("Reporte productos:" + Now.Date(), New Font(Font.Name = "Tahoma", 14, Font.Bold))
'Se capturan los nombres de las columnas del DataGridView.
For i As Integer = 0 To dtgProductos.ColumnCount - 1
datatable.AddCell(dtgProductos.Columns(i).HeaderText)
Next
datatable.HeaderRows = 1
datatable.DefaultCell.BorderWidth = 1
'Se generan las columnas del DataGridView.
For i As Integer = 0 To dtgProductos.RowCount - 1
For j As Integer = 0 To dtgProductos.ColumnCount - 1
'compruebo que columna contien la imagen y en que columna deseo que se muestre
If (j = 4) Then
'capturo la ruta de la imagen
Dim RutaImage As String
RutaImage = dtgProductos("txt_dtgProductos_RutaImagen", i).Value
'Procedo a convertir a 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(dtgProductos(j, i).Value.ToString())
End If
Next
datatable.CompleteRow()
Next
'Se agrega el PDFTable al documento.
document.Add(encabezado)
document.Add(texto)
document.Add(datatable)
End Sub
Paso 6: Programamos el botón btnExportarPDF
Private Sub btnExportarPDF_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExportarPDF.Click
Try
'Intentar generar el documento.
Dim doc As New Document(PageSize.A4.Rotate(), 10, 10, 10, 10)
'Path que guarda el reporte en el escritorio de windows (Desktop).
Dim filename As String = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\Reporteproductos.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
'Si el intento es fallido, mostrar MsgBox.
MessageBox.Show("No se puede generar el documento PDF.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Resultado
Fuentes.
El código fuente a sido auditado por mi persona desde.
http://ripertec.wordpress.com/tag/exportar-datagridview-a-pdf-visual-basic-2008/