Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Giancarlo Braga

[Resolvido] Imprimindo na porta LPT1 no VB.NET

Recommended Posts

Boa tarde.

 

Vou compartilhar uma solução com vocês.

 

Tive muita dificuldade em achar um código para imprimir direto para uma determinada impressora na porta paralela LPT1.

Fiz muitas pesquisas na internet, achei várias soluções(maioria não funcional), mas dentre estas que funcionaram para mim esta é a mais interessante.

É extremamente simples. Veja:

 

- Você primeiro gera um arquivo txt com o que deve ser enviado para a impressora.

 

Exemplo da geração do TXT:

            
           Dim arquivo, diretorio As String
           diretorio = "c:\temp_txt\"
           arquivo = "c:\temp_txt\arquivo.txt"

           'SE A PASTA NÃO EXISTIR, CRIA.
           If Not IO.Directory.Exists(diretorio) Then
               IO.Directory.CreateDirectory(diretorio)
           End If

           If IO.File.Exists(arquivo) Then caso exista o arquivo deleta e cria novo por cima
           IO.File.Delete(arquivo)
               Dim criar = IO.File.CreateText(arquivo)
               criar.Close()
           Else 'inexistente, cria novo.
               Dim criar = IO.File.CreateText(arquivo)
              criar.Close()
           End If

 

Populando o txt com os dados:

           Try
               codutf = System.Text.Encoding.GetEncoding("ISO-8859-1") 'selecionando codificação
               Dim fluxoTexto As IO.StreamWriter 'carregando streamwriter
               fluxoTexto = New IO.StreamWriter(arquivo, True, codutf) 'instancia streamwriter
               Dim texto As String
               texto = "TESTE DE IMPRESSAO" & vbCrLf 
               fluxoTexto.WriteLine(texto) 'escrevendo no txt
               fluxoTexto.Close()
           Catch ex As Exception
               System.Windows.Forms.MessageBox.Show(ex.Message)
           End Try

 

Agora, simplesmente usamos isto, que encaminha para a porta LPT1 o arquivo.

O parâmetro 'true' é importante.

System.IO.File.Copy("c:\temp_txt\arquivo.txt", "LPT1", True)

 

DICA 1:

E caso você esteja em um micro que NÃO tenha LPT1 e queira testar o software, você pode usar o seguinte programa listado nesse site:

http://hulp.wordpress.com/2008/03/20/programa-para-emular-porta-lpt-pela-usb/

Baixe, abra o aplicativo e ele aparece do lado do relógio do Windows.

Entrando no painel dele você deve redirecionar o que imprime na LPT1 para uma impressora qualquer, assim 'emulando' a porta LPT1.

 

DICA 2:

Ainda há a opção de gerar um comando no DOS para imprimir o arquivo.

O problema nesse caso é que alguns anti-vírus barram a aplicação por desconfiar do algoritmo que executa comandos DOS e você acaba dependente de excessões em algumas das máquinas que possa instalar o software.

           Dim comando As String = "type c:\temp_txt\arquivo.txt > LPT1"
           Shell("cmd.exe /c " & comando)

 

DICA 3:

Se a impressão para a porta LPT1 não funcionar de jeito nenhum, você pode criar um compartilhamento para a impressora destino que pode estar ligada na porta USB, e acessar o compartilhamento para a tarefa de impressão. Desse jeito:

System.IO.File.Copy("c:\temp_txt\arquivo.txt", "\\127.0.0.1\IMPRESSORA_X", True)

Onde IMPRESSORA_X é o nome do mapeamento. Você ao invés desse ip de localhost pode usar o IP de um servidor de impressão, nesse caso verifique permissões relativas aos firewalls ou roteadores.

 

DICA 4:

Em C#, como listado nesse link: http://www.dotnetperls.com/file-copy, parece ser uma tarefa bem parecida. No caso desse exemplo muda apenas a forma como gera-se o txt e a sintaxe obviamente, mas é funcional também. Não esqueça do parâmetro TRUE para substituição de arquivos.

 

 

Espero que ajude,

Giancarlo Braga.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.