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

  1. Project Types : Visual Basic Projects
  2. Templates : Windows Application
  3. Name : PrimeiraImpressao
  4. Location : c:\vbnet \print
b- No formulário padrão - form1.vb - insira os seguintes componentes da barra de ferramentas :(veja figura ao lado)
  • PrintDocument
  • PrintPreviewDialog
  • Button

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

  1. Project Types : Visual Basic Projects
  2. Templates : Empty Project
  3. Name : TesteImpressao
  4. Location : c:\vbnet \print
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:


José Carlos Macoratti