Tutoriales gratuitos para el aprendizaje de la programacion informatica! Recuerda que si lo puedes imaginar... lo puedes programar!

Exportar GRID a PDF

Crear proyecto:



En el form1 agregar:
  • 1 DataGridView
  • 1 Button


Crear la conexion para llenar el DataGridView: 

'En caso de dudas ver tutorial de conexion->  Conexión con sql desde .net 

Codigo del formulario

'PDF---------------------------

Imports iTextSharp.text
Imports iTextSharp.text.pdf
'------------------------------
Imports System.ComponentModel
Imports System.Data
Imports System.Data.OleDb
Imports System.Data.SqlClient
Imports System.IO
Public Class FORM1
    Public CONEXION As New OleDbConnection("PROVIDER=SQLOLEDB;" &
                               "DATA SOURCE=NOMBRE DEL SERVIDOR;" &
                                "INITIAL CATALOG=BASE DE DATOS;" &
                                "USER ID=USUARIO;PASSWORD=CLAVE")
    Dim SQL As String
    Public ORDEN_BD As OleDb.OleDbCommand
    Private D_TABLE As DataTable
    Private D_ADAPTER As OleDbDataAdapter
    Sub CONSULTA()
        CONEXION.Open()
        SQL = "SELECT * FROM TABLA ORDER BY CAMPO"
        ORDEN_BD = New OleDb.OleDbCommand(SQL, CONEXION)
        ORDEN_BD.CommandType = CommandType.Text
        ORDEN_BD.ExecuteNonQuery()
        REM CIERRO LA CONEXION
        D_ADAPTER = New OleDbDataAdapter(ORDEN_BD)
        D_TABLE = New DataTable
        D_ADAPTER.Fill(D_TABLE)
        DataGridView1.DataSource = D_TABLE
        CONEXION.Close()
    End Sub
    Private Sub FORM1_Load(sender As Object, e As EventArgsHandles MyBase.Load
        Call CONSULTA()
    End Sub
'PDF ----------------------------------------------------------
    'Funcion que obtiene el tamaño de las columnas del DataGridView.
    'La funcion se usara en el metodo para crear el reporte en PDF.
    Public Function GetColumnasSize(ByVal dg As DataGridViewAs 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
    ' Metodo para crear el reporte en PDF.
    Public Sub ExportarDatosPDF(ByVal document As Document)
        'Se crea un objeto PDFTable con el numero de columnas del DataGridView. 
        Dim datatable As New PdfPTable(Grid.ColumnCount)
        'Se asignan algunas propiedades para el diseño del PDF.
        datatable.DefaultCell.Padding = 3
        Dim headerwidths As Single() = GetColumnasSize(Grid)
        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("TITULO"New Font(Font.Name = "Tahoma", 20, Font.Bold))
        'Se crea el texto abajo del encabezado.
        Dim texto As New Phrase("TITULO2" + 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 Grid.ColumnCount - 1
            datatable.AddCell(Grid.Columns(i).HeaderText)
        Next
        datatable.HeaderRows = 1
        datatable.DefaultCell.BorderWidth = 1
        'Se generan las columnas del DataGridView. 
        For i As Integer = 0 To Grid.RowCount - 1
            For j As Integer = 0 To Grid.ColumnCount - 1
                datatable.AddCell(Grid(j, i).Value.ToString())
            Next
            datatable.CompleteRow()
        Next
        'Se agrega el PDFTable al documento.
        document.Add(encabezado)
        document.Add(texto)
        document.Add(datatable)
    End Sub
    'Metodo para crear el reporte 
    Sub ExportarPDF()
        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 = "D:\REPORTE.PDF"  'Codigo para que guarde en el escritotio: 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
 End Class


Para crear este reporte se requiere un archivo dll: Descargar el archivo DLL aqui

Al dar clic para descargar el archivo encontraras la siguiente ventana:


Al dar clic en descargar encontraras lo siguiente: 



NOTA: Dependiendo de tu antivirus, tendras una notificacion de advertencia, le das clic en conservar!




Se descargara el archivo dll en tu carpeta de descarga, le das clic en mostrar carpeta para verificar el exito de la descarga



Al ya tener el archivo dll, debes incluirlo en tu proyecto



Dar clic en examinar para buscar el archivo dll y agregarlo al proyecto


Ahora ya tenemo el archivo dll incuido en el proyecto


NOTA IMPORTANTE: verifica si en el Grid tienes tildada la opcion de Habilitar reordenacion de columnas




Resusltado final:



No hay comentarios:

Publicar un comentario