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.
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:
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 :-)