Una vez que tengamos el DataGridView con la información, creamos un botón que llama la función.
Para el ejemplo necesitaremos la librería 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 = 3Dim headerwidths As Single() = GetColumnasSize (DataGridView2)
datatable.SetWidths(headerwidths)
datatable.WidthPercentage = 100
datatable.DefaultCell.BorderWidth = 2datatable.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
0 Comentarios