Impressão em impressora termica para DFes via EscPos e derivados (EscBema, EscDaruma, EscElgin, entre outros) nativo em .NET.
Atualmente a biblioteca atende os documentos SAT e NFCe nos formatos 58 e 80mm.
Permite comunicação via RAW (USB), TCP, Serial e FileConfig.
A biblioteca conta com dois demos escritos em Winforms (Windows) e Avalonia (multi-plataforma).
Exemplo de uso:
using (var _printer = new SatPrinter()) //ou new NFCePrinter() para NFCe
{
_printer.Protocolo = ProtocoloEscPos.EscPos; //Protocolo de comunicação
_printer.Impressora = "Nome da impressora"; //Para RAW nome da impressora. Para TCP o IP da impressora na rede. Para serial a porta.
_printer.CortarPapel = true;
_printer.ProdutoDuasLinhas = false;
_printer.UsarBarrasComoCodigo = false;
_printer.DocumentoCancelado = false; //Exibe tarja "Documento cancelado na impressão"
_printer.Logotipo = logotipo_em_bytes; //Impressão do logotipo, não obrigatório
_printer.TipoPapel = TipoPapel.Tp80mm; //ou TipoPapel.Tp58mm
_printer.QrCodeLateral = true; //Padrão false. Exige Tp80mm e exige modo pagina na impressora.
_printer.TipoConexao = TipoConexao.RAW; //padrão RAW, não obrigatório para conexão USB
_printer.RemoverAcentos = true; //padrão true, não obrigatório
_printer.Imprimir(string_com_o_conteudo_do_xml); //Imprime o documento fiscal
// para impressão específica do XML de cancelamento de SAT CF-e use:
//_printer.ImprimirCancelamento(string_com_o_conteudo_do_xml_de_cancelamento);
}
A partir da versão 1.0.21 é possível não gerar o QrCode via comando e sim imprimir como imagem. Este processo foi realizado para que impressoras sem suporte a QRCode (como a Gprinter GP-58L) fossem capaz de imprimir o SAT/NFCe.
Caso o atributo QrCodeImagem
não seja informado (padrão) a aplicação continuará enviando o QrCode via comando (o que é indicado para impressoras com suporte!).
Exemplo de uso do QrCodeImagem
usando o projeto QRCoder:
string qrcode = _printer.QRCodeTexto(xml);
SixLabors.ImageSharp.Image qrCodeImage;
using (var qrGenerator = new QRCoder.QRCodeGenerator())
using (var qrCodeData = qrGenerator.CreateQrCode(qrcode, QRCoder.QRCodeGenerator.ECCLevel.H))
using (var qrCode = new QRCoder.QRCode(qrCodeData))
qrCodeImage = qrCode.GetGraphic(3);
using MemoryStream memoryStream = new();
qrCodeImage.SaveAsPng(memoryStream);
_printer.QrCodeImagem = new System.Drawing.Bitmap(memoryStream);
Importante: Não usar o parâmetro QrCodeImagem em impressoras com suporte a QrCode. A impressão de imagem é mais lenta e custosa para a impressora quando comparado a QRCode nativo!
OpenAC.Net.EscPos (motor de impressão) - https://github.com/OpenAC-Net/OpenAC.Net.EscPos
OpenAC.Net.Sat (desserialização do xml do SAT) - https://github.com/OpenAC-Net/OpenAC.Net.Sat
Hercules.NET (ZeusFiscal) (desserialização do xml da NFCe) - https://github.com/ZeusAutomacao/DFe.NET
1.0.25 - QRCode não estava saindo na lateral para NFCe
1.0.24 - Adiciona File (ConfiguracaoFile) às formas de comunicação
1.0.23 - Removendo o antigo DFe.NET e migrando para Hercules.NET
1.0.22 - Não imprimia NFCe se a tag infAdic estivesse nula
1.0.21 - Permite imprimir o QrCode como imagem, util para impressoras sem suporte a QrCode
1.0.20 - Opção de customizar o tamanho das colunas (número de caracteres na linha)
1.0.19 - QR Code lateral
1.0.18 - Atualizando referencias ao Zeus (remoção dos projetos shared)
1.0.17 - Altera o motor de impressão, adicionando os protcolos TCP e Serial e novos recursos como impressão de caracteres acentuados.
1.0.16 - Remove o @ que aparecia no meio do protocolo no NFCe
1.0.15 - Migrando para OpenAC.Net.Sat
1.0.14 - Opção de alterar casas decimais da quantidade
1.0.13 - Melhora na impressão da observação do contribuinte
1.0.12 - SAT quebrava se o XFant de emitente estivesse nulo
1.0.11 - Opção de ocultar tag "De olho no imposto"
1.0.10 - Não era possível imprimir NFCe sem a tag infAdic (issue #6)
1.0.9 - Impressão em 58mm
1.0.8 - Adiciona a impressão do logotipo
1.0.7 - Adiciona Qtde. total de itens"
1.0.6 - Impressão para cancelamento do SAT
A versão 1.0.17 trouxe um novo motor de impressão (OpenAC.Net.EscPos) que permite impressão RAW (padrão para comunicação USB identica ao comportamento anterior) e adiciona os protocolos TCP e Serial.
Você pode preencher apenas o atributo "Impressora" (antes chamado de "NomeImpressora") e substituir o atributo "TipoImpressora" por "Protocolo" e o comportamento do motor anterior será mantido.
A versão 1.0.23 remove a referência ao DFe.NET (antigo ZeusNfe) e troca pelo Hercules.NET. Por se tratar de um fork é necessário que seja removido a referência ao DFe.NET também na aplicação que usar o Gerene.DFe.EscPos para evitar duplicidade de namespace.
Os atributos "ConfiguracaoRAW", "ConfiguracaoTCP", "ConfiguracaoSerial" e "ConfiguracaoFile" permitem alterações no comportamento da impressora e na forma de comunicação, para mais informações confira o funcionamento em https://github.com/OpenAC-Net/OpenAC.Net.EscPos
Você pode encontrar exemplos de uso em Linux onde a configuração padrão (RAW) precisa ser alterada na issue #10 (#10 (comment)).
A licença do projeto é MIT, o seu uso é livre. Não garantimos QUALQUER suporte.
O projeto Vip.Printer (https://github.com/leandrovip/Vip.Printer) serviu de motor de impressão entre as versões 1.0.0 e 1.0.16 de forma gratuíta e com qualidade, permitindo o funcionamento dessa biblioteca por quase dois anos com um nível muito baixo de manutenção.
Em busca de evolução a troca de motor foi necessária na versão 1.0.17. Essa mudança permitiu novos protocolos e o uma parceria ainda mais estreita com o grupo OpenAC que vem fazendo um trabalho incrível com diversos componentes para automação comercial. Conheça mais em: https://github.com/OpenAC-Net