Como Imprimir Etiqueta Térmica no Linux via AdvPL

No artigo de hoje, vamos demonstrar em como imprimir uma etiqueta térmica (Zebra, Elgin, etc) usando AdvPL em uma distribuição Linux.

Observação antes do artigo, para esse exemplo, foi utilizado a distribuição Ubuntu e não foi usado a classe MSCBPrinter, mas sim a montagem do texto da etiqueta via código ( como no exemplo citado nesse artigo https://terminaldeinformacao.com/2020/02/26/desenhando-etiquetas-zebra-online-e-sem-custo/ ).

 

A lógica aqui é a seguinte:

  1. Monte o texto da sua etiqueta (no nosso exemplo será a variável cConteudo)
  2. Em seguida, vamos criar uma pasta na temporária do S.O. usando WaitRun e o comando mkdir (a pasta será por exemplo, /tmp/etiq/)
  3. Iremos gravar o arquivo dentro dessa pasta do passo 2 com o nome imprimir.txt, sendo que iremos substituir o CRLF por \n. E para gravar o arquivo iremos usar o comando echo
  4. Por último será feito a impressão via comando lp, nesse ponto tenha atenção no nome da impressora, pois é necessário informar, nesse exemplo é a Bar-Code-Printer-TT042-50

 

Abaixo o código fonte de exemplo conforme a lógica acima:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function zTstEtiq
Exemplo de impressão de etiqueta térmica em uma distribuição Linux
@type  Function
@author Atilio
@since 15/11/2022
/*/

User Function zTstEtiq()
	Local aArea     := FWGetArea()
	Local cConteudo := ""
	Local cPasta    := ""
	Local cArquivo  := ""
	Local cComando  := ""

	//Monte a sua etiqueta
	cConteudo := ""
	cConteudo += "^XA" + CRLF
	cConteudo += "" + CRLF
	cConteudo += "^CF0,60" + CRLF
	cConteudo += "^FO220,50^FDAtilio Sistemas^FS" + CRLF
	cConteudo += "^CF0,30" + CRLF
	cConteudo += "^FO220,115^FDEtiqueta de Teste^FS" + CRLF
	cConteudo += "^FO220,155^FDatiliosistemas.com^FS" + CRLF
	cConteudo += "^FO50,250^GB700,3,3^FS" + CRLF
	cConteudo += "" + CRLF
	cConteudo += "^XZ" + CRLF

	//Cria a pasta na temporária do linux
	cPasta := GetTempPath() + "etiq/"
	WaitRun("mkdir " + cPasta)

	//Gera o arquivo da etiqueta
	cArquivo  := "imprimir.txt"
	cConteudo := StrTran(cConteudo, CRLF, "\n")
	cComando  := ' -e "' + cConteudo + '" > ' + cPasta + cArquivo
	ShellExecute("open", "/usr/bin/echo", cComando, "/", 1 )

	//Manda imprimir a etiqueta
	cComando := " -d Bar-Code-Printer-TT042-50 -o raw " + cPasta + cArquivo
	ShellExecute("open", "/usr/bin/lp", cComando, "/", 1 )
	
	FWRestArea(aArea)
Return

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação