Visual Studio - Impressão e Visualização. O que há de novo ?
Vou começar respondendo a pergunta do título do artigo : "A impressão no Visual Basic.NET é um pouco diferente do que era nas versões anteriores do VB."
Nas versões anteriores do VB tínhamos o objeto Printer que era usado para enviar textos e gráficos para a impressora. Esqueça ! o VB.NET usa o namespace System.Drawing.Printing que apresenta mais recursos e permite um melhor gerenciamento do processo de impressão.
Nota: Na verdade podemos dizer que o namespace System.Drawing.Printing é o sucessor do objeto Printer. (Estarei abordando o assunto em mais detalhes em outro artigo)
Quando você efetuava uma operação de impressão no VB5 ou VB6 o computador ficava em estado de espera enquanto os comandos eram enviados para a impressora. Se a impressão fosse uma operação mais demorada , o seu programa não respondia enquanto as informações estivessem sendo impressas.
A boa notícia é que no VB.NET o processo de impressão é assíncrono.
O novo modelo que o VB.NET traz é baseado em eventos , ou seja, cada vez que você precisa imprimir uma página ocorre um evento chamado - PrintDocument.PagePrint que oferece ao seu código o objeto - PrintPageEventArgs - que contém informações sobre a impressora e métodos para você usar na impressão de textos e imagens.
Para enviar uma saída para a impressora criamos uma instância da classe PrintDocument ou colocamos no formulário um componente PrintDocument ; a seguir definimos as propriedades do que será impresso e chamamos o método Print que dispara o evento PrintPage do objeto PrintDocument.
Você vai tratar o evento PagePrint usando um gerenciador de evento , oferecendo a saída da página seguinte e aguardando uma nova ocorrência do evento PagePrint , com isto as páginas são impressas uma por vez e o seu programa pode responder mais rapidamente.
Você vai ter que controlar a posição da impressão atual para poder voltar a ela quando necessário e, para fazer isto , uma solução seria usar uma variável que guarda a sua página atual.
Vamos mostrar agora um exemplo prático.
Vou dar agora uma pequena mostra da funcionalidade que o VB.NET possui para imprimir. Vou implementar a visualização da impressão.
a - Inicie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)
b- No formulário padrão - form1.vb
- insira os seguintes componentes da barra de ferramentas
:(veja figura ao lado)
Após a inclusão dos componentes você deverá obter a seguinte tela |
|
c- Selecione agora o componente - PrintPreviewDialog1 - e defina a propriedade - Document - como igual a : PrintDocument1.(Veja figura abaixo)
d- Inclua o código a seguir ao evento PrintPage do componente - PrintDocument1. Para isto clique duas vezes sobre o componente :
Private
Sub
PrintDocument1_PrintPage(ByVal sender
As System.Object,
ByVal e
As
System.Drawing.Printing.PrintPageEventArgs)
Handles PrintDocument1.PrintPage Dim g As Graphics = e.Graphics Dim mensagem As String = " Olá meu nome é : " mensagem = mensagem & " - " & System.Environment.UserName() Dim FonteMensagem As New Font("Verdana", 22, System.Drawing.GraphicsUnit.Point) g.DrawString(Mensagem, FonteMensagem, Brushes.Blue, 100, 100) End Sub |
Este código cria uma variável string - mensagem - e atribui a ela os dizeres : " Olá meu nome é : " e o nome do usuário do sistema : System.Environment.UserName()
e- No evento click do botão de comando - Button1 - insira o código
Private
Sub
Button1_Click(ByVal
sender As
System.Object,
ByVal
e As System.EventArgs)
Handles Button1.Click PrintPreviewDialog1.ShowDialog() End Sub |
f- Execute o projeto e a seguir clique no botão - Visualizar ; teremos a sequência de telas abaixo :
|
|
A tela inicial do sistema | A tela gerada após o usuário clicar no botão Visualizar |
Sentiu o poder da plataforma .NET !!! Com apenas uma única linha - PrintPreviewDialog1.ShowDialog() - de código temos uma janela para visualizar impressão . E você pode usar o Zoom , mandar imprimir . paginar o relatório e selecionar o modo de exibição.
Imprimindo um arquivo texto no VB.NET
A ideia é imprimir um arquivo texto - teste.txt - localizado no diretório c:\teste . Para isto temos que abrir o arquivo e imprimir linha a linha na página. Para este projeto não vou usar Windows Forms , ao invés disto , usarei um módulo onde será inserido o código.
a - Inicie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)
b- A seguir na janela - Solution Explorer - clique com o botão direito do mouse e selecione a opção - Add Reference... |
c- Agora clique com o botão do mouse sobre o nome do projeto - TesteImpressao - e a partir da janela - Add Reference - inclua as referências : System.dll e System.Drawing.dll , conforme figura abaixo:
d- Vamos agora incluir um módulo novo no
projeto para podermos criar o código que realizará a
impressão. - Clique com o botão direito do mouse sobre o nome do projeto e selecione a opção Add. - A seguir clique em : Add Module. |
Vamos agora inserir o código no módulo recém incluído no projeto.
- O código do módulo - TesteImpressão - esta dividido em dois procedimentos :
1- O procedimento - Main - : abre o arquivo teste.txt , define a fonte usada para imprimir e ativa a impressão.
Sub main() PrnDoc = New PrintDocument() ArquivoFonte = New StreamReader("c:\teste\teste.txt") Tamfonte = New Font("Verdana", 10, FontStyle.Bold) PrnDoc.DocumentName = "VB.NET Teste de Impressão" PrnDoc.Print() ArquivoFonte.Close() End Sub |
2- O código do evento - PrintPage - : imprime o arquivo texto na impressora.
Public
Sub
PrnDoc_PrintPage(ByVal
sender As
Object,
ByVal e
As
System.Drawing.Printing.PrintPageEventArgs)
Handles PrnDoc.PrintPage Dim PosicaoVertical As Single = 0 Dim contador As Single = 0 Dim linha As String = "" While Not (linha Is Nothing) linha = ArquivoFonte.ReadLine() PosicaoVertical = e.MarginBounds.Top + contador * Tamfonte.GetHeight(e.Graphics) e.Graphics.DrawString(linha, Tamfonte, Brushes.Blue, e.MarginBounds.Left, PosicaoVertical) contador += 1 End While End Sub |
Ao rodar o projeto o conteúdo do arquivo teste.txt será impresso na sua impressora.
Imprimindo figuras
Vimos até agora como imprimir textos usando os novos recursos do VB.NET , mas e como imprimir figuras ?
Elementar meu caro ! vamos usar outros métodos do objeto e.Graphics , o que quer dizer na verdade que estamos usando a tecnologia GDI+ na plataforma .NET.
Por hoje é só , aguarde mais artigos sobre impressão no VB.NET...
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET