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


Cualquier duda a mis correos jossm04@gmail.com nos vemos

Mi proyecto: https://mega.co.nz/#!ZdsHEQ4B!DlzOgglJFAGCI2GY85a9hjtHw3xvfc7VyT6GS_yi07s

Comentarios

  1. Hola, Gracias por tu aporte. Como se haria para que la imagen insertada aparezca en todas las paginas del documento pdf?

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Imprimir directamente ReportViewer a impresora predeterminada

DevComponents DotnetBar 12.5.0.2

Metodo Iterativo Gauss-Seidel en Visual Basic