|
Exemplo Relatório Impressora Zebra |
Débuté par Boller, 02 juil. 2025 15:40 - 7 réponses |
| |
| | | |
|
| |
Membre enregistré 4 520 messages |
|
Posté le 02 juillet 2025 - 15:40 |
Vamos criar um exemplo totalmente diferente e completo de impressão ZPL para uma etiqueta de rastreamento logístico, com código 100% pronto para rodar no WinDev/WebDev/Windev Mobile (WX), seguindo os padrões de geração de relatório programado para impressoras Zebra.
⸻
📦 Cenário do Exemplo:
Rastreamento logístico de encomendas com etiqueta contendo: • Nome do destinatário • Endereço completo • Código de rastreamento • Peso e dimensões • Código de barras (rastreamento) • QR Code com JSON do pacote
⸻
✅ Estrutura Geral do Projeto
Relatório: RPT_ETIQUETA_LOGISTICA Impressora: Zebra_GK420t Modo: ZPL via iPrint() Fonte de dados: Preenchimento por programação
⸻
🔧 Código Completo
// ============================================== // RELATÓRIO PROGRAMADO - ETIQUETA LOGÍSTICA // IMPRESSÃO ZPL - ZEBRA // ==============================================
dsPacoteLogistico is Data Source sImpressoraZebra is string = "Zebra_GK420t" nLarguraZPL is int = 406 nAlturaZPL is int = 203
// ============================================== // BEFORE PRINTING REPORT // ==============================================
sSQL is string = [ SELECT id_pacote, nome_destinatario, endereco, cidade, cep, peso_kg, dimensao_cm, codigo_rastreamento FROM pacote_logistico WHERE id_pacote = %1 ]
sSQL = StringBuild(sSQL, gnPacoteSelecionado)
IF NOT HExecuteSQLQuery(dsPacoteLogistico, MyConnection, hQueryWithoutCorrection, sSQL) THEN Error("Erro ao carregar pacote: " + HErrorInfo(hErrMessage)) RETURN False END
HReadFirst(dsPacoteLogistico)
IF HOut(dsPacoteLogistico) THEN RETURN False END
// Configurar impressora IF NOT PrinterExist(sImpressoraZebra) THEN Error("Impressora Zebra não encontrada.") RETURN False END
iParameter(iDestination, sImpressoraZebra) iParameter(iMode, iModeText)
RETURN True
⸻
🧩 BEFORE PRINTING BODY
// Geração do ZPL logístico sZPL is string = GerarZPLLogistico() iPrint(sZPL)
⸻
🧯 AFTER PRINTING BODY
HReadNext(dsPacoteLogistico)
⸻
🧹 AFTER PRINTING REPORT
HFreeQuery(dsPacoteLogistico) iParameter(iDestination, iViewer)
⸻
🧠 Função: GerarZPLLogistico
FUNCTION GerarZPLLogistico() : string
sNome is string = dsPacoteLogistico.nome_destinatario sEndereco is string = dsPacoteLogistico.endereco + ", " + dsPacoteLogistico.cidade + " - CEP: " + dsPacoteLogistico.cep sPeso is string = NumToString(dsPacoteLogistico.peso_kg, "###0.0") + " kg" sDimensao is string = dsPacoteLogistico.dimensao_cm + " cm" sCodigo is string = dsPacoteLogistico.codigo_rastreamento sData is string = DateToString(DateSys(), "DD/MM/YYYY")
// JSON resumido para QR Code sQRData is string = [ {"destinatario":"%1","codigo":"%2","peso":"%3"} ] sQRData = StringBuild(sQRData, sNome, sCodigo, sPeso)
sZPL is string = [ ^XA ^PW%1 ^LL%2 ^CF0,30 ^FO20,20^FDDESTINATARIO:^FS ^CF0,25 ^FO20,55^FD%3^FS ^CF0,20 ^FO20,90^FD%4^FS ^FO20,115^FDPeso: %5 - Dim: %6^FS ^FO20,140^FDData: %7^FS
^FO20,170^BCN,80,Y,N,N ^FD%8^FS
^CF0,15 ^FO20,260^FDRastreamento: %8^FS
^FO300,30^BQ,2,5 ^FDQA,%9^FS ^XZ ]
sZPL = StringBuild(sZPL, nLarguraZPL, // %1 nAlturaZPL, // %2 sNome, // %3 sEndereco, // %4 sPeso, // %5 sDimensao, // %6 sData, // %7 sCodigo, // %8 sQRData // %9 )
RETURN sZPL
⸻
🧪 Teste Simulado
// Definir o pacote que será impresso gnPacoteSelecionado = 15
// Chamar o relatório iPrintReport(RPT_ETIQUETA_LOGISTICA)
⸻
✅ Vantagens do Exemplo • Suporta QRCode nativo ZPL (^BQ) • Imprime código de barras rastreável (^BC) • Mostra dados úteis ao operador logístico (peso, dimensões, CEP) • Baseado em SQL dinâmico • Adaptável para WebDev, WinDev Mobile e WinDev
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 520 messages |
|
Posté le 02 juillet 2025 - 15:47 |
Aqui está uma explicação completa e detalhada dos principais comandos da linguagem ZPL (Zebra Programming Language) usados em impressoras de etiquetas Zebra, como ZT230, GK420t, LP2844, entre outras.
⸻
📘 Manual Explicativo dos Comandos ZPL (Zebra Programming Language)
💡 O ZPL é uma linguagem de marcação baseada em texto utilizada para formatar, desenhar e imprimir etiquetas em impressoras Zebra.
⸻
🔹 ESTRUTURA BÁSICA
^XA // Início da etiqueta ... // Conteúdo e comandos ^XZ // Fim da etiqueta
Comando Significado Quando usar ^XA Start Format — Indica o início de uma etiqueta Sempre no início do bloco ZPL
^XZ End Format — Finaliza e envia a etiqueta para impressão Sempre no fim da etiqueta
⸻
🔹 FORMATAÇÃO DE TEXTO
Comando Significado Exemplo Quando usar ^CF Change Font — Define a fonte padrão (nome, altura, largura) ^CF0,30 Para definir a fonte padrão do bloco
^CFA Change Font A — Atalho para fonte A com tamanho definido ^CFA,20 Para fontes menores ou headers
^A@ Load custom font — Usa fontes externas armazenadas ^A@N,25,25,E:MYFONT.TTF Quando usa fontes TTF baixadas via USB ou cartão SD
⸻
🔹 POSICIONAMENTO DE ELEMENTOS
Comando Significado Exemplo Quando usar ^FO Field Origin — Define a posição de início (X,Y) do campo ^FO50,100
Sempre que quiser posicionar um texto, código de barras ou imagem ^FB Field Block — Define uma “caixa de texto” com quebra de linha ^FB300,3,0,C,0
Para limitar textos longos em largura e aplicar alinhamento ^FS Field Separator — Termina o campo atual ^FDTexto^FS Sempre ao final de cada campo (^FD)
⸻
🔹 INSERÇÃO DE TEXTO
Comando Significado Exemplo Quando usar ^FD Field Data — Insere os dados/texto do campo ^FDProduto: Caneta^FS Sempre que quiser exibir texto ou valores
⸻
🔹 CÓDIGOS DE BARRAS
Comando Significado Exemplo Quando usar ^BY Bar code field default — Define largura, espaçamento e altura ^BY2,3,60 Antes de qualquer código de barras
^BC Code 128 Barcode — Imprime um código 128 ^BCN,100,Y,N Usado para rastreamento, SKU, códigos complexos
^B3 Code 39 Barcode ^B3N,N,60,N,N Mais simples, usado para códigos menores
^BD DataMatrix 2D code ^BDR,5,200 Quando quiser imprimir DataMatrix 2D (raro em ZPL puro)
⸻
🔹 QR CODE
Comando Significado Exemplo Quando usar ^BQ QR Code 2D — Gera um QR Code a partir de um texto ^BQ,2,5 Ideal para embutir JSON, links, URLs
Exemplo completo de QR Code:
^FO300,30 ^BQ,2,5 ^FDQA,https://www.meusite.com/track…
⸻
🔹 DESENHO E GRÁFICOS
Comando Significado Exemplo Quando usar ^GB Graphic Box — Desenha um retângulo ou linha ^GB400,5,5,B,0 Separadores, caixas visuais
^GD Graphic Diagonal Line ^GD300,300,10,B,0 Quando quiser desenhar uma linha diagonal (raro)
⸻
🔹 TAMANHO E RESOLUÇÃO
Comando Significado Exemplo Quando usar ^PW Print Width — Largura da etiqueta (dots) ^PW406 Define largura da etiqueta (ex: 4” = 406 dots @ 203DPI)
^LL Label Length — Altura da etiqueta (dots) ^LL203 Define altura da etiqueta (ex: 2” = 203 dots @ 203DPI)
⸻
🔹 COMANDOS GERAIS
Comando Significado Exemplo Quando usar ^LH Label Home — Offset da origem da etiqueta ^LH10,10 Ajustar posição global de todos os elementos
^LS Label Shift — Deslocamento vertical ^LS10 Compensar deslocamentos verticais
^MT Media Type — Tipo de mídia ^MTT T = Thermal Transfer, D = Direct Thermal
^MM Print Mode — Modo de impressão ^MMT T = Tear-Off, P = Peel-Off
⸻
🧪 Exemplo Real Completo (Etiqueta de Produto)
^XA ^PW406 ^LL203 ^CF0,30 ^FO20,20^FDProduto: Caneta Azul^FS ^CF0,20 ^FO20,60^FDREF: 12345-ABC^FS ^FO20,90^FDPreço: R$ 3,50^FS ^BY2,3,60 ^FO20,120^BC^FD12345ABC^FS ^FO300,20^BQ,2,4 ^FDQA,{"produto":"Caneta","ref":"12345"}^FS ^XZ
⸻
📚 Recursos Adicionais • Manual oficial ZPL II: https://www.zebra.com • ZPL Viewer Online: https://labelary.com/viewer.html
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 520 messages |
|
Posté le 02 juillet 2025 - 17:58 |
Perfeito! Aqui vão novos exemplos práticos e reais de uso de impressoras Zebra com ZPL no WinDev, cada um com finalidades distintas e bem aplicáveis em ambientes corporativos e industriais. Todos os exemplos são programados 100% via código, com foco em automação e integração com banco de dados ou variáveis do sistema.
⸻
✅ EXEMPLOS NOVOS DE IMPRESSÃO ZEBRA NO WINDEV
⸻
🔹 Exemplo 1: Etiqueta de Inventário Rápido (Resumo de Produto)
Ideal para prateleiras, depósitos e contagem cíclica.
🧩 Código WLanguage:
sZPL is string = [ ^XA ^PW406 ^LL203 ^CF0,30 ^FO20,20^FD%1^FS ^CF0,20 ^FO20,60^FDREF: %2^FS ^FO20,90^FDQtd: %3 un^FS ^BY2,3,40 ^FO20,130^BC^FD%2^FS ^XZ ]
sProduto is string = "Caixa de Caneta" sRef is string = "CX-123" nQtd is int = 250
sZPL = StringBuild(sZPL, sProduto, sRef, nQtd)
// Enviar para impressora Zebra iParameter(iDestination, "Zebra_GK420t") iParameter(iMode, iModeText) iPrint(sZPL)
⸻
🔹 Exemplo 2: Etiqueta com Data e Validade (Indústria Alimentícia)
Impressão automática de etiquetas de produtos com validade.
🧩 Código:
sDataFabricacao is string = DateToString(DateSys(), "DD/MM/YYYY") sValidade is string = DateToString(DateSys() + 30, "DD/MM/YYYY") sLote is string = "L" + NumToString(Random(1000,9999), "4")
sZPL is string = [ ^XA ^PW406 ^LL203 ^CF0,25 ^FO20,20^FDProduto: Farinha Premium^FS ^FO20,60^FDLote: %1^FS ^FO20,90^FDFabric: %2^FS ^FO20,120^FDVal: %3^FS ^BY2,3,40 ^FO20,150^BC^FD%1^FS ^XZ ]
sZPL = StringBuild(sZPL, sLote, sDataFabricacao, sValidade)
iParameter(iDestination, "Zebra_ZT230") iParameter(iMode, iModeText) iPrint(sZPL)
⸻
🔹 Exemplo 3: Etiqueta de Código QR com Link para Rastreio
Gera etiqueta com QR Code apontando para página de rastreio da transportadora.
🧩 Código:
sCodigo = "TRCK-20250702-001" sLink = "https://www.minhatransportadora.com/rastreio/" + sCodigo
sZPL is string = [ ^XA ^PW406 ^LL203 ^CF0,25 ^FO20,20^FDCódigo: %1^FS ^FO20,60^FDScan QR para rastrear:^FS ^FO150,100^BQ,2,5 ^FDQA,%2^FS ^XZ ]
sZPL = StringBuild(sZPL, sCodigo, sLink)
iParameter(iDestination, "Zebra_GK420t") iParameter(iMode, iModeText) iPrint(sZPL)
⸻
🔹 Exemplo 4: Etiqueta de Promoção com Preço e Desconto
Ideal para imprimir rapidamente etiquetas de prateleiras com promoções.
🧩 Código:
sProduto = "Arroz 5kg" sPrecoOriginal = "29,90" sPrecoPromocao = "24,90" sEconomia = "5,00"
sZPL is string = [ ^XA ^PW406 ^LL203 ^CF0,30 ^FO20,20^FD%1^FS ^CF0,25 ^FO20,60^FDDe: R$ %2^FS ^CF0,40 ^FO20,100^FDPOR: R$ %3^FS ^CF0,20 ^FO20,150^FDEconomize: R$ %4^FS ^XZ ]
sZPL = StringBuild(sZPL, sProduto, sPrecoOriginal, sPrecoPromocao, sEconomia)
iParameter(iDestination, "Zebra_ZT230") iParameter(iMode, iModeText) iPrint(sZPL)
⸻
🔹 Exemplo 5: Etiqueta com Código 39 (Padrão Simples de Logística)
Exibe texto e gera código de barras Code 39.
sCodigoLogistico = "*CX56789*"
sZPL is string = [ ^XA ^PW406 ^LL203 ^CF0,25 ^FO20,20^FDLogística Interna^FS ^FO20,60^FDID: %1^FS ^FO20,100^B3N,N,60,Y,N ^FD%1^FS ^XZ ]
sZPL = StringBuild(sZPL, sCodigoLogistico)
iParameter(iDestination, "Zebra_GK420t") iParameter(iMode, iModeText) iPrint(sZPL)
⸻
🔹 Exemplo 6: Etiqueta com JSON Encodado em QR Code
Para ambientes IoT, rastreamento interno e integração com scanners.
sJSON is string = [ {"produto":"Café","peso":"500g","id":"CAF-204"} ]
sZPL is string = [ ^XA ^PW406 ^LL203 ^CF0,25 ^FO20,20^FDProduto: Café^FS ^FO20,60^FDID: CAF-204^FS ^FO200,20^BQ,2,4 ^FDQA,%1^FS ^XZ ]
sZPL = StringBuild(sZPL, sJSON)
iParameter(iDestination, "Zebra_ZT230") iParameter(iMode, iModeText) iPrint(sZPL)
⸻
🧠 Dicas Importantes:
Dica Descrição ^PW Largura da etiqueta em dots (ex: 406 = 4” a 203 DPI) ^LL Altura da etiqueta ^BY Parâmetros de códigos de barra (largura, espaçamento, altura) ^BC, ^B3, ^BQ Tipos de códigos: Code 128, Code 39, QR Code iModeText Obrigatório para enviar ZPL via iPrint() StringBuild() Use para substituir valores dinamicamente no ZPL
———
Claro! Abaixo está um exemplo completo de impressão de uma etiqueta Zebra via ZPL contendo um QR Code com o link do site http://wxsolucoes.com.br, pronto para ser impresso em uma impressora Zebra como a ZT230, GK420t ou similar.
⸻
✅ Exemplo: Etiqueta com QR Code apontando para http://wxsolucoes.com.br
📦 Finalidade:
Imprimir uma etiqueta com o nome da empresa e QR Code que, ao ser escaneado, abre o site http://wxsolucoes.com.br.
⸻
🧩 Código WLanguage:
// Define o conteúdo do QR Code sURL is string = "http://wxsolucoes.com.br"
// Cria o comando ZPL com o QR Code sZPL is string = [ ^XA ^PW406 ^LL203 ^CF0,30 ^FO20,20^FDWX Soluções^FS ^FO20,60^FDScan o QR abaixo:^FS ^FO150,100^BQ,2,6^FDQA,%1^FS ^XZ ]
// Substitui a URL no comando sZPL = StringBuild(sZPL, sURL)
// Configura impressora Zebra iParameter(iDestination, "Zebra_ZT230") // Substitua pelo nome da sua impressora instalada iParameter(iMode, iModeText)
// Envia o ZPL diretamente para a impressora iPrint(sZPL)
⸻
📐 Detalhes Técnicos do ZPL:
Comando Função ^XA / ^XZ Início e fim do código ZPL ^PW406 Largura da etiqueta (406 dots = 4 polegadas) ^LL203 Altura da etiqueta (203 dots = 2 polegadas) ^CF0,30 Fonte padrão tamanho 30 ^FO Posição de cada campo (X,Y) ^FD Conteúdo de texto (Field Data) ^BQ,2,6 Geração do QR Code (modelo 2, escala 6) QA,URL Dados do QR Code (alinhamento automático com URL)
⸻
🖨️ Resultado Esperado:
A etiqueta gerada terá: • Texto: WX Soluções • Texto: Scan o QR abaixo: • Um QR Code centralizado apontando para http://wxsolucoes.com.br
⸻
Claro! Aqui está um exemplo completo em WLanguage para imprimir uma etiqueta com código de barras (barcode) usando ZPL em uma impressora Zebra, como Zebra GK420t, ZT230, ZD420, etc.
⸻
✅ Exemplo: Etiqueta com Código de Barras Code128
📦 Finalidade:
Imprimir o nome do produto e seu código em forma de texto e em código de barras (Code 128).
⸻
🧩 Código WLanguage:
// Dados do produto sNomeProduto is string = "Borracha Escolar" sCodigoProduto is string = "PROD-56789"
// Comando ZPL com Barcode (Code128) sZPL is string = [ ^XA ^PW406 ^LL203 ^CF0,30 ^FO20,20^FDProduto:^FS ^CF0,25 ^FO150,20^FD%1^FS ^FO20,60^FDCódigo:^FS ^FO150,60^FD%2^FS ^BY3,2,70 ^FO20,100^BCN,100,Y,N,N ^FD%2^FS ^XZ ]
// Substituir valores dinâmicos sZPL = StringBuild(sZPL, sNomeProduto, sCodigoProduto)
// Configurar impressão iParameter(iDestination, "Zebra_ZT230") // Altere para o nome da sua impressora iParameter(iMode, iModeText)
// Enviar para a impressora iPrint(sZPL)
⸻
🧠 Explicação dos Comandos ZPL:
Comando Função ^XA / ^XZ Início e fim da etiqueta ^PW406 Largura da etiqueta (4” com 203 DPI) ^LL203 Altura da etiqueta (2”) ^CF0,30 Fonte padrão (tamanho 30) ^FOx,y Posição do elemento na etiqueta ^FDtexto Campo de texto ^BY3,2,70 Largura do traço, espaçamento, altura do código de barras ^BC Gera código de barras Code128 N,100,Y,N,N Orientação normal, altura 100 dots, com texto abaixo
⸻
🖨️ Resultado Esperado:
A etiqueta impressa conterá: • Nome do produto (em texto) • Código alfanumérico do produto • Código de barras Code128 correspondente ao código
⸻
✅ Quer outro padrão de código de barras?
Posso gerar exemplos com: • ^B3 → Code 39 • ^BE → EAN-13 • ^BD → Data Matrix • ^BQ → QR Code • ^BC → Code 128
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 520 messages |
|
Posté le 02 juillet 2025 - 18:02 |
Aqui vai um exemplo completo e avançado em WLanguage + ZPL para impressão em impressoras Zebra, contendo: • ✅ Nome do produto • ✅ Código do produto • ✅ Code128 (código de barras tradicional) • ✅ QR Code (com JSON ou link) • ✅ Data de impressão • ✅ Lote e operador • ✅ Tudo programado via código (sem report visual)
⸻
🧩 Exemplo Completo: Etiqueta com Code128 + QR Code + Informações detalhadas
// ========================= // Dados do Produto (dinâmicos ou da base) // ========================= sNomeProduto is string = "Biscoito Integral" sCodigoProduto is string = "PROD-20250702" sLote is string = "LT-0897" sNomeOperador is string = "Adriano Boller" sLinkProduto is string = "https://wxsolucoes.com.br/produtos/" + sCodigoProduto sDataImpressao is string = DateTimeToString(Now(), "DD/MM/YYYY HH:MM")
// ========================= // Geração do comando ZPL // ========================= sZPL is string = [ ^XA ^PW406 ^LL406
^CF0,30 ^FO20,20^FDProduto:^FS ^FO150,20^FD%1^FS
^CF0,25 ^FO20,60^FDCódigo:^FS ^FO150,60^FD%2^FS
^FO20,100^FDLote:^FS ^FO150,100^FD%3^FS
^FO20,140^FDOperador:^FS ^FO150,140^FD%4^FS
^FO20,180^FDImpresso em:^FS ^FO200,180^FD%5^FS
^BY3,3,80 ^FO20,220^BCN,80,Y,N,N ^FD%2^FS
^FO250,220^BQ,2,4 ^FDQA,%6^FS
^XZ ]
// ========================= // Substituição dinâmica // ========================= sZPL = StringBuild(sZPL, sNomeProduto, sCodigoProduto, sLote, sNomeOperador, sDataImpressao, sLinkProduto)
// ========================= // Enviar para impressora // ========================= iParameter(iDestination, "Zebra_ZT230") // Substitua pelo nome real iParameter(iMode, iModeText) iPrint(sZPL)
⸻
🔍 O que será impresso:
Campo Conteúdo Produto Biscoito Integral Código PROD-20250702 Lote LT-0897 Operador Adriano Boller Data 02/07/2025 10:12 Code128 Gerado com PROD-20250702 QR Code https://wxsolucoes.com.br/…
⸻
🧠 Observações técnicas • O Code128 é ideal para logística, estoque, caixa. • O QR Code pode apontar para um link, JSON ou ID interno. • Com ^BQ,2,4 geramos um QR Code de boa qualidade (escala 4). • Ideal para armazenar informações técnicas no QR (ex: lote, fabricação, origem).
⸻
Excelente! A seguir, vou te mostrar como gerar um preview em PDF ou imagem de uma etiqueta ZPL com QR Code e Code128 usando:
⸻
✅ Opção 1: Preview via API externa Labelary (simulação real)
A Labelary é uma API pública que converte ZPL para imagem PNG ou PDF, permitindo ver a etiqueta antes de imprimir.
⸻
📦 Exemplo em WLanguage (WinDev) para gerar Preview com Labelary:
// Etiqueta ZPL gerada dinamicamente sZPL is string = [ ^XA ^PW406 ^LL406 ^CF0,30 ^FO20,20^FDProduto:^FS ^FO150,20^FDBiscoito Integral^FS ^CF0,25 ^FO20,60^FDCódigo:^FS ^FO150,60^FDPROD-20250702^FS ^FO20,100^FDLote:^FS ^FO150,100^FDLT-0897^FS ^FO20,140^FDOperador:^FS ^FO150,140^FDAdriano Boller^FS ^FO20,180^FDImpresso em:^FS ^FO200,180^FD02/07/2025 10:12^FS ^BY3,3,80 ^FO20,220^BCN,80,Y,N,N ^FDPROD-20250702^FS ^FO250,220^BQ,2,4 ^FDQA,https://wxsolucoes.com.br/produtos/PROD-20250702^FS ^XZ ]
// Salva o conteúdo ZPL em um arquivo temporário sCaminhoZPL is string = fTempFile("zpl") fSaveText(sCaminhoZPL, sZPL)
// Monta a URL da Labelary (PDF 4x6 polegadas, 203dpi) sURL is string = "http://api.labelary.com/v1/printers/203dpi/labels/4x6/0/"
// Envia a requisição via HTTP httpRequest is httpRequest httpRequest..URL = sURL httpRequest..Method = httpPost httpRequest..Content = sZPL httpRequest..ContentType = "application/x-www-form-urlencoded"
IF HTTPSend(httpRequest) = False THEN Error("Erro ao gerar preview: " + ErrorInfo(errMessage)) RETURN END
// Salva o conteúdo retornado em um PDF bufPDF is Buffer = HTTPGetResult() sArquivoPDF is string = fTempPath() + "preview_etiqueta.pdf" fSaveBuffer(sArquivoPDF, bufPDF)
// Abre o PDF no visualizador padrão ShellExecute(sArquivoPDF)
⸻
✅ Resultado:
Isso irá: 1. Gerar o ZPL via código. 2. Enviar para o Labelary como PDF de etiqueta 4x6 polegadas. 3. Abrir o preview da etiqueta em PDF. 4. Você verá exatamente o que será impresso na Zebra.
⸻
🎯 Alternativas: • Você pode trocar para PNG: http://api.labelary.com/v1/printers/203dpi/labels/4x6/0/ com header Accept: image/png • Também pode fazer o preview dentro do app com Image control se quiser.
⸻
Perfeito, Adriano! Abaixo está um pacote completo de exemplos em WLanguage (WinDev) para:
⸻
✅ 1. Gerar imagem com etiqueta em ZPL
✅ 2. Campos dinâmicos (Produto, Data/Hora, Usuário, Código, Lote)
✅ 3. Imprimir juntos: QR Code + Code128
✅ 4. Exportar para PDF usando Labelary.com
✅ 5. Simular em visualizador (preview interno no WinDev)
⸻
🧩 Estrutura Geral
Usaremos: • StringBuild() para gerar o ZPL • HTTPSend() com API da Labelary • Image control para preview • fSaveText() e fSaveBuffer() para salvar arquivos • ShellExecute() ou iPreview() para visualização
⸻
1️⃣ Função GerarZPL_ProdutoEtiquetaCompleta
PROCEDURE GerarZPL_ProdutoEtiquetaCompleta(sProduto, sCodigo, sLote, sUsuario, sURLQRCode) : string
sDataHora is string = DateTimeToString(Now(), "DD/MM/YYYY HH:MM") sZPL is string = [ ^XA ^PW406 ^LL406
^CF0,30 ^FO20,20^FDProduto:^FS ^FO150,20^FD%1^FS
^CF0,25 ^FO20,60^FDCódigo:^FS ^FO150,60^FD%2^FS
^FO20,100^FDLote:^FS ^FO150,100^FD%3^FS
^FO20,140^FDUsuário:^FS ^FO150,140^FD%4^FS
^FO20,180^FDImpresso em:^FS ^FO200,180^FD%5^FS
^BY3,3,80 ^FO20,220^BCN,80,Y,N,N ^FD%2^FS
^FO250,220^BQ,2,4 ^FDQA,%6^FS
^XZ ]
RETURN StringBuild(sZPL, sProduto, sCodigo, sLote, sUsuario, sDataHora, sURLQRCode)
⸻
2️⃣ Função ExportarEtiquetaParaPDF (com Labelary)
PROCEDURE ExportarEtiquetaParaPDF(sZPL is string)
sURL is string = "http://api.labelary.com/v1/printers/203dpi/labels/4x6/0/" httpReq is httpRequest httpReq..URL = sURL httpReq..Method = httpPost httpReq..ContentType = "application/x-www-form-urlencoded" httpReq..Content = sZPL HTTPSetHeader("Accept", "application/pdf")
IF HTTPSend(httpReq) = False THEN Error("Erro ao conectar com Labelary: " + ErrorInfo(errMessage)) RETURN END
bufPDF is Buffer = HTTPGetResult() sArquivoPDF is string = fTempPath() + "etiqueta_preview.pdf" fSaveBuffer(sArquivoPDF, bufPDF)
ShellExecute(sArquivoPDF) // Abre no visualizador de PDF
⸻
3️⃣ Função ExportarEtiquetaParaImagem (PNG)
PROCEDURE ExportarEtiquetaParaImagem(sZPL is string, sDestinoImagem is string)
sURL is string = "http://api.labelary.com/v1/printers/203dpi/labels/4x6/0/" httpReq is httpRequest httpReq..URL = sURL httpReq..Method = httpPost httpReq..ContentType = "application/x-www-form-urlencoded" httpReq..Content = sZPL HTTPSetHeader("Accept", "image/png")
IF HTTPSend(httpReq) = False THEN Error("Erro ao obter imagem: " + ErrorInfo(errMessage)) RETURN END
bufImg is Buffer = HTTPGetResult() fSaveBuffer(sDestinoImagem, bufImg)
⸻
4️⃣ Exemplo de uso + Visualização em Image control (em janela)
PROCEDURE SimularEtiquetaNoWinDev()
sZPL is string = GerarZPL_ProdutoEtiquetaCompleta( "Teclado Mecânico", "PROD-9087", "LT-1234", "Adriano Boller", "https://wxsolucoes.com.br/produtos/PROD-9087" )
sCaminhoImagem is string = fTempPath() + "etiqueta.png" ExportarEtiquetaParaImagem(sZPL, sCaminhoImagem)
// Supondo que sua janela tenha uma imagem chamada IMG_PREVIEW IMG_PREVIEW = sCaminhoImagem
⸻
5️⃣ Exemplo: Janela com Botões
Botão Ação "Pré-visualizar" Chama SimularEtiquetaNoWinDev() "Exportar PDF" Chama ExportarEtiquetaParaPDF(sZPL) "Imprimir" Chama iParameter(...) + iPrint(sZPL)
⸻
✅ Resultado: Visual Completo
🔲 Exibição dinâmica com: • Nome do produto • Código em texto • Code128 (legível por leitor de código de barras) • QR Code com link • Informações de rastreabilidade (Data, Usuário, Lote)
⸻
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 520 messages |
|
Posté le 02 juillet 2025 - 18:19 |
Excelente pedido! Abaixo está um exemplo completo e escalável em WLanguage (WinDev) com ZPL (Zebra Programming Language) para imprimir 1.000 etiquetas com:
⸻
✅ Requisitos Atendidos:
Item Incluído? Código do produto ✅ Nome do produto ✅ Validade com data atual (+30d) ✅ Código de barras (Code128) ✅ QR Code com link do manual ✅ Logo da empresa no topo ✅ (via ^XG ou bitmap incorporado) Impressão em lote (1.000x) ✅ (loop controlado)
⸻
🧩 Exemplo Completo em WLanguage (ZPL gerado dinamicamente)
// ============================================ // Função principal para imprimir 1000 etiquetas // ============================================
PROCEDURE ImprimirLoteEtiquetas()
// Parâmetros fixos sNomeProdutoBase is string = "Produto WX" sManualBase is string = "https://wxsolucoes.com.br/manual/" sCodigoBase is string = "WX-" sUsuario is string = "Adriano Boller" dValidade is Date = DateSys() + 30
// Loop de impressão FOR i = 1 TO 1000
sCodigo is string = sCodigoBase + NumToString(i, "04d") sNomeProduto is string = sNomeProdutoBase + " #" + NumToString(i, "04d") sLinkManual is string = sManualBase + sCodigo
sZPL is string = GerarZPL_ProdutoCompleto( sNomeProduto, sCodigo, dValidade, sUsuario, sLinkManual )
EnviarZPLParaImpressora(sZPL)
// Pequena pausa para evitar sobrecarga da fila Multitask(50)
END
Info("Impressão de 1.000 etiquetas finalizada com sucesso!")
⸻
🔧 Função: GerarZPL_ProdutoCompleto()
PROCEDURE GerarZPL_ProdutoCompleto(sNomeProduto, sCodigo, dValidade, sUsuario, sLinkManual) : string
sDataImpressao is string = DateTimeToString(Now(), "DD/MM/YYYY HH:MM") sDataValidade is string = DateToString(dValidade, "DD/MM/YYYY")
RETURN [ ^XA ^MNY ^CI28 ^PW406 ^LL406
^FO100,10^XGR:LOGO.GRF,1,1^FS
^CF0,30 ^FO20,60^FDProduto:^FS ^FO150,60^FD%1^FS
^CF0,25 ^FO20,100^FDCódigo:^FS ^FO150,100^FD%2^FS
^FO20,130^FDValidade:^FS ^FO150,130^FD%3^FS
^FO20,160^FDImpresso por:^FS ^FO150,160^FD%4^FS
^FO20,190^FDData:^FS ^FO150,190^FD%5^FS
^BY2,3,60 ^FO20,230^BCN,60,Y,N,N ^FD%2^FS
^FO270,230^BQ,2,5 ^FDQA,%6^FS
^XZ ] ..Replace("%1", sNomeProduto) ..Replace("%2", sCodigo) ..Replace("%3", sDataValidade) ..Replace("%4", sUsuario) ..Replace("%5", sDataImpressao) ..Replace("%6", sLinkManual)
⸻
🖼️ Inserção da logo no ZPL
Você pode converter a imagem do logo da empresa para ZPL usando: • O software Zebra Setup Utilities → “Graphic Downloader” • Ou usar este comando no terminal:
ztools img2zpl logo.png > logo.zpl
Depois: 1. Armazene a imagem na memória da impressora com nome R:LOGO.GRF 2. Use no ZPL: ^XGR:LOGO.GRF,1,1
⚠️ Esse processo é feito uma única vez. Após isso, você pode chamar o logo em todas as etiquetas via ^XG.
⸻
✅ Impressora
iParameter(iDestination, "Zebra_ZT230") // Substitua pelo nome correto iParameter(iMode, iModeText)
⸻
✨ Resultado Visual
Cada etiqueta conterá: • 🔹 Logo no topo • 🔹 Nome do produto com número • 🔹 Código interno (WX-0001, WX-0002…) • 🔹 Validade baseada na data do sistema • 🔹 Código de barras legível • 🔹 QR Code com link do manual (ex: .../manual/WX-0001)
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 520 messages |
|
Posté le 02 juillet 2025 - 18:25 |
As ferramentas WX (Windev, Webdev e Windev Mobile) tem um gerador de relatórios extremamente poderoso e versátil, e sim — é totalmente possível criar relatórios no próprio Editor de Relatórios do WinDev, definindo o tamanho da etiqueta, instalando o driver da impressora Zebra como qualquer outra impressora no Windows, e imprimindo etiquetas com formatação gráfica avançada, inclusive imagens, QR Codes e códigos de barras, sem depender diretamente do ZPL manual.
A seguir, criei um manual completo e profissional de como imprimir etiquetas Zebra via Relatórios WinDev, utilizando os recursos nativos da IDE e do Windows, sem escrever código ZPL — uma abordagem mais amigável, ideal para cenários com designers não técnicos ou etiquetas mais complexas graficamente.
⸻
📘 Manual Completo: Impressão de Etiquetas Zebra com o Gerador de Relatórios do WinDev
⸻
🎯 Objetivo
Este manual descreve o processo para: • Criar etiquetas no Editor de Relatórios do WinDev • Definir o tamanho exato da etiqueta • Imprimir etiquetas diretamente em impressoras Zebra (ZT230, GK420, LP2844 etc.) • Utilizar imagens, códigos de barras e QR Codes • Configurar o driver da impressora Zebra como uma impressora Windows comum
⸻
🧰 Pré-requisitos • WinDev instalado • Impressora Zebra instalada no Windows com driver adequado: • Utilize ZebraDesigner Driver (Windows-compatible) • A impressora aparecerá no painel “Dispositivos e Impressoras” com nome como Zebra_ZT230
⸻
🪟 Etapa 1: Instalar a Impressora Zebra no Windows 1. Baixe o driver Zebra: https://www.zebra.com 2. Instale com o nome desejado (ex: Zebra_ZT230) 3. Vá em Preferências de Impressora → Avançado → Tamanho do Papel 4. Crie um novo tamanho correspondente à sua etiqueta (ex: 100mm x 50mm ou 4in x 2in) 5. Salve com um nome como Etiqueta_100x50
⸻
🧾 Etapa 2: Criar o Relatório no WinDev 1. Vá em Project > Reports > New Report 2. Escolha: Report on File or Query (ou manualmente) 3. Fonte de dados: Preenchimento por Programação (ideal para etiquetas) 4. Tamanho da página: • Vá em “Report Description” > “Page Format” • Defina: • Largura: ex: 100mm • Altura: ex: 50mm • Margens: 0 ou 2mm (conforme necessário)
⸻
🔳 Etapa 3: Inserir Campos e Controles
Dentro do relatório: • Texto Estático: para rótulos fixos como Produto:, Validade: • Campos de Dados: • STC_NOME, STC_VALIDADE, STC_CODIGO • Preenchidos via programação no BEFORE PRINTING BODY • Imagem: • Adicione logo da empresa com o controle “Image” • Código de Barras: • Use o controle “Barcode” (Code128, EAN13, etc.) • Defina Value = STC_CODIGO • QR Code: • Também pode ser adicionado como “2D Barcode” • Use o link do manual do produto: https://wxsolucoes.com.br/manual/PROD-001
⸻
🧠 Etapa 4: Código para Preencher Etiquetas
// BEFORE PRINTING REPORT HExecuteQuery(dsProdutos, MyConnection) HReadFirst(dsProdutos)
// BEFORE PRINTING BODY IF HOut(dsProdutos) THEN RESULT False
STC_NOME = dsProdutos.nome_produto STC_CODIGO = dsProdutos.codigo_barras STC_VALIDADE = DateToString(DateSys() + 30, "DD/MM/YYYY") IMG_LOGO = "C:\Imagens\logo.png" BAR_QR = "https://wxsolucoes.com.br/manual/" + dsProdutos.codigo_barras BAR_CODIGO = dsProdutos.codigo_barras
// AFTER PRINTING BODY HReadNext(dsProdutos)
// AFTER PRINTING REPORT HFreeQuery(dsProdutos)
⸻
🖨️ Etapa 5: Imprimir na Impressora Zebra
No momento da impressão: 1. Selecione o relatório criado 2. Use:
iParameter(iDestination, "Zebra_ZT230") // Nome da impressora instalada iPrintReport(RPT_EtiquetaZebra)
✔️ O WinDev automaticamente gera a saída gráfica compatível com a impressora, sem exigir que você escreva manualmente comandos ZPL.
⸻
🎁 Vantagens deste método
✅ Design visual direto (sem ZPL) ✅ Fácil edição por usuários não técnicos ✅ Suporte nativo a códigos de barras e QR ✅ Compatível com imagens e logos ✅ Integração direta com banco de dados ✅ Funciona com qualquer impressora instalada no Windows
⸻
🧪 Dicas Avançadas • Utilize etiquetas contínuas com 1 etiqueta por página • Teste impressão com apenas 1 item antes de fazer o lote • Crie modelo visual separado para cada tamanho de etiqueta • Use iPreview() antes de enviar direto à Zebra
⸻
🚀 Exemplo Final de Uso
iParameter(iDestination, "Zebra_ZT230") iParameter(iNumberCopy, 1000) iPrintReport(RPT_EtiquetaZebra)
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 520 messages |
|
Posté le 02 juillet 2025 - 18:32 |
Agora vamos direto ao ponto: criar etiquetas adesivas térmicas contínuas para impressoras Zebra, utilizando WinDev com relatório nativo, papel contínuo (sem separação de páginas) e impressão direta.
⸻
🧾 Manual: Impressão em Etiquetas Térmicas Contínuas com Zebra no WinDev
⸻
🎯 Objetivo
Permitir a impressão em bobinas contínuas de etiquetas térmicas, sem separação de páginas, usando o gerador de relatórios do WinDev e impressoras Zebra térmicas.
⸻
🖨️ O que é uma etiqueta contínua?
É uma bobina sem gaps fixos, onde as etiquetas são impressas seguidas, uma após a outra, e a impressora faz a separação por: • Altura definida no relatório • Ou marcas pretas no verso (marcador de gap/black mark)
⸻
🧰 Requisitos • Impressora Zebra (ex: ZT230, GK420, ZD220, etc) • Driver ZebraDesigner instalado no Windows • Papel contínuo configurado (ex: 100 mm x 50 mm) • WinDev com relatório configurado em modo “Preenchimento por Programação”
⸻
🔧 Etapa 1 – Instalar driver e configurar papel 1. Baixe o driver ZebraDesigner: https://www.zebra.com/us/en/support-downloads/printer-software.html 2. Acesse: Painel de Controle → Dispositivos e Impressoras 3. Clique com o botão direito na impressora → Preferências de Impressão 4. Configure um novo formato de papel: • Nome: Etiqueta_100x50 • Largura: 100mm • Altura: 50mm (ou conforme sua etiqueta real) • Margens: 0 mm
⸻
📐 Etapa 2 – Criar relatório no WinDev (modo contínuo) 1. Crie novo relatório: Report > New > Report on File or Query 2. Fonte de dados: Preenchimento por programação 3. No assistente, escolha: • Tamanho da etiqueta como “página” • Exemplo: • Largura: 100 mm • Altura: 50 mm 4. Em “Descrição do Relatório” > Aba ‘Page Format’: • Defina o tamanho da etiqueta como página • ⚠️ NÃO adicione cabeçalho/rodapé se quiser layout contínuo 5. Crie apenas o Body (corpo)
⸻
🎨 Etapa 3 – Inserir campos da etiqueta
Exemplo: uma etiqueta de produto + validade + código de barras • Campo de texto: STC_NOME • Campo de texto: STC_VALIDADE • Campo de código de barras: BAR_CODIGO • QR Code: (opcional, se desejar link)
⸻
💻 Etapa 4 – Código WLanguage para preencher e imprimir
// Impressão em modo contínuo de 500 etiquetas
FOR i = 1 TO 500
STC_NOME = "Produto WX " + NumToString(i, "04d") STC_VALIDADE = DateToString(DateSys() + 30, "DD/MM/YYYY") BAR_CODIGO = "WX-" + NumToString(i, "04d")
iParameter(iDestination, "Zebra_ZT230") // Nome da impressora Zebra iPrintReport(RPT_Etiqueta_Continua)
END
⸻
⚙️ Parâmetros de impressão
iParameter(iMode, iModeStandard) iParameter(iOrientation, iPortrait) iParameter(iMarginTop, 0) iParameter(iMarginBottom, 0) iParameter(iPaperSize, iPaperUser) iParameter(iPageWidth, 100) // em mm iParameter(iPageHeight, 50)
⸻
🧪 Etapa 5 – Dicas e validações
Situação Solução Etiquetas saindo coladas Reduza PageHeight ou ative modo contínuo Pulando etiquetas Verifique gap ou sensor da impressora Impressão desalinhada Verifique margens no relatório Impressão parando no meio Desative cabeçalho/rodapé
⸻
🧾 Exemplo visual (resumo de campos por etiqueta)
┌────────────────────────────────────────────┐ │ LOGO WX SOLUÇÕES (opcional) │ │ Nome: Produto WX 001 │ │ Validade: 01/08/2025 │ │ Código: WX-0001 (barcode) │ │ QR Code com link opcional │ └────────────────────────────────────────────┘
⸻
🖨️ Resultado: Impressão contínua real
A impressora imprime as etiquetas sequencialmente, sem pausas, em rolo, utilizando a altura definida no relatório. A separação entre etiquetas depende: • Do tamanho do relatório (1 página = 1 etiqueta) • Do sensor de gap (se habilitado) • Ou da marca preta no verso
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 520 messages |
|
Posté le 02 juillet 2025 - 18:41 |
| |
| |
| | | |
|
| | | | |
| | |
|