Impressão C#(Impressora térmica)

5,229 views
Skip to first unread message

Robinson B. da Silva

unread,
Nov 10, 2011, 7:00:39 AM11/10/11
to dotn...@googlegroups.com
Bom dia a todos(as)

Gostaria de uma ajuda para criar um método de impressão para uma impressora térmica zebra.
Basicamente será uma etiqueta que seguirá o seguinte layout:

---------------------------------------------------------------------------

Nome Empresa

Cod.: 12154212
Cod2.: 12154212
Peças: 2
Peso: 3,58

||||||||||||||||||||||| -> código de barras referente ao cod1

||||||||||||||||||||||| -> código de barras referente ao cod2

---------------------------------------------------------------------------

Desde já agradeço.

José Ferro

unread,
Nov 10, 2011, 7:37:17 AM11/10/11
to dotn...@googlegroups.com
Oi Robinson,
 
Na época que precisei fazer isso, eu criei com um software próprio do fabricante da impressora o layout, gerando um arquivo tipo texto.
Nesse arquivo tinham os comandos de posicionamento e o  texto que era pra ser impresso.
Montava uma string dentro do programa e mandava imprimir, trocando o texto fixo (do arquivo texto) por uma variável que continha os dados do banco.
Eu fiz assim.
 
[]'s
 
José Ferro

--
==============================
Comunidade de desenvolvedores Dot Net no Brasil
 
WebSite: www.dotnetbr.com
 
E-mail do Grupo: dotn...@googlegroups.com
==============================

José Ferro

unread,
Nov 10, 2011, 7:38:22 AM11/10/11
to dotn...@googlegroups.com
Ops...
Corrigindo a primeira frase:
>Na época que precisei fazer isso, eu USEI um software próprio do fabricante da impressora o layout, gerando um arquivo tipo texto.

Robinson Silva

unread,
Nov 10, 2011, 7:41:41 AM11/10/11
to dotn...@googlegroups.com

Bom dia,

 

Minha aplicação está 85% pronto, só quero entender os comandos para enviar a “String” para a impressora.

 

Att,

Renan Henrique

unread,
Nov 10, 2011, 7:47:18 AM11/10/11
to dotn...@googlegroups.com

Crystal não rola?

RENE BIZELLI :: AGENCIA WEB

unread,
Nov 10, 2011, 7:45:17 AM11/10/11
to dotn...@googlegroups.com

Opa rapaziada, tudo legal?

 

To com um problema com envio de email.

Ontem precisei mandar uma mala direta para bastante emails...

No fim do dia começou a dar o seguinte erro: Data command rejected: you are sending too much e-mail

 

Pesquise e vi que os servidor identifica que é uma tentativa de spam e “penaliza” o IP por algumas horas.

É isso mesmo? ou cai na Black list e me lasquei?

 

Obrigado pessoal!!

 

 

 

 

René Bizelli

www.listroman.com.br

 

 

MayogaX

unread,
Nov 10, 2011, 7:50:15 AM11/10/11
to DotNet Brasil
Acho que não...

o próprio layout do documento tem que ter uns códigos loucos que só
servem na zebra.


On 10 nov, 10:47, "Renan Henrique" <renan...@gmail.com> wrote:
> Crystal não rola?
>
> De: dotn...@googlegroups.com [mailto:dotn...@googlegroups.com] Em nome
> de Robinson Silva
> Enviada em: quinta-feira, 10 de novembro de 2011 10:42
> Para: dotn...@googlegroups.com
> Assunto: RES: [.Net - BR] Impressão C#(Impressora térmica)
>
> Bom dia,
>
> Minha aplicação está 85% pronto, só quero entender os comandos para enviar a
> “String” para a impressora.
>
> Att,
>
> De: dotn...@googlegroups.com [mailto:dotn...@googlegroups.com] Em nome
> de José Ferro
> Enviada em: quinta-feira, 10 de novembro de 2011 10:38
> Para: dotn...@googlegroups.com
> Assunto: Re: [.Net - BR] Impressão C#(Impressora térmica)
>
> Ops...
>
> Corrigindo a primeira frase:>Na época que precisei fazer isso, eu USEI um software próprio do fabricante
>
> da impressora o layout, gerando um arquivo tipo texto.
>
> Em 10 de novembro de 2011 10:37, José Ferro <jose.fe...@gmail.com> escreveu:
>
> Oi Robinson,
>
> Na época que precisei fazer isso, eu criei com um software próprio do
> fabricante da impressora o layout, gerando um arquivo tipo texto.
>
> Nesse arquivo tinham os comandos de posicionamento e o  texto que era pra
> ser impresso.
>
> Montava uma string dentro do programa e mandava imprimir, trocando o texto
> fixo (do arquivo texto) por uma variável que continha os dados do banco.
>
> Eu fiz assim.
>
> []'s
>
> José Ferro
>
> Em 10 de novembro de 2011 10:00, Robinson B. da Silva
> <robinsonbsi...@gmail.com> escreveu:
>
> Bom dia a todos(as)
>
> Gostaria de uma ajuda para criar um método de impressão para uma impressora
> térmica zebra.
> Basicamente será uma etiqueta que seguirá o seguinte layout:
>
> ---------------------------------------------------------------------------
>
> Nome Empresa
>
> Cod.: 12154212
> Cod2.: 12154212
> Peças: 2
> Peso: 3,58
>
> ||||||||||||||||||||||| -> código de barras referente ao cod1
>
> ||||||||||||||||||||||| -> código de barras referente ao cod2
>
> ---------------------------------------------------------------------------
>
> Desde já agradeço.
>
> --
> ==============================
> Comunidade de desenvolvedores Dot Net no Brasil
>
> WebSite:www.dotnetbr.com<http://www.dotnetbr.com/>

Robinson Silva

unread,
Nov 10, 2011, 7:50:34 AM11/10/11
to dotn...@googlegroups.com

Li algumas “threads” que não rola.

José Ferro

unread,
Nov 10, 2011, 7:50:28 AM11/10/11
to dotn...@googlegroups.com
@Robinson
Faz tempo que fiz isso para rodar num sistema hospitalar.
Veja se tem no software que acompanha a impressora, esse de montar layouts.
Quando salvar o arquivo, ele salva no formato texto e lá dentro tem os comandos e strings.
Uma dica seria colocar nos campos o texto "AAAAAAAA", "BBBBBBB", "CCCCCC", etc... pra localizar mais fácil isso dentro do arquivo de layout.
É até onde eu consigo te dar uma dica.


@Renam
Existem comandos que posicionam as coisas no "layout" da etiqueta.
Por isso, no meu caso, eu enviava uma string enorme para a impressora, para cada etiqueta.

[]'s

José Ferro

Leandro

unread,
Nov 10, 2011, 7:57:46 AM11/10/11
to dotn...@googlegroups.com

Pra imprimir em impressoras Bematech eu uso a classe system.drawing.

Porém só imprimo textos simples, nada de códigos de barras..

Será q não rola?

 

 

Define Impressora:

var printDocument = new PrintDocument

            {

                PrinterSettings = { PrinterName = “PrinterTest” },

                DefaultPageSettings = { Margins = new Margins { Bottom = 0, Left = 0, Right = 0, Top = 0 } }

            };

printDocument.PrintPage += recibo_PrintPage;

printDocument.Print();

 

Código que efetivamente imprime:

private void recibo_PrintPage(object sender, PrintPageEventArgs e)

        {

e.Graphics.DrawString(texto, “alguma fonte”, Brushes.Black, 150, 150);

Gustavo Freddo Breunig

unread,
Nov 10, 2011, 7:58:27 AM11/10/11
to dotn...@googlegroups.com
já fiz com relatórios parecidos com o crystal, setando o tamanho da página igual ao tamanho da etiqueta, é mais fácil ao meu ver.

no mais, podes disparar os comandos ZPL  (não sei qual linguagem está usando)

http://social.msdn.microsoft.com/Forums/en-IE/winforms/thread/5ecdf07e-e0b5-45e0-a19a-82ef2fe7f606 aqui o cara dispara o buffer pela LPT1 (também não sei como ela está ligada ao computador)

http://stackoverflow.com/questions/2044676/net-code-to-talk-zpl-to-zebra-printers também tem esse

Neryval Lima

unread,
Nov 10, 2011, 8:13:29 AM11/10/11
to dotn...@googlegroups.com
Eu uso o software da própria impressora,

Faço a etiqueta e coloco palavras chaves para a sua substituição na app, 
depois de pronta eu mando imprimir em arquivo.

Dai de dentro da minha app, apenas troco palavras chaves da etiqueta 
por variáveis e mando imprimir o arquivo de texto gerado.

é simples, fácil e muito pratico.


Neryval Lima
.NET Programmer
+55 71 8104.9679
+55 77 9942.9437
Guanambi, Bahia - Brasil
Skype : neryval.lima


Em 10 de novembro de 2011 10:00, Robinson B. da Silva <robinso...@gmail.com> escreveu:

--

Robinson Silva

unread,
Nov 10, 2011, 8:19:34 AM11/10/11
to dotn...@googlegroups.com

Neryval,

 

Eu tentei baixar o software da impressora, e até consegui, mas uso o Win  7 64bits e não instala.

Queria fazer isso, diagramar minha etiqueta, e depois pegar o “texto” gerado por essa aplicação e montar num StringBuilder, substituindo apenas o necessário.

 

Conhece outro mirror para que eu possa baixar o software?

 

De: dotn...@googlegroups.com [mailto:dotn...@googlegroups.com] Em nome de Neryval Lima
Enviada em: quinta-feira, 10 de novembro de 2011 11:13
Para: dotn...@googlegroups.com
Assunto: Re: [.Net - BR] Impressão C#(Impressora térmica)

 

Eu uso o software da própria impressora,

Jefferson Martins dos Santos

unread,
Nov 10, 2011, 8:29:54 AM11/10/11
to dotn...@googlegroups.com
Cara, vê com o seu provedor, porque acho que ele entende isso como uma tentativa de spam sim....tive um problema desses numa empresa que trabalhei...a solução foi entrar em contato com o provedor e eles me informaram quantas mensagens nós poderiamos enviar por hora..daí tivemos que ajustar os envios para enviar uma qtdX/h de e-mails...
como sei que surgirá a pergunta: por que não pedimos para aumentar a qtde msg por hora??? não me lembro ao certo, mas tinha uma restrição lá do próprio provedor e estávamos com permissao para enviar a qtde maxima de e-mails por hora...
Dá uma verificada aí pra ver se é isso msm que está acontecendo com vc...

[]Abs

--

RENE BIZELLI :: AGENCIA WEB

unread,
Nov 10, 2011, 8:29:02 AM11/10/11
to dotn...@googlegroups.com

Hum

Entao é meu smtp mesmo que esta com problema, não é o servidor que esta recebendo que esta me bloqueando né?

Eu troquei o usuário de autenticação e deu certo... é isso entao.

Vou ver com o provedor pra aumentar esse numro de email por hora!

 

Muito obrigado Jefferson!

 

De: dotn...@googlegroups.com [mailto:dotn...@googlegroups.com] Em nome de Jefferson Martins dos Santos


Enviada em: quinta-feira, 10 de novembro de 2011 11:30
Para: dotn...@googlegroups.com

Renan Henrique

unread,
Nov 10, 2011, 8:41:22 AM11/10/11
to dotn...@googlegroups.com

Se cada cliente tiver um tipo de impressora térmica, você vai desenvolver pra cada impressora?

 

@Renam

Existem comandos que posicionam as coisas no "layout" da etiqueta.

Por isso, no meu caso, eu enviava uma string enorme para a impressora, para cada etiqueta.

 

No Crystal também, eu coloquei pro cliente configurar essa margem uma vez e boa.

 

 

De: dotn...@googlegroups.com [mailto:dotn...@googlegroups.com] Em nome de Neryval Lima


Enviada em: quinta-feira, 10 de novembro de 2011 11:13
Para: dotn...@googlegroups.com

Neryval Lima

unread,
Nov 10, 2011, 8:43:11 AM11/10/11
to dotn...@googlegroups.com
Tenta no site da Argox,
ela tem um software chamado BarTender, que nada mais é que um editor de etiquetas.

pelo que eu sei, ele funciona com a Zebra e tem versões para Win64.

Neryval Lima
.NET Programmer
+55 71 8104.9679
+55 77 9942.9437
Guanambi, Bahia - Brasil
Skype : neryval.lima


Robinson Silva

unread,
Nov 10, 2011, 10:12:28 AM11/10/11
to dotn...@googlegroups.com

Perfeito,

 

Encontrei  o ZebraDesigner Pro, vou instalar ele e desenha a etiqueta.

Neryval, só mais uma pergunta, com base no código obtido abaixo, suponhamos que a linha com o ITEM EM VERMELHO seja o código de barras, para eu gerar o código para esse número bastaria passar o “comando” que a impressora o gera né?

 

 

A20,20,0,3,1,1,N,"JANELA DE CORRER ELO 1,00 X 1,20 X 120"
B218,50,0,E30,3,15,105,B,"789837085034"
A20,55,0,3,1,1,N,""
A580,55,0,2,1,1,N,"CARGA-"
A580,75,0,2,1,1,N,"PEDIDO-009046"
A580,95,0,2,1,1,N,"QTD-2"
A20,150,0,2,1,1,N,"JUNDIAI"
A580,150,0,4,1,1,N,"M.C.1º PASSO"
A580,115,0,2,1,1,N,"23031406"

Att,

Jefferson Martins dos Santos

unread,
Nov 10, 2011, 10:13:37 AM11/10/11
to dotn...@googlegroups.com
Opa...nada não manow...é nóis!heheheh

[] Abs
Jefferson M.

Neryval Lima

unread,
Nov 10, 2011, 12:58:54 PM11/10/11
to dotn...@googlegroups.com
certamente, nesta linha já existe o comando para a impressora imprimir o
código de barras, pois neste formato, são usadas fontes internas da impressora.

Uma outra coisa, a questão da quantidade eu coloco na hora de imprimir
sempre 999, pois fica fácil substituir pelo numero de etiquetas que eu preciso.

Neryval Lima
.NET Programmer
+55 71 8104.9679
+55 77 9942.9437
Guanambi, Bahia - Brasil
Skype : neryval.lima


Robinson Silva

unread,
Nov 11, 2011, 5:57:14 AM11/11/11
to dotn...@googlegroups.com

Bom dia a todos,

Agradeço a ajuda de todos.  Finalmente consegui encontrar e instalar a versão zebredesign, “diagramei” e “exportei” para txt.

 

Agora resta apenas mais uma pergunta,  a impressora zebra está instalada no PC (impressora do Windows), hoje já seleciono a impressora deseja(PrinterDialog), mas não sei como enviar essa “string” para imprimir.

 

Desde já agradeço.

Neryval Lima

unread,
Nov 11, 2011, 6:57:31 AM11/11/11
to dotn...@googlegroups.com
Eu uso Imporessão Direto na Porta
mas uso a impressora Argox!
V se te ajuda :

       ' Seleciono o Modelo da Etiqueta
        Dim iFile As New IO.StreamReader(AppEtiquetasPath & cmbModelo.Text & ".etq")
        'Leio o arquivo da Etiqueta
        Dim etq As String = iFile.ReadToEnd
        iFile.Close()
 
        Dim etq1 As String = ""
 
        For Each dr As DataRowView In dvEtiquetas '<- Aqui o DataView com os Produtos e as Quantidades de cada Etiqueta
            'Crio o Arquivo que será enviado a Impressora
            Dim oFile As New IO.StreamWriter(AppEtiquetasPath & cmbModelo.Text.Replace(".etq"".prn"))
            etq1 = etq
            'Substituo os Valores
            etq1 = etq1.Replace("[desc]", dr!Descricao)
            etq1 = etq1.Replace("[R$]", FormatNumber(dr!Preco, 2))
            etq1 = etq1.Replace("12345678", dr!Barras)
            etq1 = etq1.Replace("[dt]", Now)
            etq1 = etq1.Replace("Q0999""Q" & dr!quantidade.ToString.PadLeft(4, "0"))
            'Finalizo a Operação
            oFile.Write(etq1)
            oFile.Flush()
            oFile.Close()
            'Mando o Arquivo para a Impressora
            IO.File.Copy(AppEtiquetasPath & cmbModelo.Text.Replace(".etq"".prn"), cmbPrinter.Text)
        Next
Neryval Lima
.NET Programmer
+55 71 8104.9679
+55 77 9942.9437
Guanambi, Bahia - Brasil
Skype : neryval.lima


Ricardo J. A. da Rocha

unread,
Nov 12, 2011, 7:15:44 AM11/12/11
to DotNet Brasil
Peguei de um sistema que imprime recibos em impressora térmica.
(isso é javascript mesmo)
function WriteToFile(psArquivo, psTexto)
{
try
{
var fso, s;
var fso = new ActiveXObject("Scripting.FileSystemObject");
var s = fso.OpenTextFile(psArquivo, 8, true, 0);
s.write(psTexto);
s.Close();
}
catch (err)
{
var strErr = 'Error:';
strErr += '\nNumber:' + err.number;
strErr += '\nDescription:' + err.description;
document.write(strErr);
}
}



No Asp:
StringBuilder lScript = new StringBuilder();
lScript.Append("<script>");
//lScript.Append(String.Format(" alert('{0}');", TextoEtiquetas()));
lScript.Append(String.Format(" WriteToFile('{0}', '{1}');", lsPorta,
TextoEtiquetas()));
lScript.Append("</script>");
ClientScript.RegisterStartupScript(GetType(), "ImprimeRecibo",
lScript.ToString());


string lsPorta =
ConfigurationManager.AppSettings.Get("ImpressoraPorta");
<add key="ImpressoraPorta" value="c:\\\\RyO\\\\TesteImpressao.txt"/>


Não fui eu quem fiz este código ... então não posso explicar muita
coisa. Nem mesmo sei a marca da impressora. Mas vale o teste !!

[]'s

Ricardo J. A. da Rocha
rochasolutions.com.br
Porto Alegre - RS


On 10 nov, 09:00, "Robinson B. da Silva" <robinsonbsi...@gmail.com>
wrote:

Juan Lopes

unread,
Nov 12, 2011, 9:12:06 AM11/12/11
to dotn...@googlegroups.com
ActiveXObject? Isso funciona em algum browser que não seja o IE?

2011/11/12 Ricardo J. A. da Rocha <ricardor...@gmail.com>

Robinson Silva

unread,
Nov 23, 2011, 12:51:42 PM11/23/11
to dotn...@googlegroups.com

Boa tarde a todos,

 

Preciso de uma grande ajuda.

 

Com base no exemplo abaixo do Neryval implementei minha rotina de impressão em uma “ZEBRA PRINTER”.

Bom, o arquivo .prn é gerado corretamente, mas quando o envio para a impressora, nada ocorre:

 

Vejam trecho do código:

 

                  StreamWriter writer = new StreamWriter(app.readPathApp() + "labels.prn");

                  writer.Write(print.ToString());

                  writer.Flush();

                  writer.Close();

 

                  File.Copy(app.readPathApp() + "labels.prn", pd.PrinterSettings.PrinterName, true);

                  File.Delete(app.readPathApp() + "labels.prn");

 

Eu usei algumas dicas obtidas através do google, como enviar o arquivo .prn via “CMD ( 'TYPE C:\labels.prn> USB001' ) ” para a impressora,  desta forma saiu corretamente.

 

Bom, gostaria de saber como posso mandar esse arquivo .prn para impressora zebra instalada em um  Windows XP(conectada através da USB) pela aplicação.

Neryval Lima

unread,
Nov 23, 2011, 1:08:20 PM11/23/11
to dotn...@googlegroups.com
Vc tem que copiar direto na porta da impressora!

enviando para o Drive dela, nada será impresso!


Neryval Lima
.NET Programmer
+55 71 8104.9679
+55 77 9942.9437
Guanambi, Bahia - Brasil
Skype : neryval.lima


Neryval Lima

unread,
Nov 23, 2011, 1:09:23 PM11/23/11
to dotn...@googlegroups.com
File.Copy(app.readPathApp() + "labels.prn", "USB001"true);

tenta assim, v se funciona !


Neryval Lima
.NET Programmer
+55 71 8104.9679
+55 77 9942.9437
Guanambi, Bahia - Brasil
Skype : neryval.lima


Em 23 de novembro de 2011 15:51, Robinson Silva <robinso...@gmail.com> escreveu:

Robinson Silva

unread,
Nov 23, 2011, 1:15:20 PM11/23/11
to dotn...@googlegroups.com

Perfeito,

 

Vou testar.

Mais uma vez, muito obrigado.

Robinson Silva

unread,
Nov 24, 2011, 5:40:32 AM11/24/11
to dotn...@googlegroups.com

Bom dia a todos.

 

Ontem, em posse da Zebra, comecei meus testes.

E onde está LPT1 coloquei USB001, LTP...etc, tentei várias portas que estavam em uso por alguma impressora, e para minha surpresa, não funcionou, nada era enviado.

File.Copy(app.readPathApp() + "labels.prn", “LPT1”, true);
File.Delete(app.readPathApp() + "labels.prn");

Pesquisando, encontrei esse tópico:

http://forum.imasters.com.br/topic/425572-imprimindo-na-porta-lpt1-no-vbnet/

e com base nele realizei todos as dicas sugeridas e a única que funcionou foi eu compartinhando a impressora:

 
File.Copy(app.readPathApp() + "labels.prn", “"\\127.0.0.1\IMPRESSORA_X”, true);

Bom, aparentemente resolve o problema, mas fiquei indignado por saber que muitas pessoas conseguiram mandar imprimir enviando diretamente para a porta, e no meu caso não deu certo, e uma das especificações dessa aplicação é que o usuário selecione a impressora que irá utilizar atráves do PrinterDialog.
 
Atenciosamente.

 

 

De: Robinson Silva [mailto:robinso...@gmail.com]
Enviada em: quarta-feira, 23 de novembro de 2011 16:15
Para: 'dotn...@googlegroups.com'
Assunto: RES: [.Net - BR] Impressão C#(Impressora térmica)

 

Perfeito,

 

Vou testar.

Mais uma vez, muito obrigado.

 

 

 

Robinson Silva

unread,
Nov 24, 2011, 11:46:41 AM11/24/11
to dotn...@googlegroups.com

Bom dia a tarde.

 

Ontem, em posse da Zebra, comecei meus testes.

E onde está LPT1 coloquei USB001, LTP...etc, tentei várias portas que estavam em uso por alguma impressora, e para minha surpresa, não funcionou, nada era enviado.

File.Copy(app.readPathApp() + "labels.prn", “LPT1”, true);
File.Delete(app.readPathApp() + "labels.prn");

Pesquisando, encontrei esse tópico:

http://forum.imasters.com.br/topic/425572-imprimindo-na-porta-lpt1-no-vbnet/

e com base nele realizei todos as dicas sugeridas e a única que funcionou foi eu compartinhando a impressora:

 
File.Copy(app.readPathApp() + "labels.prn", “"\\127.0.0.1\IMPRESSORA_X”, true);
Bom, aparentemente resolve o problema, mas fiquei indignado por saber que muitas pessoas conseguiram mandar imprimir enviando diretamente para a porta, e no meu caso não deu certo, e uma das especificações dessa aplicação é que o usuário selecione a impressora que irá utilizar atráves do PrinterDialog.
 
Atenciosamente.

 

 

De: Robinson Silva [mailto:robinso...@gmail.com]
Enviada em: quarta-feira, 23 de novembro de 2011 16:15
Para: 'dotn...@googlegroups.com'
Assunto: RES: [.Net - BR] Impressão C#(Impressora térmica)

 

Perfeito,

 

Vou testar.

Mais uma vez, muito obrigado.

 

 

 

Bruno Gross

unread,
Nov 24, 2011, 12:02:04 PM11/24/11
to dotn...@googlegroups.com
o usuário do asp.net tem permissão pra enxergar o q precisa enxergar?

2011/11/24 Robinson Silva <robinso...@gmail.com>



--
Visite:
DotNet Br
Compras no Exterior

att.
Bruno Gross
(21) 83422729

Robinson Silva

unread,
Nov 24, 2011, 12:05:07 PM11/24/11
to dotn...@googlegroups.com

É uma aplicação Windows forms c#.

Bruno Gross

unread,
Nov 24, 2011, 12:13:58 PM11/24/11
to dotn...@googlegroups.com
Ah, perdão

não havia lido o contexto todo.

Anyway, o usuário da máquina a executar a app tem as devidas permissões?

2011/11/24 Robinson Silva <robinso...@gmail.com>

Robinson B. da Silva

unread,
Nov 24, 2011, 12:16:35 PM11/24/11
to dotn...@googlegroups.com
sim, as permissões estão corretas.
Reply all
Reply to author
Forward
0 new messages