Exportar Datagridview a pdf parte II
Un buen día amigos, continuando con la segunda parte de este post, que por cierto muy difundido y un tema que a nadie se le hace extraño ya que existen muchas publicaciones sobre esto en la red. En esta ocasión le he agregado a mi reporte muchas mas cosas como una imagen, nueva etiquetas, margenes, etc.
Les muestro la codificación:
Imports System.IO
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'TODO: esta línea de código carga datos en la tabla 'InfolabDataSet.Granulometria' Puede moverla o quitarla según sea necesario.
Me.GranulometriaTableAdapter.Fill(Me.InfolabDataSet.Granulometria)
Dim items As Integer = DataGridView1.Rows.Count - 1
itemx.Text = items
End Sub
Private Sub ToolStripDropDownButton1_Click(sender As Object, e As EventArgs) Handles ToolStripDropDownButton1.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) + "\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
'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
Public Sub ExportarDatosPDF(ByVal document As Document)
'Se crea un objeto PDFTable con el numero de columnas del DataGridView.
Dim datatable As New PdfPTable(DataGridView1.ColumnCount)
document.SetMargins(10, 10, 40, 40) 'establece los margenes
'Se asignan algunas propiedades para el diseño del PDF.
datatable.DefaultCell.Padding = 3 'regula el interlineado en celdas
Dim headerwidths As Single() = GetColumnasSize()
datatable.SetWidths(headerwidths)
datatable.WidthPercentage = 100 'ancho de la celda
' datatable.DefaultCell.Border = 1
datatable.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER
datatable.DefaultCell.BorderWidth = 1 'grosor de linea
'Se crea el encabezado en el PDF.
Dim encabezado As New Paragraph("Reporte", New Font(Font.Name = "Tahoma", 20, Font.Bold))
Dim texto As New Phrase("Reporte Ejemplo: " + Now.Date(), New Font(Font.Name = "Tahoma", 14, Font.Bold))
'------------------Agrego nueva etiqueta------------------
Dim texto2 As New Phrase("Direccion: Catamayo Km 4 1/2 via a la Costa ", New Font(Font.Name = "Tahoma", 9, Font.Bold))
'------------------------------------------------------------
'--------------Agregar la imagen-----------------------
Dim imagen As iTextSharp.text.Image 'declaración de imagen
imagen = iTextSharp.text.Image.GetInstance(My.Application.Info.DirectoryPath & "\logomalca.jpg") 'nombre y ruta de la imagen a insertar
imagen.ScalePercent(32.32) 'escala al tamaño de la imagen
imagen.SetAbsolutePosition(500, 40) 'posición en la que se inserta. 40 (de izquierda a derecha). 500 (de abajo hacia arriba)
' document.Add(imagen) 'se agrega la imagen al documento
imagen.SetAbsolutePosition(600, 500) 'posición en la que se inserta. 140 (de izquierda a derecha). 500 (de abajo hacia arriba)
imagen.RotationDegrees = 0 ' rotación de la imagen
document.Add(imagen) 'se agrega la imagen al documento
'--------------------------------------------------------
'Se capturan los nombres de las columnas del DataGridView.
For i As Integer = 0 To DataGridView1.ColumnCount - 1
datatable.AddCell(DataGridView1.Columns(i).HeaderText)
Next
datatable.HeaderRows = 1
datatable.DefaultCell.BorderWidth = 1
For i As Integer = 0 To DataGridView1.Rows.Count - 2
For j As Integer = 0 To DataGridView1.Columns.Count - 1
datatable.AddCell((DataGridView1(j, i).Value).ToString)
Next
datatable.CompleteRow()
Next
datatable.CompleteRow()
'Dim pageN As String
'pageN = document.PageNumber
'Dim ch As New Chunk("Página " & pageN)
'document.Add(ch)
'Se agrega etiquetas
document.Add(encabezado)
document.Add(texto)
' --------------Codigo Agregado para mostrar nueva etiqueta----------------
document.Add(New Paragraph(" ")) 'Salto de linea
document.Add(texto2)
' -----------------------------------------------
' cerrar el datable
' numeropag.Ag(1, PdfPageLabels.LOWERCASE_ROMAN_NUMERALS)
document.Add(datatable)
End Sub
'ajustando las columnas
Public Function GetColumnasSize() As Single()
Dim values As Single() = New Single(DataGridView1.ColumnCount - 1) {}
For i As Integer = 0 To DataGridView1.ColumnCount - 1
values(i) = CSng(DataGridView1.Columns(i).Width)
Next
Return values
End Function
End Class
Mi captura del programa
Mi captura de la salida a Pdf
Mi proyecto: https://mega.co.nz/#!ZdsHEQ4B!DlzOgglJFAGCI2GY85a9hjtHw3xvfc7VyT6GS_yi07s
Hola, Gracias por tu aporte. Como se haria para que la imagen insertada aparezca en todas las paginas del documento pdf?
ResponderEliminar