Comece grátis

zplCloud Blog

Chegou o zplCore.com: o motor de etiquetas do zplCloud como SDK .NET

O motor por trás de cada pré-visualização do zplCloud agora está disponível para as suas próprias aplicações: renderização de ZPL II e EPL2 medida contra referências fiéis à impressora, 144 simbologias, pré-verificação de conformidade, scan-proof, gêmeo da impressora, testes de etiquetas na CI e um servidor MCP para agentes de programação.

18 min de leitura zplCloud Team

O motor do zplCloud agora é um SDK

Banner “zplCore.com. The engine, as an SDK.” com uma etiqueta de envio real renderizada pelo zplCore e, ao lado, o resultado do scan-proof do mesmo arquivo: Code 128, Data Matrix e PDF417 com nota A, o SSCC GS1-128 com nota D

Cada pré-visualização e cada PDF no zplCloud é renderizado por um único motor: o zplCore.com. A partir de hoje, ele está disponível como SDK .NET 10 para as suas próprias aplicações, com todos os recursos que o zplCloud usa: renderizar ZPL II e EPL2 para PNG, PDF e SVG, montar etiquetas a partir de dados, verificá-las com as regras da GS1 e das transportadoras, ler de volta cada código de barras, simular impressoras, inclusive falhas, e imprimir. Ele roda em Windows, Linux e macOS, em Docker e Kubernetes, sem driver de impressora.

Em resumo: o zplCore.com é uma biblioteca .NET com uma CLI, um pacote de testes e um servidor MCP. Ele renderiza como uma impressora Zebra virtual e é medido contra referências fiéis à impressora. Além de renderizar, ele verifica e simula: pré-verificação de conformidade, scan-proof, gêmeo da impressora, impressora do caos e testes de etiquetas na CI. Uma versão de avaliação está disponível mediante solicitação em zplcore.com.

Por que o zplCloud criou o próprio motor

Até outubro de 2026, o zplCloud usava os SDKs ThermalLabel e ZPLPrinter da Neodynamic para as pré-visualizações e para transformar designs em ZPL. Hoje o zplCore.com é o único motor do zplCloud: o designer gera ZPL, e as pré-visualizações em PNG, SVG e PDF renderizam exatamente esse ZPL. O que você vê na pré-visualização é o que vai para a impressora. Não existe mais um segundo caminho de geração de imagens.

Tivemos três motivos:

  • A impressora é a referência. O zplCore é comparado pixel a pixel, com tolerância de 2 pontos, com renderizações de referência do Labelary fiéis à impressora: pontuação média de 0,986 em 169 casos de teste, 131 deles com 0,99 ou mais e 85 idênticos pixel a pixel. Testes automatizados garantem que nenhum caso fique abaixo da pontuação atual.
  • Só renderizar não basta. Uma etiqueta pode parecer certa e mesmo assim falhar: um código de barras na zona de silêncio, um campo fora da cabeça de impressão, um SSCC com a dimensão X errada. Queríamos um motor que respondesse a essas perguntas sozinho, offline e dentro do build.
  • Uma única base de código para a nuvem e para os seus próprios servidores. As funções por trás das ferramentas gratuitas do zplCloud são as mesmas que você recebe no SDK.

O zplCore.com é uma implementação independente, baseada na especificação pública do ZPL II e nos padrões das simbologias. Ele não contém código de outros fornecedores comerciais; os componentes de código aberto que utiliza estão listados nos seus avisos de terceiros.

O que é o zplCore.com

ÁreaConteúdo
Plataforma.NET 10; testado em Windows 11, macOS, Debian e Azure Linux 3.0 (inclusive distroless); Dockerfile e Helm chart incluídos; compatível com NativeAOT
EntradaZPL II e EPL2; formulários EPL podem ser convertidos para ZPL
SaídaPNG, JPEG, WebP, BMP, GIF, PDF e SVG (ambos vetoriais), TIFF, PCX, PCL, GRF, EPS, HTML, além de EPL, Fingerprint e ESC/POS
Códigos de barras144 simbologias, de Code 128, GS1 DataBar e QR a MaxiCode, DotCode e Han Xin; parser e validador GS1 com 534 identificadores de aplicação
Etiquetas a partir de dadosmodelo de etiqueta em mm ou polegadas, modelos JSON, data binding com objetos C#, EF Core, LiteDB, MongoDB e JSON, streaming com memória constante
ImpressãoTCP 9100, serial, USB, spooler do Windows, CUPS; status ~HS/~HQES; uma impressora virtual na TCP 9100
Sistemas de escritashaping com HarfBuzz e bidi para árabe, hebraico, tailandês, escritas índicas e CJK

Poucas linhas de C# até a pré-visualização:

using ZplCore;

var renderer = new ZplRenderer(new ZplRenderSettings { Dpi = 203 }.WithLabelSizeMm(100, 150));
List<byte[]> pngs = renderer.ProcessFile("labels.zpl");          // one PNG per label

renderer.Settings.OutputFormat = ZplOutputFormat.Pdf;             // one PDF, one page per label
File.WriteAllBytes("preview.pdf", renderer.ProcessFile("labels.zpl")[0]);

O que “fiel à impressora” significa em detalhe:

  • QR Codes (^BQ, modelo 2) são idênticos módulo a módulo à saída da Zebra: seleção de modo, versão, correção de erros e máscara, verificados em mais de 3.600 símbolos de referência do Labelary.
  • PDF417 (^B7) e MicroPDF417 (^BF) são idênticos palavra de código a palavra de código ao Labelary, com a compactação da Zebra.
  • Conjuntos de caracteres (^CI) e ^FH funcionam como na impressora: sem ^CI a etiqueta usa a Code Page 850, ^CI0 a ^CI12 substituem os caracteres nacionais, as code pages do Windows seguem o guia do ZPL e, com ^CI28, os símbolos 2D carregam os bytes que a impressora codifica.
  • Comportamento da Zebra reproduzido: larguras de avanço da fonte 0, o deslocamento da posição do QR pela altura do ^BY, Code 128 no modo N permanecendo no subconjunto B, barras largas como floor(ratio × module).

E ele também é rápido. Em um build de release em um Apple M3 Max, o zplCore gerou até 199.000 etiquetas por segundo em ZPL (formato armazenado, 100.000 etiquetas em um único job) e mais de 5.000 pré-visualizações PNG por segundo com 10 threads. Cada medição pode ser repetida com um único comando.

Um tour pelos recursos

Todas as imagens e saídas desta seção vêm do próprio motor: da documentação do zplCore, da CLI do zplCore ou das ferramentas gratuitas do zplCloud.

Pré-verificação de conformidade

Metade inferior de uma etiqueta de palete SSCC anotada pelo zplCore: os dois códigos de barras GS1-128 estão marcados em vermelho com as regras ZPL3104, ZPL3105, ZPL3106 e ZPL3110

ZplCompliance.Check verifica uma etiqueta com 84 regras em 8 pacotes: etiqueta logística GS1, Sunrise 2027 com GS1 Digital Link, Amazon FBA, UPS MaxiCode, requisitos básicos de FedEx e DHL Paket, UDI e RFID/EPC. Ele mede a etiqueta renderizada em vez de ler o texto: dimensão X em mm, altura das barras, zonas de silêncio, tamanho do HRI, formatos de AI e dígitos verificadores. Cada achado traz ID da regra, linha, posição e fonte, como texto, JSON, SARIF 2.1.0 ou um PNG anotado como o de cima. Este é o exemplo da nossa ferramenta gratuita Verificação de conformidade de etiquetas:

$ zplcore comply pallet.zpl --pack gs1-logistic --dpi 203
pallet.zpl:13:1: error ZPL3104: label 1 ^BC: X-dimension 0.25 mm (2 dot(s) at 203 dpi) is below the minimum 0.495 mm for logistic units (0.250 mm only if the unit is physically too small). [GS1 General Specifications 26.0 §5.12.3.5 Table 5-51]
    fix: Use ^BY4 or wider at 203 dpi.
pallet.zpl:15:1: error ZPL3106: label 1 ^BC: GS1-128 needs 10X quiet zones: the left quiet zone (30 dots = 3.754 mm) runs 20 dot(s) past the label edge. [GS1 General Specifications 26.0 §5.4.4.2, §5.4.6.3, Table 5-51]
    fix: Move the barcode or the neighbouring field, or reduce ^BY.
1 label(s) at 203 dpi, packs gs1-logistic GenSpecs 26.0 / LLG 1.3: 6 error(s), 0 warning(s), 2 info(s). Pre-check only, not a certification.

A saída foi reduzida a dois dos seis erros. O pacote Sunrise 2027 verifica códigos de barras 2D no caixa do varejo; o nosso post GS1 Sunrise 2027: códigos de barras 2D no caixa mostra isso em detalhe. Importante: trata-se de uma pré-verificação, não de uma certificação. Ela não substitui a aprovação de uma transportadora ou de um órgão regulador, nem um verificador na etiqueta impressa. Documentação

Scan-proof

Etiqueta de gôndola anotada pelo scan-proof do zplCore: o EAN-13 na borda esquerda está marcado em vermelho com nota F, o QR Code em vermelho com nota D, Code 39 e Data Matrix em verde com nota A

ZplScanProof.Verify lê de volta cada código de barras do bitmap renderizado com dois decodificadores independentes (zxing-cpp e ZXing.Net) e compara o resultado com os dados do campo. Ele mede dimensão X, zonas de silêncio, altura das barras, cortes e sobreposições e atribui uma nota de A a F: uma pré-verificação digital baseada na ISO/IEC 15415/15416, calculada na resolução da impressora. No exemplo da nossa ferramenta gratuita Teste de leitura de códigos de barras, os quatro códigos de barras são decodificados, mas dois causariam problemas (saída abreviada):

$ zplcore verify shelf.zpl --dpi 203
[0.0] ^BE EAN-13 line 7 at 8,80 (285×120 dots, 0°)
  status: Match   digital grade: F (0.0)
  SP1101 error: Quiet zone left: 2.7X, 11X required (ISO/IEC 15420 / GS1); limited by the label edge.
  SP1102 error: The symbol is cut off by the label edge (129 pixels of its ink lie outside ^PW/^LL).
[0.1] ^BQ QR Code line 8 at 600,10 (125×245 dots, 0°)
  status: Match   digital grade: D (1.0)
  SP1101 warning: Quiet zone bottom: 3X, 4X required (ISO/IEC 18004); limited by other ink.

O Code 39 recebe nota A, mas com um aviso: o texto “ART-4712” ao lado parece ser a sua linha de interpretação, mas difere do valor codificado “ART-4711”. A nota não substitui um verificador calibrado na etiqueta impressa. Documentação

De ZPL para um modelo de etiqueta editável

Label.FromZpl transforma ZPL existente em um modelo editável e vinculado a dados: textos, códigos de barras, formas, imagens e RFID viram itens tipados, campos ^FN viram campos de dados e formatos ^DF viram modelos. Cada item é verificado pixel a pixel em relação ao original; todos os 318 arquivos do corpus de testes voltam idênticos pixel a pixel. Por exemplo, a etiqueta de envio do banner:

$ zplcore import hero-label.zpl -o label.json --report
1 label(s), 203 dpi (LabelSize), fidelity 1,0000
  label 1: fidelity 1.0000 pixel-exact, 38 typed, 0 raw item(s)
  Info: Resolution detected as 203 dpi from the label width

O zplCloud usa exatamente isso para importar ZPL no designer (mais detalhes abaixo). Documentação

Compreensão de etiquetas e anonimização conforme o GDPR

Duas etiquetas de envio renderizadas pelo zplCore: à esquerda, o original com remetente, destinatário, número de rastreamento e códigos de barras 2D; à direita, a versão anonimizada, com nomes, endereços, número de rastreamento e conteúdo dos códigos de barras substituídos por marcadores no mesmo layout

ZplExtract lê do ZPL destinatário, remetente, números de rastreamento com dígito verificador, SSCC, GTIN, datas e pesos, cada um com a sua posição e um valor de confiança. Na etiqueta acima, ele encontra o endereço do destinatário com confiança de 0,95, o SSCC 340123450000000017 do AI (00) da GS1 com dígito verificador válido, o peso e a data. ZplRedact substitui os dados pessoais mantendo o layout, inclusive comentários ^FX, dados ^DF/^XF e conteúdo de códigos de barras 2D, insere códigos de barras fictícios válidos e depois faz uma nova busca: nesta etiqueta, 28 ações, 29 valores pesquisados, 0 restantes. O recurso é baseado em regras e funciona sem rede; revise o resultado antes de compartilhá-lo. Texto dentro de imagens não é lido. Documentação

GS1 Digital Link e migração para o Sunrise 2027

Etiqueta de alimento renderizada pelo zplCore antes e depois da migração: à direita, um QR Code com GS1 Digital Link foi adicionado ao lado do EAN-13, contornado por uma moldura verde tracejada

ZplGs1Migration.Migrate encontra o GTIN em um EAN/UPC, GS1-128, ITF-14 ou GS1 DataBar e adiciona, em um espaço livre, um QR Code com URI GS1 Digital Link ou um GS1 DataMatrix, com a zona de silêncio e uma pré-verificação Sunrise do resultado. Nesta etiqueta, o lote e a data de consumo preferencial (AI 15) são aproveitados do GS1-128 (saída abreviada):

$ zplcore gs1 migrate cheese.zpl -o cheese-2d.zpl
label 1: migrated – added a QR Code with GS1 Digital Link URI with GTIN 09506000134352 right of the EAN-13 (^BE, line 9), top-aligned with the bars
  uri: https://id.gs1.org/01/09506000134352/10/L2604?15=270331
sunrise pre-check of the migrated ZPL: 0 error(s), 0 warning(s), 0 info(s)

No zplCloud, a ferramenta gratuita Migração Sunrise 2027 faz o mesmo no navegador. É um assistente de migração, não uma certificação. Documentação

RFID Studio

Etiqueta de caixa renderizada pelo zplCore com um código de barras SSCC GS1-128 e o símbolo RFID cinza que as pré-visualizações exibem em etiquetas com comando de gravação RFID

ZplRfid codifica e decodifica EPCs de acordo com o GS1 EPC Tag Data Standard 2.3 (SGTIN, SSCC, SGLN, GRAI, GIAI e os esquemas “plus” do TDS 2.0) e gera os comandos ^RF correspondentes. A verificação de consistência compara a tag com a etiqueta impressa. Neste exemplo, a tag receberia um SSCC diferente do que o código de barras mostra:

$ zplcore rfid check carton.zpl
carton.zpl:6:1: error ZPL3904: label 1 ^RF: The SSCC-96 EPC encodes SSCC (00) 340123450000000024, but ^BC prints 340123450000000017. [GS1 EPC Tag Data Standard 2.3 §7 (correspondence of EPC and GS1 keys); GS1 General Specifications 26.0 §4.13]
    fix: Encode the printed key, e.g. ZplRfid.EncodeEpc("(00)340123450000000017…") or 'zplcore rfid encode'.

zplcore rfid simulate executa os comandos RFID de uma etiqueta em uma tag Gen2 simulada, como faria uma impressora RFID. Documentação

Gêmeo da impressora (Printer Twin)

A mesma etiqueta de envio de 4 × 6 polegadas duas vezes: à esquerda, anotada pelo zplCore para uma ZQ510 com cabeça de impressão de 72 mm, com a parte direita hachurada em vermelho; à direita, a saída como a ZQ510 a imprimiria, cortada em 72 mm

Esta etiqueta vai imprimir neste modelo? ZplPrinterTwin.Check compara uma etiqueta com um de 24 perfis (entre eles ZD421, ZD621, ZT411, ZT610, ZQ630 e três perfis genéricos) e aponta campos fora da largura da cabeça de impressão, opcionais ausentes como cortador ou RFID, limites de firmware, fontes e memória, além de uma estimativa do tempo de impressão. Cada informação de perfil é respaldada por uma fonte citada ou marcada como desconhecida. A etiqueta de 4 × 6 polegadas acima em uma impressora com cabeça de impressão de 72 mm (um dos 21 achados exibido):

$ zplcore twin check hero-label.zpl --profile ZQ510-203
  ZPL5102 error (53:1): Label 1: ^BC ">;>800340123450000000017" at x=280 is 16 dots (2 mm) wider than the printhead of ZQ510-203 (576 dots = 72 mm): the right part is cut off; a clipped barcode does not scan.
ZQ510-203: 13 error(s), 8 warning(s), 0 info

Documentação

Impressora do caos e pré-visualização do cortador

Seis etiquetas de caixa renderizadas pelo zplCore em duas colunas; abaixo das etiquetas 3 e 6, uma linha de corte vermelha tracejada com tesoura e símbolo de pausa

ZplVirtualPrinter escuta na TCP 9100, renderiza os jobs recebidos e responde a ~HS e ~HQES como uma impressora. Quando solicitado, ela falha: falta de papel ou de ribbon, cabeça aberta, buffer cheio, cortador travado, RFID void, desconexões, timeouts, tudo roteirizado e reproduzível:

printer.Faults.Schedule(ZplFaultKind.PaperOut, ZplFaultTrigger.AfterLabels(3)); // label 4 waits
printer.Faults.Seed = 42;                                                       // deterministic random triggers

A simulação do cortador mostra onde uma impressora com cortador corta (^MM, ^PQ, ^CN, ~JK e outros) e desenha os cortes nas pré-visualizações PNG, SVG e PDF, como acima: ^MMC com ^PQ6,3 corta depois das etiquetas 3 e 6. Impressora do caos · Cortador

Testing+ e GitHub Action

Código de barras SSCC de uma etiqueta de palete três vezes: antes da alteração, depois da alteração com barras mais estreitas e outro SSCC, e como imagem de diferenças em vermelho e verde

Etiquetas são código, então teste-as como código. O pacote ZplCore.Testing funciona com xUnit, NUnit e MSTest:

ZplAssert.Label(zpl)
    .NoOverlaps()
    .Complies(CompliancePacks.Gs1LogisticLabel)
    .Barcode("SSCC").Decodes("(00)376104250021234569").HasGrade(atLeast: 'B')
    .And.MatchesSnapshot("pallet");

Quando um teste falha, ele indica o elemento, a posição e a linha do ZPL, com o link de uma imagem em que o elemento aparece destacado. zplcore check executa as mesmas verificações em muitos arquivos e gera JUnit XML, SARIF e Markdown. A GitHub Action incluída no SDK comenta nos pull requests com imagens de antes, depois e das diferenças e lista o que mudou. As imagens acima vêm de uma dessas execuções: uma alteração estreitou o código de barras SSCC de ^BY4 para ^BY3 e mudou os dados (saída abreviada):

$ zplcore check labels/pallet.zpl --pack gs1-logistic --verify --baseline ../base
FAIL labels/pallet.zpl (1 label(s), 0.25 s) · changed vs baseline (3 element change(s))
  FAIL comply gs1-logistic
    labels/pallet.zpl:12:1: error ZPL3104: Label 1: X-dimension 0.375 mm (3 dot(s) at 203 dpi) is below the minimum 0.495 mm for logistic units (0.250 mm only if the unit is physically too small).
    labels/pallet.zpl:12:1: note ZT3001: Label 1: barcode ^BC Code128 at x=86 y=820: data "(00)376104250021234569" → "(00)376104250021234576"
FAILED (fail-on error)

Documentação

Servidor MCP para agentes de programação

O zplcore-mcp oferece ao Claude Code, ao Claude Desktop, ao VS Code com GitHub Copilot e ao Cursor 26 ferramentas via Model Context Protocol: renderização, lint, formatação, diff, conformidade, scan-proof, anonimização, gêmeo da impressora, GS1 e RFID, entre outras. Um agente escreve ZPL, olha o PNG, lê os diagnósticos e corrige a etiqueta em loop.

claude mcp add zplcore -- zplcore-mcp

O servidor foi feito para entradas não confiáveis. Ele se comunica apenas via stdio e não abre nenhuma porta de rede. Cada chamada roda em um processo de trabalho próprio, com limites de tempo e memória e um ambiente vazio, sem acesso a arquivos, rede, impressoras ou variáveis de ambiente; no macOS, soma-se um sandbox do sistema operacional. Testes adversariais, fuzzing e uma auditoria de IL do assembly verificam essas regras. Documentação

De PDF e SVG para ZPL nativo (Vector-Lift)

À esquerda, uma etiqueta SVG com título, local de armazenagem, linha, Code 128, número de série e carimbo de controle de qualidade; à direita, a mesma etiqueta renderizada a partir de ZPL nativo, com texto na fonte 0, um Code 128 como ^BC e moldura, linha e círculo como formas ZPL

O Vector-Lift transforma PDFs ou SVGs de transportadoras e ERPs em ZPL de verdade, em vez de uma única imagem raster ^GF: textos como campos ^A0; códigos de barras decodificados, regenerados como comandos ^B nativos e verificados; linhas e caixas como ^GB, ^GC e ^GE. Cada etiqueta vem com uma fidelidade medida:

$ zplcore lift lift-label.svg -o lift.zpl --report
799x400 dots @ 203 dpi (default), fidelity 0.9785 (exact 0.9114), native ink 97.8 %, 370 bytes vs 4,140 bytes ^GF raster (8.9%)
4 native, 5 approximated, 0 raster, 1 dropped, barcodes match

O texto é composto na fonte 0 em vez da tipografia original, e texto que no PDF existe apenas como contornos continua sendo gráfico (sem OCR). No zplCloud, a ferramenta gratuita PDF para ZPL nativo usa esse recurso. Documentação

NativeAOT

O SDK, o pacote de testes, a CLI e o servidor MCP compilam sem avisos de trimming ou de AOT. A CLI e o servidor MCP podem ser publicados como programas nativos que iniciam sem um runtime .NET instalado, e um smoke test compara a saída deles com a versão JIT byte a byte e pixel a pixel. Documentação

O que muda para quem usa o zplCloud

Você não precisa instalar nada; o zplCloud já roda com o zplCore.com:

Em breve: zplCore Server (Docker)

O próximo passo é empacotar o motor como um contêiner pronto para uso com uma API REST: entra ZPL, sai PNG, PDF ou um relatório de verificação. Estão planejados uma imagem multi-arquitetura para linux/amd64 e linux/arm64, distroless, rodando sem root e com sistema de arquivos somente leitura, os endpoints /health, /ready e /metrics (Prometheus), uma descrição OpenAPI e imagens assinadas com SBOM. No nosso teste com NativeAOT em linux/arm64, o servidor iniciou em cerca de 4 ms, renderizou a primeira etiqueta em cerca de 11 ms e a imagem tinha cerca de 100 MB. O conjunto de recursos está planejado; em zplcore.com você pode pedir para ser avisado quando a primeira versão estiver pronta.

Experimente

  • Demo ao vivo: zplcore.com/en/demo renderiza ZPL e executa no navegador a pré-verificação de conformidade, o scan-proof, a migração GS1, a extração com anonimização e o gêmeo da impressora.
  • Documentação: zplcore.com/en/docs com API, CLI, exemplos, precisão e limitações conhecidas.
  • Versão de avaliação: solicite pelo formulário de contato em zplcore.com. A equipe de desenvolvimento responde diretamente e tem prazer em verificar os seus próprios arquivos ZPL e EPL. As licenças são destinadas a clientes empresariais (B2B).
  • Sem código: as ferramentas gratuitas do zplCloud rodam com o mesmo motor.

Perguntas frequentes

O zplCore.com é o mesmo motor que o zplCloud usa?

Sim. O zplCloud renderiza pré-visualizações, PDFs e resultados das ferramentas com o zplCore.com, e as novas ferramentas chamam as mesmas funções que você recebe no SDK.

O zplCore.com precisa de conexão com a internet ou de driver de impressora?

Não. A biblioteca roda no seu próprio processo, offline, em Windows, Linux e macOS. A impressão vai diretamente por TCP 9100, serial, USB, spooler do Windows ou CUPS.

A pré-verificação de conformidade e a nota de leitura são certificações?

Não. A pré-verificação de conformidade testa com base em regras publicadas, e a nota de leitura é uma pré-verificação digital baseada na ISO/IEC 15415/15416. Nenhuma das duas substitui a aprovação de uma transportadora, de um órgão regulador ou da sua Organização-Membro GS1, nem um verificador calibrado na etiqueta impressa.

O que o zplCore.com ainda não faz?

Pharmacode 2D, Response Plus PostMatrix e HIBC conforme a ISO/IEC 15434 não estão implementados, porque não existe especificação pública. Deutsche Post BZL e JAB Code são experimentais. As fontes residentes da Zebra são proprietárias e substituídas por fontes alternativas calibradas; se você precisar de glifos idênticos, registre o TTF original. A lista completa está nas limitações conhecidas.

Preciso mudar alguma coisa no zplCloud?

Não. Designs, modelos, impressoras e chamadas de API continuam como estão.

Zebra e ZPL são marcas comerciais da Zebra Technologies Corporation, GS1 e GS1 Digital Link são marcas comerciais da GS1 AISBL, e Neodynamic, ThermalLabel e ZPLPrinter são marcas comerciais de seus respectivos proprietários. Elas são usadas aqui apenas de forma descritiva.

Mais artigos