Imprimindo LP2844 c#

6
Enviando EPL2 cru diretamente a um LP2844 Zebra via C # Às vezes, nossos fornecedores nos enviar produtos com códigos de barras incorretas ou sem UPCs. Temos a obrigação de tal forma que cada item em nosso armazém deve ter um código de barras para fins de controle de estoque. Então, quando esses itens de código de barras, menos chegam, precisamos imprimir etiquetas UPC para eles. Temos uma impressora de etiquetas térmica, e sabemos que ele pode imprimir códigos de barras, então vamos descobrir uma maneira de ter a nossa aplicação criar estas etiquetas de código de barras automaticamente. -Neat! Podemos gerar esta em C # com um arquivo de texto. A impressora provavelmente você já viu antes Esta impressora de etiquetas térmica é pouco aparentemente onipresente nos mundos de varejo e armazém:

Transcript of Imprimindo LP2844 c#

Page 1: Imprimindo LP2844 c#

Enviando EPL2 cru diretamente a um LP2844 Zebra via C #

Às vezes, nossos fornecedores nos enviar produtos com códigos de barras incorretas ou sem UPCs. Temos a obrigação de tal forma que cada item em nosso armazém deve ter um código de barras para fins de controle de estoque. Então, quando esses itens de código de barras, menos chegam, precisamos imprimir etiquetas UPC para eles. Temos uma impressora de etiquetas térmica, e sabemos que ele pode imprimir códigos de barras, então vamos descobrir uma maneira de ter a nossa aplicação criar estas etiquetas de código de barras automaticamente.

-Neat! Podemos gerar esta em C # com um arquivo de texto.

A impressora provavelmente você já viu antes

Esta impressora de etiquetas térmica é pouco aparentemente onipresente nos mundos de varejo e armazém:

-O bom e velho Zebra LP2844.

Todo mundo parece ter padronizado sobre esta pequena cara, você pode alugar um de UPS ou Fedex para imprimir etiquetas de transporte, o PayPal pode imprimir a ele, e assim pode Stamps.com e Endicia. Eles varejo por cerca de US $ 400, mas ninguém paga isso, você pode pegar algumas belezas agredidas por cerca de 70 dólares no eBay. E o modelo não mudou muito em mais de uma década, com a revisão só principal que é a adição de suporte para USB. Há algumas pequenas diferenças na UPS e FedEx fornecidos modelos porque instalar um firmware personalizado, mas para os nossos propósitos, eles estão

Page 2: Imprimindo LP2844 c#

todos a impressora mesmo.

A língua nativa da impressora não é PostScript ou PCL, mas sim uma linguagem proprietária chamada EPL2 (mais comumente chamado apenas de EPL, sem o "2"). É curto para Eltron linguagem da impressora. Eltron foi a empresa que originalmente concebido este modelo de impressora e Zebra comprou até uma década atrás. Zebra tem sua própria impressora linguagem ZPL, ou Impressora Zebra linguagem que é semelhante a ZPL e é usado no modelo TLP2844Z, mas as línguas não são compatíveis um com o outro. Vez que já havia um monte de código legado lá fora, trabalhando com EPL, e desde EPL em si não é quebrado, a Zebra continua a oferecer impressoras que suportam EPL. Essa é a linguagem que a UPS ea FedEx WorldShip Ship Manager utiliza para imprimir etiquetas de transporte UPS esses dispositivos.

Acontece que EPL é conceitualmente muito simples, e podemos de forma relativamente fácil adicionar suporte nativo para isso em nossas. NET. Mas, primeiro, vamos considerar por isso que não basta ter a rota GDI.

Por que não imprimir usando PrintDocument e GDI +?

Zebra oferece um driver de impressora avançado para o LP2844 que permite que o Windows vê-lo como qualquer impressora GDI baseado idade. Se você abrir um documento do Word, escreva algumas coisas para ele, e imprimi-lo para o seu LP2844, você vai de fato se o seu documento impresso como você espera. Mas existem algumas desvantagens para essa abordagem:■ A conversão GDI é muito mais lento do que quando o envio de comandos com EPL.■ O driver de impressora tem alguns bugs quando se trata de determinar o tamanho da etiqueta. Se você encontrou um cenário onde você especificar paisagem, mas ela insiste em imprimir em modo retrato ou vice-versa, então você executar para esse problema.■ A fidelidade do texto é geralmente pobre. O LP2844 só suporta uma resolução de 203dpi (na verdade, há uma versão 300dpi lá fora, mas é muito raro), texto tão pequeno pode sair em blocos, irregular, e difícil de ler. Isso não é verdade para as fontes nativas da impressora, que são otimizados para essa resolução.■ GDI não tem suporte incorporado para prestação de códigos de barras. Claro, você pode escrever um código de barras renderizador-se na GDI (Eu tenho feito isso antes, mas não é uma tarefa trivial), mas por que não economizar algum tempo e usar a funcionalidade de sua impressora embutida?

Agarrando a documentação EPL e Zebra Firmware Downloader

Uma das partes mais difíceis de usar EPL é simplesmente encontrar a documentação para ele. Zebra fornece um manual muito bem escrito, mas está enterrado em seu site: aqui está um link para uma cópia espelhada da documentação de programação EPL. Enquanto você está nisso, baixar o Zebra Firmware Downloader, que irá ajudá-lo a enviar seus arquivos de texto de teste EPL diretamente para a impressora.

Aprender sobre a EPL

Um exemplo é geralmente a maneira mais fácil de aprender. Aqui estão os comandos EPL necessários para gerar a etiqueta UPC mostrado no topo deste post no blog:

Nq609Q203,26B26,26,0,UA0,2,2,152,B,"603679025109"A253,26,0,3,1,1,N,"SKU 6205518 MFG 6354"A253,56,0,3,1,1,N,"2XIST TROPICAL BEACH"A253,86,0,3,1,1,N,"STRIPE SQUARE CUT TRUNK"A253,116,0,3,1,1,N,"BRICK"A253,146,0,3,1,1,N,"X-LARGE"P1,1

Page 3: Imprimindo LP2844 c#

EPL é um comando por linha. Um comando começa com um identificador de comando, normalmente uma letra, seguida por uma lista separada por vírgulas de parâmetros específicos para esse comando. Você pode olhar para cada um destes comandos na documentação de programação EPL2. Aqui está uma versão em Inglês dos comandos no exemplo acima.

0. Enviando um garantias iniciais de que qualquer nova linha anterior borked comando é enviado.1. [N] Limpar o buffer de imagem. Este é um passo importante e geralmente deve ser o primeiro comando em qualquer documento EPL; quem sabe o que o estado do trabalho anterior deixou a impressora dentro2. [q] Defina a largura da etiqueta para 609 pontos (3 polegadas rótulo x 203 dpi = 609 pontos de largura).3. [Q] Regule a altura de etiqueta para 203 pontos (1 rótulo polegadas) com 26 dot lacuna entre as etiquetas. (A impressora provavelmente auto-sentido, mas isso não faz mal.)4. [B] Desenhe um código de barras UPC-A com valor "603679025109" no x = 26 pontos (1/8 in), y = 26 pontos (1/8 in), com uma barra estreita largura de 2 pontos e torná-lo 152 pontos (3/4 in) de altura. (O origem do sistema de coordenadas de etiqueta é o canto superior esquerdo).5. [A] Desenhe o texto "SKU 6205518 MFG 6354" no x = 253 pontos (3/4 in), y = 26 pontos (1/8 in), em impressora de fonte "3", a escala horizontal e vertical normal, e nenhum efeito branco sobre preto fantasia. (6 a 9 são semelhantes para a linha 4.) 10. [P] Imprimir uma cópia de uma etiqueta.

De certa forma, EPL é bastante semelhante ao GDI. Você tem um buffer de imagem na memória, você emitir um lote de comandos para rabiscar e escrever texto e códigos de barras em que o buffer, e depois soltar o tampão para a impressora, dizendo-lhe para imprimi-lo.

Ao projetar um rótulo, eu acho que é essencial ter uma régua e uma calculadora à mão. Você vai se converter entre pontos e polegadas muito como você projeta a sua etiqueta. Se você achar que você enviar um comando (como um comando de código de barras) e nada imprime, isso normalmente significa que o comando era inválido ou que algum parâmetro estava fora do intervalo (por exemplo, a altura do código de barras não era alto o suficiente).

Seria bom se pudéssemos imprimir esses arquivos de texto EPL que criamos no Bloco de Notas sem escrever qualquer código. A Zebra Firmware Downloader (o que certamente tem um nome assustador) pode fazer isso por nós. Uma vez que você instalou o aplicativo, iniciá-lo e caçar o "Auto Detectar" botão na barra de ferramentas. Uma vez que encontra a sua impressora, botão direito do mouse na lista, clique em Selecionar arquivo de firmware ..., e navegue até o arquivo de texto contendo os comandos EPL. Em seguida, o botão direito do mouse na impressora e selecione Download para Selected. A impressora irá imprimir sua etiqueta teste. Agora você pode ser facilmente editar o seu documento EPL no Bloco de Notas e continuar escolhendo Download para Selecionado como você percorrer e refinar seu projeto.

Impressão da etiqueta diretamente do C #

Agora que temos o código EPL escrita, precisamos descobrir uma maneira para a nossa aplicação para enviar esse arquivo diretamente para a impressora. A maneira mais fácil é usar a classe de exemplo RawPrinterHelper fornecido pela Microsoft, mas vamos precisar de corrigir um erro no primeiro.

Page 4: Imprimindo LP2844 c#

Aqui está o que uma classe que imprime para a impressora pode parecer:

using System;using System.Collections.Generic;using System.Text;using Skiviez.UndiesClient.Domain;using Skiviez.Commons.WinForms;using Skiviez.Commons.Core;using System.Globalization; namespace BlahBlahBlah{ public class UpcLabel { private string upc; public UpcLabel(string upc) { if (upc== null) { throw new ArgumentNullException("upc"); } this.upc = upc; } public void Print(string printerName) { StringBuilder sb; if (printerName == null) { throw new ArgumentNullException("printerName"); } sb = new StringBuilder(); sb.AppendLine(); sb.AppendLine("N"); sb.AppendLine("q609"); sb.AppendLine("Q203,26"); sb.AppendLine(string.Format( CultureInfo.InvariantCulture, "B26,26,0,UA0,2,2,152,B,\"{0}\"", this.upc)); sb.AppendLine("P1,1"); RawPrinterHelper.SendStringToPrinter(printerName, sb.ToString()); } }}

Esta é bastante simples. Estamos apenas a construção de nosso documento EPL em um StringBuilder, e poderíamos facilmente personalizar o documento na mosca com algumas chamadas String.Format. Veja como podemos chamar esse código:

UpcLabel label = new UpcLabel("603679025109");label.Print("Zebra LP2844");

A seqüência que passamos na função de impressão é apenas o nome da impressora que aparece na lista de impressoras no painel de controle do Windows. Você poderia aparecer um PrintDialog aqui e pedir ao utilizador para uma impressora, mas eu acabei de hard-coded o nome.

A última peça do quebra-cabeça é que a chamada RawPrinterHelper.SendStringToPrinter. Bem, é a cópia mesmo código exato e colado a partir do artigo de suporte da Microsoft acima. Mas há um bug que precisamos corrigir. No método SendStringToPrinter, há uma linha parecida com esta:

Page 5: Imprimindo LP2844 c#

dwCount = szString.Length; Mude-o para ficar assim:

dwCount = (szString.Length + 1) * Marshal.SystemMaxDBCSCharSize;

(O problema principal é que ele não estava deixando espaço para o caractere nulo no final da string não gerenciado, que pode causar alguns problemas misteriosos com o seu último comando não ficar interpretados diretamente, dependendo do comprimento do documento-prima. SystemMaxDBCSCharSize A absurdo é para versões do Windows, onde uma página de códigos ANSI com caracteres de dois bytes é carregado.)

Conclusões e Delírios

E aí está! EPL é uma linguagem de comando divertido e simples impressora, e com um pouco de interoperabilidade, podemos enviar esses comandos diretamente do nosso aplicativo C #. Feliz barcoding!

Site: http://nicholas.piasecki.name/blog/2009/03/sending-raw-epl2-directly-to-a-zebra-lp2844-via-c/