Ir para o conteúdo

Relatórios (sistema Printing())

Introdução

O uso de relatórios nas nossas aplicações é comum, principalmente quando existem base de dados ao "barulho". Precisamos, seja por organização ou por obrigação, de imprimir alguma informação que consta na nossa aplicação. Existem já alguns sistemas de relatórios como é o caso do Crystal Reports, Reports Viewer, Reporting Cloud que podemos utilizar para uma melhor interface gráfica dos documentos.

Contudo, também existe outra forma de criar relatórios sem o uso dos sistemas que mencionei!

Printing

O sistema Printing que o VB.Net nos fornece está recheado de funções que nos podem ser úteis na criação de um relatório.

O meu relatório

Primeiramente precisamos de importar o sistema de desenho do nosso relatório:

Imports System.Drawing.Printing

No exemplo que se segue trabalho com base de dados e, por sua vez, com o controlo DataGridView. Apesar de estar a utilizar SQLite, para uma melhor percepção da gestão de base de dados, visita este artigo que escrevi há uns tempos.

Para esta demonstração, criei um sistema simples, como demonstra a imagem abaixo.

DataGrid mostrando os dados de exemplo: uma lista de fornecedores

Coding It

Estão documentadas as partes que considerei importantes.

Public Class Form1
    Private Empresa, Contribuinte, Produto, Telefone, Email, Notas As String
    Private Sub RelatorioUnico()
        Dim printIt As New PrintDocument
        Dim printPreview As New PrintPreviewDialog
        printPreview.Document = printIt

        ' Apanhamos os campos da datagrid e atribuimos às respectivas variáveis
        Empresa = DataGridView1.CurrentRow.Cells(1).Value
        Contribuinte = DataGridView1.CurrentRow.Cells(2).Value
        Produto = DataGridView1.CurrentRow.Cells(3).Value
        Telefone = DataGridView1.CurrentRow.Cells(4).Value
        Email = DataGridView1.CurrentRow.Cells(5).Value
        Notas = DataGridView1.CurrentRow.Cells(6).Value

        AddHandler printIt.PrintPage, AddressOf printIt_PrintPage

        ' Copia o logótipo
        Clipboard.SetImage(My.Resources.google)
        printPreview.ShowDialog()
    End Sub

Feito isto só temos agora que desenhar o nosso relatório da forma que bem queremos.

    Private Sub printIt_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
        ' Cola o logótipo
        e.Graphics.DrawImage(Clipboard.GetImage, 150, -100, 550, 500)

        ' Desenha um rectângulo à volta do documento
        Dim rect As New Rectangle(0, 300, 900, 800)
        e.Graphics.DrawRectangle(Pens.Gray, rect)

        ' 300 = coordenadasX :: 250 = coordenadasY
        e.Graphics.DrawString("Fornecedores", New Font("Verdana", 20, FontStyle.Bold), Brushes.Black, 300, 250)

        ' Informações do Fornecedor:
        e.Graphics.DrawString("Empresa: ", New Font("Verdana", 16, FontStyle.Bold), Brushes.Black, 40, 350)
        e.Graphics.DrawString(Empresa, New Font("Verdana", 15, FontStyle.Regular), Brushes.Black, 175, 351)
        e.Graphics.DrawString("Contribuinte: ", New Font("Verdana", 16, FontStyle.Bold), Brushes.Black, 40, 400)
        e.Graphics.DrawString(Contribuinte, New Font("Verdana", 15, FontStyle.Regular), Brushes.Black, 217, 402)
        e.Graphics.DrawString("Produto: ", New Font("Verdana", 16, FontStyle.Bold), Brushes.Black, 40, 450)
        e.Graphics.DrawString(Produto, New Font("Verdana", 15, FontStyle.Regular), Brushes.Black, 162, 451)

        ' Desenha uma linha na horizontal
        e.Graphics.DrawLine(Pens.Gray, 40, 525, 500, 525)

        ' (...) + informações:
        e.Graphics.DrawString("Telefone: ", New Font("Verdana", 16, FontStyle.Bold), Brushes.Black, 40, 560)
        e.Graphics.DrawString(Telefone, New Font("Verdana", 15, FontStyle.Regular), Brushes.Black, 170, 561)
        e.Graphics.DrawString("Email: ", New Font("Verdana", 16, FontStyle.Bold), Brushes.Black, 40, 610)
        e.Graphics.DrawString(Email, New Font("Verdana", 15, FontStyle.Regular), Brushes.Black, 130, 611)

        ' Desenha uma linha na horizontal
        e.Graphics.DrawLine(Pens.Gray, 40, 680, 500, 680)

        ' (...) + informações:
        e.Graphics.DrawString("Notas: ", New Font("Verdana", 16, FontStyle.Bold), Brushes.Black, 40, 720)
        e.Graphics.DrawString(Notas, New Font("Verdana", 15, FontStyle.Regular), Brushes.Black, 135, 721)

        ' Data do documento
        e.Graphics.DrawString(Date.Now, New Font("Verdana", 16, FontStyle.Bold), Brushes.Black, 525, 1120)
    End Sub

Resultado:

Imagem do relatório gerado

Conclusão

Apesar do exemplo ser bastante simples, espero que fique a ideia que dá para evoluir e criar sempre mais e, principalmente, ao nosso gosto. Existem muitas funções que não abordei, caso tenhas interesse basta-te procurar no nosso amigo Google :-)