Impressora Label Printer - Linguagem TSPL

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Marcio_Carneiro
Usuário Nível 2
Usuário Nível 2
Mensagens: 70
Registrado em: 07 Abr 2008 15:37
Localização: Santo Antônio de Pádua - RJ

Impressora Label Printer - Linguagem TSPL

Mensagem por Marcio_Carneiro »

Boa tarde amigos,

Um cliente para ajudar comprou uma impressora Label Printer, e ela utiliza a linguagem TSPL acima.
Já estou acostumado com a Argox, mas essa aí está me dando trabalho via xharbour.
Os comandos são literais:

SIZE 105 mm
GAP 3 mm,0 mm
SPEED 4
DENSITY 7
DIRECTION 1
CLS
BACKFEED
TEXT 20,01,"3",0,1,1,"FOTO MIRACEMA"
BARCODE 50,75,'128',42,0,0,2,2,'02014'
PRINT 1

e utilizando Win32Prn, enviando o texto acima, ela imprime o texto acima, sem fazer a configuração.
Já testei num programa Delphi(AcbrPosPrinter) e vai. Não sei se está faltando algum comando no texto para informar a impressora os comandos e não imprimir literalmente o texto.
No prg Delphi, ele gera uma string com todos os comandos acima numa única linha somente acrescentando o salto de linha(desconfio) #$A.
Se alguém tiver alguma experiência que possa me ajudar, agradeço
Um abraço
Marcio
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Impressora Label Printer - Linguagem TSPL

Mensagem por Itamar M. Lins Jr. »

Olá!
Use raw(texto puro)

Código: Selecionar todos

 

      nResult := PrintFileRaw( cPrinter, cFileName, "Etiqueta XYZ" )
       IF nResult = -1
          cMsg = "Parametros Invalido, Favor Tentar Novamente"
       ELSEIF nResult = -2
          cMsg = "Falha na chamada da Impressora, Favor Verificar a Impressora"
       ELSEIF nResult = -3
          cMsg = "Falha ao Iniciar Impressão, Favor Verificar a Impressora"
       ELSEIF nResult = -4
          cMsg = "Falha ao Iniciar a Primeira Pagina, Favor Verificar a Impressora"
       ELSEIF nResult = -5
          cMsg = "Falha de Memoria da Impressora, Favor Verificar a Impressora"
       ELSEIF nResult = -6
          cMsg = "Não foi Possivel localizar o arquivo de Impressão, Favor Tentar Novamente"
       ENDIF
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Marcio_Carneiro
Usuário Nível 2
Usuário Nível 2
Mensagens: 70
Registrado em: 07 Abr 2008 15:37
Localização: Santo Antônio de Pádua - RJ

Impressora Label Printer - Linguagem TSPL

Mensagem por Marcio_Carneiro »

Boa tarde, obrigado pela atenção

Tentei compilar (utilizo HMG 2010.06.20) e não deu para utilizar o PrintFileRaw()

O Win_PrintFile_Raw() funciona, mas esse não consigo dá erro, pelo visto falta algum arquivo.

Poderia me dar, se possível, mais alguma instrução?

Corrigindo: pesquisando aqui descobri como adicionar o PrintFileRaw() no meu prg.

Mas mesmo assim, envia para impressora e ela não imprime.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Impressora Label Printer - Linguagem TSPL

Mensagem por Itamar M. Lins Jr. »

Olá!

https://pctoledo.org/forum/viewto ... =4&t=18709

Leia esse tópico, pq tem provavelmente seu problema nele resolvido.

Código: Selecionar todos

cDefaultPrinter := WIN_PRINTERGETDEFAULT() 
WIN_PRINTFILERAW( cDefaultPrinter, Prnfile.txt )
mas esse não consigo dá erro,
É segredo o erro ? cadê para a gente ver !


Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Marcio_Carneiro
Usuário Nível 2
Usuário Nível 2
Mensagens: 70
Registrado em: 07 Abr 2008 15:37
Localização: Santo Antônio de Pádua - RJ

Impressora Label Printer - Linguagem TSPL

Mensagem por Marcio_Carneiro »

Muito obrigado novamente.

O erro que relatei era a ausência do PrintFileRaw() no projeto, e dava erro na compilação. O texto ficou truncado

Mas o importante: RESOLVIDO!!!!

Com ajuda do amigo, consegui.

Primeiro, seguindo um tópico anterior, coloquei o PrintFileRaw() no grupo e compilou.

Segundo, na ânsia de corrigir e descobrir onde era o gargalo, estava gerando o arquivo txt com set printer to nomedoarquivo.txt mas não estava fechando o arquivo, com o Set Printer To.
Então o PrintFileRaw() não encontrava o arquivo, pois o mesmo não estava disponível. ( Você fica procurando o díficil, e o fácil te atrapalha).
Peguei o arquivo.txt e informei diretamente no PrintFileRaw() e ele imprimiu as etiquetas. Maravilha. Mas como felicidade de programador dura pouco, a impressão entrava em loop.

Terceiro:Voltei ao Manual de Programação da Linguagem TSPL (singelo, 35 páginas) e fuçando descobri uma função que se utiliza quando carrega um arquivo na memória da impressora, imagem ou dados.
Inseri esse comando para ver o bicho que ia dar, e felizmente, está funcionando.

Então é o seguinte: impressora Label Printer, linguagem TSPL roda tranquilo no Harbour..

O texto do programa é o seguinte

Código: Selecionar todos

Set device to Printer  
 SET Printer to "C:\LABEL.TXT"
 @ prow(),00 say "SIZE 105 mm"
 @ prow()+1,00 say "GAP 3 mm,0 mm"
 @ prow()+1,00 say "SPEED 4"
 @ prow()+1,00 say "DENSITY 7"
 @ prow()+1,00 say "DIRECTION 1"
 @ prow()+1,00 say "CLS"
 @ prow()+1,00 say "BACKFEED"
 @ prow()+1,00 Say 'TEXT 20,01,"3",0,1,1,"FOTO MIRACEMA"'
 @ prow()+1,00 Say 'TEXT 310,01,"3",0,1,1,"FOTO MIRACEMA"'
 @ prow()+1,00 Say 'TEXT 601,01,"3",0,1,1,"FOTO MIRACEMA"'
 @ prow()+1,00 Say 'TEXT 28,27,"2",0,1,1,"ADESIVO ESTRELAS"' 
 @ prow()+1,00 Say 'TEXT 310,27,"2",0,1,1,"ADESIVO ESTRELAS"' 
 @ prow()+1,00 Say 'TEXT 601,27,"2",0,1,1,"ADESIVO ESTRELAS"' 
 @ prow()+1,00 Say 'TEXT 28,50,"2",0,1,1,"/ASTROS FLUORESC"' 
 @ prow()+1,00 Say 'TEXT 318,50,"2",0,1,1,"/ASTROS FLUORESC"' 
 @ prow()+1,00 Say 'TEXT 609,50,"2",0,1,1,"/ASTROS FLUORESC"' 
 @ prow()+1,00 Say 'BARCODE 50,75,"128",42,0,0,2,2,"02014"'
 @ prow()+1,00 Say 'TEXT 20,120,"2",0,1,1,"02014   R$ 9,999,99"'
 @ prow()+1,00 Say 'BARCODE 340,75,"128",42,0,0,2,2,"02014"'
 @ prow()+1,00 Say 'TEXT 310,120,"2",0,1,1,"02014    R$ 999,99"'
 @ prow()+1,00 Say 'BARCODE 630,75,"128",42,0,0,2,2,"02014"'
 @ prow()+1,00 Say 'TEXT 601,120,"2",0,1,1,"02014    R$ 99,99"' 
 @ prow()+1,00 say "PRINT 1,1"
 @ prow()+1,00 say "EOP"
 SET PRINTER TO 
 	 
 nResult := PrintFileRaw(gprintername,"C:\LABEL.TXT",'Impressao Teste')
Muitíssimo obrigado pela atenção. E fica para todo mundo a solução.

E uma pergunta: tem como gerar esse arquivo txt em memória em vez do disco?
Um forte abraço
Marcio
Marcio_Carneiro
Usuário Nível 2
Usuário Nível 2
Mensagens: 70
Registrado em: 07 Abr 2008 15:37
Localização: Santo Antônio de Pádua - RJ

Impressora Label Printer - Linguagem TSPL

Mensagem por Marcio_Carneiro »

Vida de programador não fácil...

Agora surgiu uma nova dúvida:

O comando de texto ou código de barras precisa informar o dado entre aspas.

'TEXT 28,27,"2",0,1,1,"ADESIVO ESTRELAS"'

Se colocar o dado direto do programa não funciona

'TEXT 28,27,"2",0,1,1,produto->nome

Alguma sugestão?
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Impressora Label Printer - Linguagem TSPL

Mensagem por Itamar M. Lins Jr. »

Olá!
Podemos usar: [ 'teste', "1,1,1" ]
Se deseja que saia " e ' use [ ]

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Impressora Label Printer - Linguagem TSPL

Mensagem por Itamar M. Lins Jr. »

Olá!
Então mais uma dica.
Quer colocar " no texto use ' e sinal de +
Por exemplo:
'TEXT 28,27,"2",0,1,1, " ' + produto->nome + ' " '

LetoDB, SQL, HTML usamos muito isso.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Marcio_Carneiro
Usuário Nível 2
Usuário Nível 2
Mensagens: 70
Registrado em: 07 Abr 2008 15:37
Localização: Santo Antônio de Pádua - RJ

Impressora Label Printer - Linguagem TSPL

Mensagem por Marcio_Carneiro »

Boa tarde.

Nem sei como agradecer, com sua ajuda, estou conseguindo.

E com vergonha pergunto: e para informar variável de memória ou valores numéricos como faço?


'TEXT 20,320,"2",0,1,1,"'+preco_pro+'"'

onde preco_pro:=str(produtos->preco) //transformo em string.

Desculpe a aporrinhação...
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Impressora Label Printer - Linguagem TSPL

Mensagem por Itamar M. Lins Jr. »

Olá!
e para informar variável de memória ou valores numéricos como faço?
Use transform() e ltrim() na verdade tem várias formas de fazer.

Código: Selecionar todos

'TEXT 20,320,"2",0,1,1,"'+ltrim(transform(produtos->preco,"@E 999,999,999.999"))+'"'
ou

Código: Selecionar todos

'TEXT 20,320,"2",0,1,1,"'+ntos(produtos->preco)+'"'
Etc...
Veja se passa ponto ou virgula como decimais. Se for ponto(.) Remova "@E" do transform() ou use a opção de baixo.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Marcio_Carneiro
Usuário Nível 2
Usuário Nível 2
Mensagens: 70
Registrado em: 07 Abr 2008 15:37
Localização: Santo Antônio de Pádua - RJ

Impressora Label Printer - Linguagem TSPL

Mensagem por Marcio_Carneiro »

Muito obrigado pela atenção.

Mas consegui resolver. Esse monte de aspas duplas e simples complica.

Mas já tá legal.

Um grande abraço e muitíssimo obrigado pela sua atenção

Marcio
Responder