Sei sulla pagina 1di 5

Enviando EPL2 cru diretamente a um LP2844 Zebra via C #

s vezes, nossos fornecedores nos enviar produtos com cdigos de barras incorretas ou sem UPCs. Temos a obrigao de tal forma que cada item em nosso armazm deve ter um cdigo de barras para fins de controle de estoque. Ento, quando esses itens de cdigo de barras, menos chegam, precisamos imprimir etiquetas UPC para eles. Temos uma impressora de etiquetas trmica, e sabemos que ele pode imprimir cdigos de barras, ento vamos descobrir uma maneira de ter a nossa aplicao criar estas etiquetas de cdigo 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 trmica pouco aparentemente onipresente nos mundos de varejo e armazm:

-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 ningum paga isso, voc pode pegar algumas belezas agredidas por cerca de 70 dlares no eBay. E o modelo no mudou muito em mais de uma dcada, com a reviso s principal que a adio de suporte para USB. H algumas pequenas diferenas na UPS e FedEx fornecidos modelos porque instalar um firmware personalizado, mas para os nossos propsitos, eles esto

todos a impressora mesmo. A lngua nativa da impressora no PostScript ou PCL, mas sim uma linguagem proprietria 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 dcada atrs. Zebra tem sua prpria impressora linguagem ZPL, ou Impressora Zebra linguagem que semelhante a ZPL e usado no modelo TLP2844Z, mas as lnguas no so compatveis um com o outro. Vez que j havia um monte de cdigo legado l fora, trabalhando com EPL, e desde EPL em si no 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 fcil adicionar suporte nativo para isso em nossas. NET. Mas, primeiro, vamos considerar por isso que no basta ter a rota GDI. Por que no imprimir usando PrintDocument e GDI +? Zebra oferece um driver de impressora avanado 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 converso 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 cenrio onde voc especificar paisagem, mas ela insiste em imprimir em modo retrato ou vice-versa, ento voc executar para esse problema. A fidelidade do texto geralmente pobre. O LP2844 s suporta uma resoluo de 203dpi (na verdade, h uma verso 300dpi l fora, mas muito raro), texto to pequeno pode sair em blocos, irregular, e difcil de ler. Isso no verdade para as fontes nativas da impressora, que so otimizados para essa resoluo. GDI no tem suporte incorporado para prestao de cdigos de barras. Claro, voc pode escrever um cdigo de barras renderizador-se na GDI (Eu tenho feito isso antes, mas no uma tarefa trivial), mas por que no economizar algum tempo e usar a funcionalidade de sua impressora embutida? Agarrando a documentao EPL e Zebra Firmware Downloader Uma das partes mais difceis de usar EPL simplesmente encontrar a documentao para ele. Zebra fornece um manual muito bem escrito, mas est enterrado em seu site: aqui est um link para uma cpia espelhada da documentao de programao 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 fcil de aprender. Aqui esto os comandos EPL necessrios para gerar a etiqueta UPC mostrado no topo deste post no blog:
N q609 Q203,26 B26,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

EPL um comando por linha. Um comando comea com um identificador de comando, normalmente uma letra, seguida por uma lista separada por vrgulas de parmetros especficos para esse comando. Voc pode olhar para cada um destes comandos na documentao de programao EPL2. Aqui est uma verso em Ingls 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 dentro 2. [q] Defina a largura da etiqueta para 609 pontos (3 polegadas rtulo x 203 dpi = 609 pontos de largura). 3. [Q] Regule a altura de etiqueta para 203 pontos (1 rtulo polegadas) com 26 dot lacuna entre as etiquetas. (A impressora provavelmente auto-sentido, mas isso no faz mal.) 4. [B] Desenhe um cdigo 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 so semelhantes para a linha 4.) 10. [P] Imprimir uma cpia de uma etiqueta. De certa forma, EPL bastante semelhante ao GDI. Voc tem um buffer de imagem na memria, voc emitir um lote de comandos para rabiscar e escrever texto e cdigos de barras em que o buffer, e depois soltar o tampo para a impressora, dizendo-lhe para imprimi-lo. Ao projetar um rtulo, eu acho que essencial ter uma rgua e uma calculadora mo. 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 cdigo de barras) e nada imprime, isso normalmente significa que o comando era invlido ou que algum parmetro estava fora do intervalo (por exemplo, a altura do cdigo de barras no era alto o suficiente). Seria bom se pudssemos imprimir esses arquivos de texto EPL que criamos no Bloco de Notas sem escrever qualquer cdigo. A Zebra Firmware Downloader (o que certamente tem um nome assustador) pode fazer isso por ns. Uma vez que voc instalou o aplicativo, inici-lo e caar o "Auto Detectar" boto na barra de ferramentas. Uma vez que encontra a sua impressora, boto 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 boto 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. Impresso da etiqueta diretamente do C # Agora que temos o cdigo EPL escrita, precisamos descobrir uma maneira para a nossa aplicao para enviar esse arquivo diretamente para a impressora. A maneira mais fcil usar a classe de exemplo RawPrinterHelper fornecido pela Microsoft, mas vamos precisar de corrigir um erro no primeiro.

Aqui est o que uma classe que imprime para a impressora pode parecer:
using using using using using using using System; System.Collections.Generic; System.Text; Skiviez.UndiesClient.Domain; Skiviez.Commons.WinForms; Skiviez.Commons.Core; 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 construo de nosso documento EPL em um StringBuilder, e poderamos facilmente personalizar o documento na mosca com algumas chamadas String.Format. Veja como podemos chamar esse cdigo:
UpcLabel label = new UpcLabel("603679025109"); label.Print("Zebra LP2844");

A seqncia que passamos na funo de impresso 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 pea do quebra-cabea que a chamada RawPrinterHelper.SendStringToPrinter. Bem, a cpia mesmo cdigo exato e colado a partir do artigo de suporte da Microsoft acima. Mas h um bug que precisamos corrigir. No mtodo SendStringToPrinter, h uma linha parecida com esta:

dwCount = szString.Length; Mude-o para ficar assim: dwCount = (szString.Length + 1) * Marshal.SystemMaxDBCSCharSize; (O problema principal que ele no estava deixando espao para o caractere nulo no final da string no gerenciado, que pode causar alguns problemas misteriosos com o seu ltimo comando no ficar interpretados diretamente, dependendo do comprimento do documento-prima. SystemMaxDBCSCharSize A absurdo para verses do Windows, onde uma pgina de cdigos ANSI com caracteres de dois bytes carregado.) Concluses e Delrios 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/

Potrebbero piacerti anche