CÓDIGO DE BARRAS - IMPRESSÃO EM ZM400
Autor: I love Helle Berry. | Publicado: 2013-09-21T17:30:00-07:00

Olá a todos!


Ao criar etiquetas códigos de barras, o ideal é utilizar o próprio software da impressora código de barras para isso.

Em se tratando de uma impressora da marca Zebra o aplicativo mais comum para uso é o Zebra Designer que vem junto no CD de drivers da própria impressora. A tarefa é bem simples: abrir o aplicativo e gerar uma etiqueta no tamanho desejado e com os parâmetros
necessários. Faz-se a impressão da mesma na impressora a fim de se atestar que está
correta e, em seguida, se gera a mesma para um arquivo-texto a fim de ser utilizado em&nbsp;
sua aplicação.

O arquivo-texto gerado pela impressora é o mostrado abaixo:

^XA
^PW354
^BY2,3,44^FT40,55^BCN,,Y,N
^FD&gt;:" &amp; Mid(Codigo, 1, 2) &amp; "&gt;5" &amp; Mid(Codigo, 3, 11) &amp; "^FS
^PQ1,0,1,Y

^XZ

Onde Codigo é a codificação interna da etiqueta que você criou.

O que se deve fazer em seguida é abrir isso via software a fim de gerar uma impressão em sequência da chamada desse mesmo arquivo da contagem inicial até a final:

&nbsp; &nbsp; &nbsp; &nbsp; sInicio = CDbl(TxtInicio.Text)
&nbsp; &nbsp; &nbsp; &nbsp; sFim = CDbl(TxtFim.Text)


&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;'Quantas Etiquetas Imprimir&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; sDiferenca = sFim - sInicio

&nbsp; &nbsp; &nbsp; &nbsp; If sInicio &gt; sFim Then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MsgBox("Valor Inicial maior que o Valor Final!!!", MsgBoxStyle.Information)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TxtInicio.Focus()
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Exit Sub
&nbsp; &nbsp; &nbsp; &nbsp; End If

&nbsp; &nbsp; &nbsp; &nbsp; If sDiferenca = 0 Then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sDiferenca = sConta
&nbsp; &nbsp; &nbsp; &nbsp; End If

&nbsp; &nbsp; &nbsp; &nbsp; 'Loop de impressão

&nbsp; &nbsp; &nbsp; &nbsp; While sInicio &lt;= sFim


&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LerEtiqueta(sInicio&nbsp;)

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GravarDados(sInicio)

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Dim Command As String
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Command = "type C:\TEMP\ETIQUETA.TXT&gt;PRN"
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Shell("cmd /c" &amp; Command, 1, True)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'Incrementar o contador
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sInicio = sInicio + 1


&nbsp; &nbsp; &nbsp; &nbsp; End While

A rotina LerETiqueta lê o arquivo-texto gerado na Zebra.

Então, você deve criar uma rotina que gere um arquivo-texto com os dados
acima:

&nbsp; Private Sub&nbsp;&nbsp;LerEtiqueta(ByVal&nbsp;sNumeroEtiqueta as string)

&nbsp; &nbsp; &nbsp; &nbsp; Dim fluxoTexto As IO.StreamWriter

&nbsp; &nbsp; &nbsp; &nbsp; Dim sNomeArquivo As String = "C:\Temp\ETIQUETA.TXT"

&nbsp; &nbsp; &nbsp; &nbsp; If IO.File.Exists(sNomeArquivo) Then

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'ZM400 300 DPI
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fluxoTexto = New IO.StreamWriter(sNomeArquivo)

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fluxoTexto.Write("^XA")
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fluxoTexto.Write("^PW354")
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fluxoTexto.Write("^BY2,3,44^FT40,55^BCN,,Y,N")
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fluxoTexto.Write("^FD&gt;:" &amp; Mid(sNumeroEtiqueta, 1, 2) &amp; "&gt;5" &amp; Mid(sNumeroEtiqueta, 3, 11) &amp; "^FS")
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fluxoTexto.Write("^PQ1,0,1,Y")


&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ''Finaliza la etiqueta
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fluxoTexto.Write("^XZ")

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fluxoTexto.Close()


&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; End If

&nbsp; &nbsp; &nbsp; &nbsp; Dim docName As String = "ETIQUETA.TXT"
&nbsp; &nbsp; &nbsp; &nbsp; Dim docPath As String = "c:\Temp\"
&nbsp; &nbsp; &nbsp; &nbsp; 'printDocument1.DocumentName = docName

&nbsp; &nbsp; &nbsp; &nbsp; Dim stream As New FileStream("C:\Temp\ETIQUETA.TXT", FileMode.Open)
&nbsp; &nbsp; &nbsp; &nbsp; Try
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Dim reader As New StreamReader(stream)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Try
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stringToPrint = reader.ReadToEnd()
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Finally
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; reader.Dispose()
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End Try
&nbsp; &nbsp; &nbsp; &nbsp; Finally
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stream.Dispose()
&nbsp; &nbsp; &nbsp; &nbsp; End Try


&nbsp; &nbsp; End Sub


&nbsp;A parte final realiza a impressão da etiqueta direto para a porta da impressora e incrementa para o próximo número a ser impresso:

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Dim Command As String
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Command = "type C:\TEMP\ETIQUETA.TXT&gt;PRN"
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Shell("cmd /c" &amp; Command, 1, True)

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'Incrementar o contador
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sInicio = sInicio + 1

A rotina é bem simples. &nbsp;

Você ainda pode incrementar isso gravando os dados em uma tabela em sua base de dados a fim de controlar as etiquetas já impressas e fazer uma possível reimpressão, caso necessário, o que é realizado pela função GravarDados.

Espero que o exposto ajude aos necessitados por esta informação.&nbsp;

Qualquer dúvida, podem postar comentários.

Sucesso a todos!!


By
Leonardo Metelys