Imprimir arquivo direto em C# 7


Depois de alguns dias pesquisando, encontrei algumas soluções viáveis para enviar um arquivo diretamente para a impressora (sem abrir janelas de diálogo), cada uma com suas limitações.


Solução 1: Fazer uma cópia do arquivo para o local da impressora

 

No prompt do DOS basta utilizar o comando:

O equivalente em C# é:

Onde nome_arquivo é o nome físico completo do arquivo e nome_impressora é o nome do compartilhamento da impressora composto pelo IP ou nome da máquina mais o nome do compartilhamento.

Limitação: Imprime somente arquivos texto e a impressora deverá estar compartilhada.


Solução 2: Utilizar o comando print do windows.

Esta foi a melhor solução que encontrei. A idéia é utilizar o comando “print” do shell do Windows. Ao executar o comando, o Windows irá abrir o programa padrão estabelecido pelo tipo do arquivo e imprimir automaticamente, fechando o programa após a impressão.

Em Delphi utiliza-se o comando ShellExecute para executar um comando shell.

No Framework .Net não existe esta função, no entanto ela está implementada na dll shell32.dll do Windows. Para utiliza-la em C#, VB6 ou VB .Net devemos criar uma referência para a mesma.

Para utilizar a directiva DllImport é preciso referênciar o namespace System.Runtime.InteropServices.
Veja o exemplo a seguir utilizado em um projeto do tipo Windows Application.

Solução 3: http://support.microsoft.com/kb/322091/pt-br

Related Posts Plugin for WordPress, Blogger...
  • Ótima dica era o que eu estava precisando, não imaginei que seria tão simples.

  • Cara, seu código funcionou como muito bem, mais como fazer para definir uma impressora usando o ShellExecuteA.

    Um grande abraço!

  • Marcus Siqueira

    Esse é um problema que não consegui resolver. Simplesmente defino uma impressora padrão e é essa que será utilizada. Não resolvi porque no projeto onde utilizei este código, a solução de se definir uma impressora padrão resolvia. Mas creio que existe sim a possibilidade. Se vc olhar o help do comando (print /?) verá q ele possui um parâmetro /D.

    /D:dispositivo Especifica um dispositivo de impressão.

    Acho q se vc explorar este caminho conseguirá resolver seu problema. Se conseguir, posta aí a solução.

    Até mais

  • Vinicius

    Cara, parabéns, muito bom esse teu artigo! Fiz com a Solução 3 e funcionou exatamente como eu queria, ou seja, tanto imprimindo em uma impressora compartilhada, quanto uma local e independente de se ela estiver em usb ou lpt. Lembrando que foi o unico lugar que achei essa solução depois de mais de uma semana de pesquisa. Muito obrigado.

  • Alenisio

    Olá Vinicius estou terminando TCC, preciso de imprimir dados de um form direto para impressora você pode me ajudar como posso fazer isso.

    Agradeço.

  • helio

    ola Marcos Vinicios,estou tentando aprender c# e acho que voce pode me exclarecer a respeito de uma duvida:este tuto que voce passou tambem serve para imprimir o conteudo de um datagridview?

  • Afernando

    Tenho um aplicação que necessitava desse tipo de implementação, funcionou muito bem Grato.