Revista MSDN Magazine Edição 27 - Imprimindo em impressoras matriciais com .NET

Em tempos de impressoras jato de tinta e laser, ainda temos a necessidade de imprimir nas boas e velhas impressoras matriciais, seja por economia ou por necessidade, já que para emitir notas fiscais, elas são consideradas a opção mais econômica.

Clique aqui para ler todos os artigos desta edição

 

Imprimindo em impressoras matriciais com .NET

Carlos Dos Santos

Este artigo discute

Este artigo usa as seguintes tecnologias

·Impressão matricial;

·Programação com API.

·Visual Studio 2003, C#.

 

Em tempos de impressoras jato de tinta e laser, ainda temos a necessidade de imprimir nas boas e velhas impressoras matriciais, seja por economia ou por necessidade, já que para emitir notas fiscais, elas são consideradas a opção mais econômica.

O problema

O Microsoft .NET Framework não dispõe de uma classe nativa para acessar a porta da impressora diretamente (LPT), e para quem já tentou abrir a porta como se fosse um arquivo, deve ter tido uma grande decepção, pois o ambiente gerenciado não permite acesso direto ao hardware.

Na versão 2.0 do Microsoft .NET Framework, a porta serial ganhou uma classe para acesso, mas a porta paralela ainda não tem acesso nativo. Então como resolver o problema? Como fazer minha aplicação imprimir direto na porta paralela, estando em um ambiente gerenciado?

A solução

Como o Microsoft .NET Framework não permite acesso diretamente à porta paralela (LPT1, LPT2), teremos que usar duas funções da API do Windows que permitem a abertura e fechamento da porta, sendo elas: CreateFileA() e CloseHandle(), que serão declaradas em nossa classe da seguinte maneira:

 

using System.Runtime.InteropServices;

...

...

[DllImport("kernel32.dll",EntryPoint="CreateFileA")]

static extern int CreateFileA(string lpFileName,int dwDesiredAccess, int dwShareMode,

int lpSecurityAttributes,

int dwCreationDisposition, int dwFlagsAndAttributes,

int hTemplateFile);

[DllImport("kernel32.dll",EntryPoint="CloseHandle")]

static extern int CloseHandle(int hObject);

 

Dica: Através da diretiva DllImport, podemos acessar rotinas presentes em DLLs, tais como a Kernel32.dll, onde estão algumas das rotinas que controlam as funcionalidades do Windows. Essa é uma boa dica se você precisa acessar alguma funcionalidade presente em uma DLL, e não tiver uma interface pronta em .NET. Para fazer isso você deverá conhecer os métodos presentes na DLL.

Criando uma classe para impressão

Agora que já temos as funções para acessar a porta da impressora, vamos criar uma classe chamada " [...] continue lendo...

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados