Ir para o conteúdo do rodapé
COMPARAR COM OUTROS COMPONENTES

MessagingToolkit Barcode vs IronBarcode: Comparação de bibliotecas de código de barras em C#

QRCodervs IronBarcode: Onde uma Biblioteca Exclusiva de QR Alcança Seu Limite

OQRCoderfaz uma coisa excepcionalmente bem: gera códigos QR em C# puro, sem dependências externas, com uma licençaMITirrestrita e uma API bem pensada que lida com tudo, desde a formatação padrão do conteúdo até uma variedade de renderizadores de saída. Com mais de 60M de downloads no NuGet, sua reputação é merecida. A comparação com o IronBarcode não é um julgamento de qualidade — é uma questão de escopo. O IronBarcode abrange mais de 50 formatos de código de barras, lê e grava, e se integra a documentos PDF por meio de uma API única e consistente. Para equipes cujas necessidades vão além da geração de QR Codes, é essencial entender onde o design doQRCoderintencionalmente termina.

Entendendo o QRCoder

OQRCoderfoi criado por Raffael Herrmann em 2013 e agora é mantido por Shane32. A biblioteca é escrita inteiramente em C#, sem dependências externas — sem conflitos de versão do SkiaSharp, sem preocupações com licenças comerciais do ImageSharp e sem binários nativos para distribuir. Ele funciona em qualquer plataforma onde o .NET funcione.

A licençaMITé verdadeiramente irrestrita. Ao contrário de algumas bibliotecas populares onde um limite de receita aciona a exigência de uma licença comercial, oQRCodernão possui restrições comerciais ocultas. Essa distinção é importante para equipes que desenvolvem aplicativos comerciais.

A classe PayloadGenerator adiciona valor prático significativo: ela lida com formatos comuns de dados de código QR — credenciais de WiFi, cartões de contato (vCard), eventos de calendário, mensagens SMS e pontos de geolocalização — para que os desenvolvedores não precisem memorizar o formato de fio para cada padrão. A variedade de renderizadores também é grande em diversos tipos de saída.

Principais características arquitetônicas:

  • Sem dependências externas: C# puro, sem requisitos de tempo de execução de terceiros, simplificando a implantação em ambientes conteinerizados ou restritos.
  • LicençaMITsem restrição de receita: Verdadeiramente gratuita para uso comercial, sem limites de receita ou gatilhos comerciais.
  • Auxiliares do PayloadGenerator: Formatadores integrados para WiFi, vCard, CalendarEvent, SMS, Geo e outros padrões comuns de payload QR.
  • Variedade de renderizadores: bytes PNG, string SVG, arte ASCII, Base64, BMP e diversos outros formatos de saída.
  • Controle de correção de erros completo: todos os quatro níveis de ECC (L, M, Q, H) estão expostos.
  • Suporte a Micro QR: Variante compacta de QR para etiquetas com espaço limitado, não disponível em todas as bibliotecas de códigos de barras.
  • Design exclusivo para QR Code: A interface da API abrange exclusivamente a geração de códigos QR — sem formatos 1D,DataMatrixou leitura de código de barras.

Design exclusivo para QR Code

QRCoder separa a etapa de criação de dados da etapa de renderização. Um(a) QRCodeGenerator produz um(a) objeto intermediário QRCodeData, que então é passado para uma classe renderizadora. Esse padrão oferece controle preciso sobre o formato de saída, ao custo de objetos adicionais:

using QRCoder;
using System.IO;

var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
    "https://example.com",
    QRCodeGenerator.ECCLevel.M
);

// PNG bytes via PngByteQRCode
var pngQR = new PngByteQRCode(qrCodeData);
byte[] pngBytes = pngQR.GetGraphic(20); // 20px per module
File.WriteAllBytes("qr.png", pngBytes);

// SVG string via SvgQRCode
string svgContent = new SvgQRCode(qrCodeData).GetGraphic(10);
File.WriteAllText("qr.svg", svgContent);
using QRCoder;
using System.IO;

var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
    "https://example.com",
    QRCodeGenerator.ECCLevel.M
);

// PNG bytes via PngByteQRCode
var pngQR = new PngByteQRCode(qrCodeData);
byte[] pngBytes = pngQR.GetGraphic(20); // 20px per module
File.WriteAllBytes("qr.png", pngBytes);

// SVG string via SvgQRCode
string svgContent = new SvgQRCode(qrCodeData).GetGraphic(10);
File.WriteAllText("qr.svg", svgContent);
Imports QRCoder
Imports System.IO

Dim qrGenerator As New QRCodeGenerator()
Dim qrCodeData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)

' PNG bytes via PngByteQRCode
Dim pngQR As New PngByteQRCode(qrCodeData)
Dim pngBytes As Byte() = pngQR.GetGraphic(20) ' 20px per module
File.WriteAllBytes("qr.png", pngBytes)

' SVG string via SvgQRCode
Dim svgContent As String = New SvgQRCode(qrCodeData).GetGraphic(10)
File.WriteAllText("qr.svg", svgContent)
$vbLabelText   $csharpLabel

O método QRCodeGenerator.CreateQrCode é o único ponto de entrada para criação de código — não há CreateCode128, não há CreateDataMatrix, não há CreateEAN13. A biblioteca cumpre integralmente o seu objetivo.

Entendendo o IronBarcode

IronBarcode é uma biblioteca comercial .NET para códigos de barras da Iron Software que abrange a geração e leitura de mais de 50 formatos de código de barras por meio de uma API única e consistente. Em vez de manter bibliotecas separadas para diferentes famílias de formato, o IronBarcode expõe todos os formatos através de parâmetros BarcodeEncoding nos mesmos pontos de entrada estáticos BarcodeWriter e BarcodeReader.

A biblioteca usa um modelo de API estática: BarcodeWriter.CreateBarcode não requer configuração de instância, e BarcodeReader.Read aceita caminhos de arquivos, fluxos, matrizes de bytes e objetos System.Drawing.Bitmap com detecção automática de formatos múltiplos. O suporte a documentos PDF — tanto a leitura de códigos de barras em páginas PDF quanto a incorporação de códigos de barras em PDFs — está incluído sem dependências externas.

Principais características:

  • 50+ Formatos de Código de Barras: Código QR, Código 128, EAN-13, UPC-A, DataMatrix, PDF417, Aztec, MaxiCode e muitos mais através de um único parâmetro BarcodeEncoding
  • API de Leitura Integrada: BarcodeReader.Read lida com imagens, PDFs e fluxos com detecção automática de formato — não é necessária uma segunda biblioteca
  • Personalização do Código QR: Incorporação de logotipo, alterações de cor e controle de zona silenciosa através dos métodos QRCodeWriter
  • Integração com PDF: Leia códigos de barras de páginas PDF e insira-os em documentos PDF existentes.
  • Modelo de API Estática: Nenhuma instância de gerador necessária — BarcodeWriter é uma classe estática
  • Licença Comercial: A partir de US$ 749 para uma licença de desenvolvedor individual, sem restrições por formato.

Comparação de recursos

A tabela a seguir resume as principais diferenças entre oQRCodere o IronBarcode:

Recurso QRCoder IronBarcode
Geração de código QR Sim, excelente. Sim
Geração de código de barras 1D Não Sim (mais de 30 formatos)
Outros formatos 2D Não Sim (DataMatrix, PDF417, Aztec, etc.)
Leitura de código de barras Não Sim — detecção automática
Suporte a PDF Não Sim — leia e carimbe.
Licença MIT— genuinamente gratuito Comercial (US$ 749 para um único desenvolvedor)

Comparação Detalhada de Recursos

Recurso QRCoder IronBarcode
Geração
Código QR Sim Sim
Micro QR Sim Não
Código 128 Não Sim
EAN-13 / UPC-A Não Sim
DataMatrix Não Sim
PDF417 Não Sim
asteca Não Sim
Formatos totais 1 50+
Recursos do código QR
Correção de erros (L/M/Q/H) Sim Sim
Incorporação de logotipo Sim Sim
Personalização de cores Sim Sim
Saída SVG Sim Sim
Saída de arte ASCII Sim Não
Saída Base64 Sim Não
Auxiliares do PayloadGenerator Sim Não — construção manual de cordas
Leitura
Decodificar a partir da imagem Não Sim
Decodificar de PDF Não Sim
Detecção automática de formato Não Sim
Integração
Impressão de código de barras em PDF Não Sim
Sem dependências externas Sim Autossuficiente
Licenciamento
Tipo de licença MIT Comercial
Restrições de receita None None
Preços por formato None None

Geração de código QR

Ambas as bibliotecas geram códigos QR, mas suas APIs refletem filosofias de design diferentes em relação à forma como a etapa de geração e a etapa de renderização se relacionam.

Abordagem do QRCoder

OQRCoderusa um padrão de duas fases: QRCodeGenerator.CreateQrCode produz um objeto intermediário QRCodeData codificando os dados e o nível de correção de erro, e uma classe renderizadora separada converte esse intermediário no formato de saída desejado. O nível ECC é um parâmetro obrigatório sem valor padrão — os desenvolvedores devem escolhê-lo explicitamente:

using QRCoder;
using System.IO;

var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
    "https://example.com",
    QRCodeGenerator.ECCLevel.M
);

var qrCode = new PngByteQRCode(qrCodeData);
byte[] pngBytes = qrCode.GetGraphic(20); // pixels per module
File.WriteAllBytes("qr.png", pngBytes);
using QRCoder;
using System.IO;

var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
    "https://example.com",
    QRCodeGenerator.ECCLevel.M
);

var qrCode = new PngByteQRCode(qrCodeData);
byte[] pngBytes = qrCode.GetGraphic(20); // pixels per module
File.WriteAllBytes("qr.png", pngBytes);
Imports QRCoder
Imports System.IO

Dim qrGenerator As New QRCodeGenerator()
Dim qrCodeData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)

Dim qrCode As New PngByteQRCode(qrCodeData)
Dim pngBytes As Byte() = qrCode.GetGraphic(20) ' pixels per module
File.WriteAllBytes("qr.png", pngBytes)
$vbLabelText   $csharpLabel

Este padrão tem a vantagem de reutilizar o objeto qrCodeData para múltiplos formatos de saída sem regenerar os dados do código. As classes de renderizador incluem PngByteQRCode, SvgQRCode, AsciiQRCode, Base64QRCode e BitmapByteQRCode, entre outros.

Abordagem do IronBarcode

O IronBarcode une geração e renderização em uma cadeia fluente na classe estática BarcodeWriter. O parâmetro BarcodeEncoding.QRCode seleciona o formato, e métodos terminais, como SaveAsPng ou ToPngBinaryData, determinam a saída:

using IronBarCode;

// Single fluent call — no intermediate objects
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .ResizeTo(400, 400)
    .SaveAsPng("qr.png");
using IronBarCode;

// Single fluent call — no intermediate objects
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .ResizeTo(400, 400)
    .SaveAsPng("qr.png");
Imports IronBarCode

' Single fluent call — no intermediate objects
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
    .ResizeTo(400, 400) _
    .SaveAsPng("qr.png")
$vbLabelText   $csharpLabel

Para casos que requerem controle explícito da correção de erro, a classe QRCodeWriter fornece opções específicas de formato:

using IronBarCode;

var qr = QRCodeWriter.CreateQrCode(
    "https://example.com",
    500,
    QRCodeWriter.QrErrorCorrectionLevel.Medium
);
qr.SaveAsPng("qr.png");
using IronBarCode;

var qr = QRCodeWriter.CreateQrCode(
    "https://example.com",
    500,
    QRCodeWriter.QrErrorCorrectionLevel.Medium
);
qr.SaveAsPng("qr.png");
Imports IronBarCode

Dim qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Medium)
qr.SaveAsPng("qr.png")
$vbLabelText   $csharpLabel

O guia de criação de código de barras 2D do IronBarcode cobre todos os formatos 2D suportados incluindo Código QR, DataMatrix,PDF417e asteca através do mesmo ponto de entrada BarcodeWriter.

Personalização de código QR

Ambas as bibliotecas suportam a incorporação de logotipos e alterações de cores em códigos QR, mas a abordagem difere nos tipos de sistema necessários.

Abordagem do QRCoder

A incorporação de logotipos noQRCoderé feita através da classe de renderizador QRCode (diferente de PngByteQRCode), que expõe uma sobrecarga GetGraphic que aceita um(a) System.Drawing.Bitmap. Isso significa que o código de chamada deve trabalhar com System.Drawing diretamente para carregar o arquivo do logotipo:

using QRCoder;
using System.Drawing;

var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
    "https://example.com",
    QRCodeGenerator.ECCLevel.H // High ECC required when logo occludes part of the code
);

var qrCode = new QRCode(qrCodeData);
var logoBitmap = new Bitmap("logo.png");
var qrBitmap = qrCode.GetGraphic(10, Color.Black, Color.White, logoBitmap);
qrBitmap.Save("qr-logo.png", System.Drawing.Imaging.ImageFormat.Png);
using QRCoder;
using System.Drawing;

var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
    "https://example.com",
    QRCodeGenerator.ECCLevel.H // High ECC required when logo occludes part of the code
);

var qrCode = new QRCode(qrCodeData);
var logoBitmap = new Bitmap("logo.png");
var qrBitmap = qrCode.GetGraphic(10, Color.Black, Color.White, logoBitmap);
qrBitmap.Save("qr-logo.png", System.Drawing.Imaging.ImageFormat.Png);
Imports QRCoder
Imports System.Drawing

Dim qrGenerator As New QRCodeGenerator()
Dim qrCodeData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H) ' High ECC required when logo occludes part of the code

Dim qrCode As New QRCode(qrCodeData)
Dim logoBitmap As New Bitmap("logo.png")
Dim qrBitmap = qrCode.GetGraphic(10, Color.Black, Color.White, logoBitmap)
qrBitmap.Save("qr-logo.png", System.Drawing.Imaging.ImageFormat.Png)
$vbLabelText   $csharpLabel

A personalização de cores segue um padrão semelhante através da sobrecarga GetGraphic com os parâmetros darkColor e lightColor.

Abordagem do IronBarcode

O IronBarcode expõe a incorporação de logotipos e alterações de cor como métodos nomeados no objeto de resultado QRCodeWriter. O método AddBrandLogo aceita um caminho de arquivo, e ChangeBarCodeColor aceita um valor Color:

using IronBarCode;
using System.Drawing;

// Logo embedding
var qr = QRCodeWriter.CreateQrCode(
    "https://example.com",
    500,
    QRCodeWriter.QrErrorCorrectionLevel.Highest
);
qr.AddBrandLogo("logo.png");
qr.SaveAsPng("qr-logo.png");

// Colour customisation
var coloredQr = QRCodeWriter.CreateQrCode("https://example.com", 500);
coloredQr.ChangeBarCodeColor(Color.DarkBlue);
coloredQr.SaveAsPng("colored-qr.png");
using IronBarCode;
using System.Drawing;

// Logo embedding
var qr = QRCodeWriter.CreateQrCode(
    "https://example.com",
    500,
    QRCodeWriter.QrErrorCorrectionLevel.Highest
);
qr.AddBrandLogo("logo.png");
qr.SaveAsPng("qr-logo.png");

// Colour customisation
var coloredQr = QRCodeWriter.CreateQrCode("https://example.com", 500);
coloredQr.ChangeBarCodeColor(Color.DarkBlue);
coloredQr.SaveAsPng("colored-qr.png");
Imports IronBarCode
Imports System.Drawing

' Logo embedding
Dim qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
qr.AddBrandLogo("logo.png")
qr.SaveAsPng("qr-logo.png")

' Colour customisation
Dim coloredQr = QRCodeWriter.CreateQrCode("https://example.com", 500)
coloredQr.ChangeBarCodeColor(Color.DarkBlue)
coloredQr.SaveAsPng("colored-qr.png")
$vbLabelText   $csharpLabel

O guia de personalização do código QR aborda detalhadamente o tamanho do logotipo, as combinações de cores e o controle da zona de silêncio.

Leitura de código de barras

A leitura de código de barras representa a diferença de capacidade mais notável entre as duas bibliotecas.

Abordagem do QRCoder

OQRCodernão possui uma API de leitura de código de barras. A classe QRCodeGenerator e todas as classes de renderizador são apenas para geração. Não existe método para decodificar um código QR a partir de uma imagem, arquivo ou fluxo de dados. Aplicações que precisam gerar e ler códigos QR devem adicionar uma biblioteca separada — normalmente ZXing .NET — com sua própria API, seu próprio namespace e seu próprio ciclo de manutenção:

//QRCoderhas no reading API.
// These methods do not exist:
//   qrGenerator.Decode("image.png");
//   QRCodeReader.Read("image.png");
//
// A separate library (e.g., ZXing.Net) is required for decoding.
//QRCoderhas no reading API.
// These methods do not exist:
//   qrGenerator.Decode("image.png");
//   QRCodeReader.Read("image.png");
//
// A separate library (e.g., ZXing.Net) is required for decoding.
'QRCoder has no reading API.
' These methods do not exist:
'   qrGenerator.Decode("image.png")
'   QRCodeReader.Read("image.png")
'
' A separate library (e.g., ZXing.Net) is required for decoding.
$vbLabelText   $csharpLabel

Essa é uma decisão de projeto, não um descuido — oQRCoderé explicitamente uma biblioteca de geração.

Abordagem do IronBarcode

O IronBarcode inclui uma API de leitura no mesmo pacote. BarcodeReader.Read aceita arquivos de imagem, arquivos PDF, fluxos e objetos System.Drawing.Bitmap. Ele detecta automaticamente os formatos de código de barras sem exigir que o usuário especifique qual formato procurar e retorna todos os códigos de barras encontrados na imagem:

using IronBarCode;

// Reading a QR code — no separate library required
var results = BarcodeReader.Read("qr.png");
foreach (var result in results)
{
    Console.WriteLine(result.Value);       // decoded value
    Console.WriteLine(result.Format);      // QRCode, Code128, EAN13, etc.
}
using IronBarCode;

// Reading a QR code — no separate library required
var results = BarcodeReader.Read("qr.png");
foreach (var result in results)
{
    Console.WriteLine(result.Value);       // decoded value
    Console.WriteLine(result.Format);      // QRCode, Code128, EAN13, etc.
}
Imports IronBarCode

' Reading a QR code — no separate library required
Dim results = BarcodeReader.Read("qr.png")
For Each result In results
    Console.WriteLine(result.Value)       ' decoded value
    Console.WriteLine(result.Format)      ' QRCode, Code128, EAN13, etc.
Next
$vbLabelText   $csharpLabel

O guia de leitura de código de barras a partir de imagens abrange a leitura de PDFs, documentos com várias páginas, fluxos de dados e imagens de baixa resolução ou com ruído, tudo através do mesmo ponto de entrada.

Escopo do formato além do QR

Abordagem do QRCoder

OQRCodergera exclusivamente códigos QR — isso é intencional. O método QRCodeGenerator.CreateQrCode é o único ponto de entrada de geração que a biblioteca fornece. Projetos que começam com códigos QR e posteriormente exigem etiquetas de envio Code 128, códigos de produto EAN-13 ou códigos de conformidade farmacêuticaDataMatrixdevem introduzir uma segunda biblioteca para abranger cada formato adicional:

using QRCoder;

//QRCoderis limited to QR — other formats require separate packages
var qrGenerator = new QRCodeGenerator();
var qr = qrGenerator.CreateQrCode("scan-to-track", QRCodeGenerator.ECCLevel.M);

// Código 128 requires a different library (e.g., NetBarcode)
//DataMatrixrequires yet another library
// Reading any format requires yet another library
using QRCoder;

//QRCoderis limited to QR — other formats require separate packages
var qrGenerator = new QRCodeGenerator();
var qr = qrGenerator.CreateQrCode("scan-to-track", QRCodeGenerator.ECCLevel.M);

// Código 128 requires a different library (e.g., NetBarcode)
//DataMatrixrequires yet another library
// Reading any format requires yet another library
Imports QRCoder

'QRCoder is limited to QR — other formats require separate packages
Dim qrGenerator As New QRCodeGenerator()
Dim qr = qrGenerator.CreateQrCode("scan-to-track", QRCodeGenerator.ECCLevel.M)

' Código 128 requires a different library (e.g., NetBarcode)
' DataMatrix requires yet another library
' Reading any format requires yet another library
$vbLabelText   $csharpLabel

Abordagem do IronBarcode

O IronBarcode cobre todas as famílias de formato através do mesmo ponto de entrada BarcodeWriter.CreateBarcode. Mudar de código QR para o Código 128 para oDataMatrixrequer apenas a alteração do parâmetro BarcodeEncoding — sem pacotes adicionais, sem novos namespaces, sem APIs separadas:

using IronBarCode;

// All formats — one API, one package
BarcodeWriter.CreateBarcode("scan-to-track", BarcodeEncoding.QRCode)
    .SaveAsPng("campaign-qr.png");

BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .SaveAsPng("product-code.png");

BarcodeWriter.CreateBarcode("LOT-ABC-123", BarcodeEncoding.DataMatrix)
    .SaveAsPng("pharma-code.png");
using IronBarCode;

// All formats — one API, one package
BarcodeWriter.CreateBarcode("scan-to-track", BarcodeEncoding.QRCode)
    .SaveAsPng("campaign-qr.png");

BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .SaveAsPng("product-code.png");

BarcodeWriter.CreateBarcode("LOT-ABC-123", BarcodeEncoding.DataMatrix)
    .SaveAsPng("pharma-code.png");
Imports IronBarCode

' All formats — one API, one package
BarcodeWriter.CreateBarcode("scan-to-track", BarcodeEncoding.QRCode) _
    .SaveAsPng("campaign-qr.png")

BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128) _
    .SaveAsPng("shipping-label.png")

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13) _
    .SaveAsPng("product-code.png")

BarcodeWriter.CreateBarcode("LOT-ABC-123", BarcodeEncoding.DataMatrix) _
    .SaveAsPng("pharma-code.png")
$vbLabelText   $csharpLabel

Referência de Mapeamento de API

QRCoder IronBarcode
new QRCodeGenerator() Classe estática — não é necessária nenhuma instância.
qrGenerator.CreateQrCode(data, ECCLevel.M) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)
new PngByteQRCode(qrCodeData) Não é necessário — a renderização faz parte da cadeia.
qrCode.GetGraphic(20) .ToPngBinaryData() com .ResizeTo(w, h)
new SvgQRCode(qrCodeData).GetGraphic(10) .SaveAsSvg(path)
new QRCode(qrCodeData).GetGraphic(...) QRCodeWriter.CreateQrCode(data, size, level)
QRCodeGenerator.ECCLevel.L QRCodeWriter.QrErrorCorrectionLevel.Low
QRCodeGenerator.ECCLevel.M QRCodeWriter.QrErrorCorrectionLevel.Medium
QRCodeGenerator.ECCLevel.Q QRCodeWriter.QrErrorCorrectionLevel.Quartile
QRCodeGenerator.ECCLevel.H QRCodeWriter.QrErrorCorrectionLevel.Highest
PayloadGenerator.WiFi(...).ToString() "WIFI:T:WPA;S:{ssid};P:{pass};;"
Sem API de leitura BarcodeReader.Read(path)
Somente formato QR 50+ formatos via BarcodeEncoding.*

Quando as equipes consideram migrar doQRCoderpara o IronBarcode

Para equipes cujos projetos são definitivamente exclusivos de QR Codes e assim permanecerão, oQRCoderé uma biblioteca bem mantida que continua a cumprir bem o seu propósito. Os cenários abaixo descrevem as condições que levam as equipes a reavaliar essa postura.

Os requisitos de formato vão além do QR Code.

A maioria das necessidades de códigos de barras começa com códigos QR, e oQRCoderlida com esse escopo inicial de forma confiável. A tensão surge quando um segundo formato entra na conversa. Equipes de logística que precisam de etiquetas Código 128 para envio, operações de varejo que exigem códigos de produto EAN-13, fluxos de trabalho farmacêuticos que exigemDataMatrixpara serialização — cada novo formato leva uma equipe a adicionar mais uma dependência do NuGet . O custo de integração de cada biblioteca adicional inclui um novo namespace para aprender, um novo ciclo de lançamento para monitorar e um novo ponto de potencial conflito de versão em atualizações do .NET .

A leitura de códigos de barras torna-se necessária

Um aplicativo que gera códigos QR para uma campanha é um sistema somente de geração. Um aplicativo que também processa remessas de entrada, verifica códigos de produtos na chegada ou valida ingressos em um evento é um sistema de geração e leitura. OQRCodernão possui capacidade de leitura por design — essa lacuna precisa ser preenchida por uma segunda biblioteca. A introdução de uma biblioteca de leitura altera consideravelmente a complexidade da integração do subsistema de código de barras, especialmente se a biblioteca de leitura impuser requisitos de especificação de formato ou restrições de segurança de threads próprias.

Ônus de manutenção de múltiplas bibliotecas

O padrão natural de acumulação para um projeto baseado emQRCodersegue um caminho previsível:QRCoderpara geração de QR codes, uma biblioteca de códigos de barras 1D para etiquetas de envio e uma biblioteca de leitura para decodificação. Cada biblioteca possui sua própria documentação, seu próprio ciclo de versionamento e seu próprio histórico de alterações que causam incompatibilidade. Uma atualização de versão do .NET que seja considerada pequena para uma biblioteca pode coincidir com uma alteração que cause incompatibilidade em outra. As equipes que gerenciam esse acúmulo ao longo dos anos relatam que o custo oculto não está na integração inicial, mas sim no aumento dos custos de manutenção em vários ciclos de atualização.

Suporte para documentos PDF

Com o QRCoder, não é possível gerar códigos de barras para incorporar em relatórios PDF ou extrair códigos de barras de documentos PDF recebidos em um fluxo de processamento de documentos. O suporte a PDF requer uma biblioteca completa de PDF com recursos de código de barras ou uma combinação dedicada de bibliotecas. Equipes que desenvolvem fluxos de trabalho centrados em documentos — como processamento de faturas, relatórios de conformidade e geração de etiquetas a partir de PDFs com modelos predefinidos — descobrem que o escopo doQRCodercoincide com os requisitos de PDF logo no início do ciclo de vida de um projeto.

Considerações Comuns de Migração

Formato de string do PayloadGenerator

As classes auxiliares PayloadGenerator doQRCoderproduzem strings que estão em conformidade com os padrões públicos de payload de código QR. O formato WiFi, por exemplo, produz WIFI:T:WPA;S:NetworkName;P:Password;;. Essas strings podem ser construídas diretamente no IronBarcode sem uma classe auxiliar, já que o formato é um padrão público documentado pela especificação do código QR. Equipes com muitos usos de PayloadGenerator devem planejar a escrita de pequenos métodos auxiliares estáticos que replicam a construção de strings.

Mapeamento de enumeração ECCLevel

QRCoder usa QRCodeGenerator.ECCLevel com os valores L, M, Q, H. O IronBarcode usa QRCodeWriter.QrErrorCorrectionLevel com os valores Low, Medium, Quartile e Highest. O mapeamento é direto, mas as referências de enumeração devem ser atualizadas em todos os locais de chamada. Onde oQRCoderrequeria seleção explícita de ECC em cada chamada CreateQrCode, o IronBarcode aplica um padrão sensato quando o caminho BarcodeWriter.CreateBarcode é usado.

Remoção da classe de renderização

As classes de renderizador doQRCoder— PngByteQRCode, SvgQRCode, AsciiQRCode, Base64QRCode, QRCode — tornam-se desnecessárias após a migração. O IronBarcode constrói a renderização na cadeia fluente em GeneratedBarcode, assim o padrão de objeto de renderizador intermediário não é transportado. O código que instancia essas classes de renderizador pode ser substituído por chamadas de método terminal no resultado BarcodeWriter.

Funcionalidades adicionais do IronBarcode

As seguintes funcionalidades do IronBarcode não foram abordadas nas seções de comparação acima:

Compatibilidade com .NET e Preparação para o Futuro

A IronBarcode mantém um desenvolvimento ativo com atualizações regulares voltadas para as versões atuais e futuras do .NET . A biblioteca suporta o LTS atual do .NET e lançamentos recentes, com atualizações de compatibilidade sendo distribuídas à medida que novas versões do .NET chegam. OQRCodertambém é ativamente mantido e funciona em todos os alvos atuais do .NET; Seu design sem dependências facilita a compatibilidade futura. Ambas as bibliotecas são adequadas para projetos .NET de longo prazo. Para as equipes que optam IronBarcode, o modelo de suporte comercial oferece acesso direto à assistência técnica e resolução prioritária de bugs.

Conclusão

QRCoder e IronBarcode abordam o mesmo requisito inicial — geração de código QR — a partir de pontos de partida arquitetônicos diferentes.QRCoderé uma biblioteca de formato único, criada especificamente para esse fim, cujo design termina intencionalmente em QR.IronBarcode é uma biblioteca multiformato que abrange geração, leitura e integração com PDF em mais de 50 formatos de código de barras. A comparação não é entre uma biblioteca boa e uma melhor; É uma ferramenta que fica entre uma ferramenta especializada e uma de uso geral.

OQRCoderé a escolha certa para projetos onde a geração de código QR é um requisito permanente e definido. Sua pegada de zero dependências, licença irrestritaMITe PayloadGenerator helpers fazem dele uma excelente escolha para um fluxo de trabalho de inscrição 2FA, um gerador de QR para campanha de marketing ou qualquer contexto onde o escopo do código de barras é definitivamente fixado. A biblioteca está bem conservada, é amplamente utilizada e desempenha a sua função declarada de forma confiável. Equipes com essas características não ganham nada com a mudança.

O IronBarcode torna-se a opção mais prática quando os requisitos de código de barras de um projeto vão — ou provavelmente irão — além da geração de QR Code. Aplicações que precisam ler códigos de remessas recebidas ou documentos digitalizados, gerar etiquetas Código 128 juntamente com campanhas de Código QR ou produzir códigos de barras incorporados em relatórios PDF se beneficiam de uma API única e consistente para todas essas tarefas. O guia de alternativas em C# para o QRCoder fornece contexto adicional sobre onde as bibliotecas exclusivas para Código QR encontram seu limite em ambientes de produção. O licenciamento começa em US$ 749 e está totalmente detalhado na página de licenciamento da IronBarcode .

A avaliação honesta é que a ferramenta certa depende inteiramente do escopo do projeto. Para requisitos permanentes que exigem apenas QR Codes, oQRCoderfornece tudo o que é necessário sem custo adicional. Para requisitos que abrangem vários formatos, leitura ou integração com PDF, o IronBarcode elimina a necessidade de gerenciar várias bibliotecas de propósito único à medida que o projeto evolui.

Perguntas frequentes

O que é QRCoder.NET?

QRCoder.NET é uma biblioteca .NET para geração e leitura de códigos de barras em aplicações C#. É uma das diversas alternativas que os desenvolvedores avaliam ao selecionar uma solução de código de barras para projetos .NET.

Quais são as principais diferenças entre QRCoder.NET e IronBarcode?

O IronBarcode utiliza uma API estática e sem estado, que não requer gerenciamento de instâncias, enquanto o QRCoder.NET normalmente exige a criação e configuração de instâncias antes do uso. O IronBarcode também oferece suporte nativo a PDF, detecção automática de formato e licenciamento com chave única em todos os ambientes.

O IronBarcode é mais fácil de licenciar do que o QRCoder.NET?

O IronBarcode utiliza uma única chave de licença que abrange tanto o ambiente de desenvolvimento quanto o de produção. Isso simplifica os pipelines de CI/CD e as configurações do Docker em comparação com sistemas de licenciamento que separam as chaves do SDK das chaves de tempo de execução.

O IronBarcode é compatível com todos os formatos de código de barras que o QRCoder.NET suporta?

O IronBarcode suporta mais de 30 simbologias de código de barras, incluindo QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 e muitas outras. A detecção automática de formato significa que não é necessária a enumeração explícita de formatos.

O IronBarcode suporta leitura nativa de códigos de barras em PDF?

Sim. O IronBarcode lê códigos de barras diretamente de arquivos PDF usando BarcodeReader.Read("document.pdf") sem a necessidade de uma biblioteca de renderização de PDF separada. Os resultados por página incluem número da página, formato do código de barras, valor e nível de confiança.

Como o IronBarcode lida com o processamento em lote em comparação com o QRCoder.NET?

Os métodos estáticos do IronBarcode são sem estado e naturalmente seguros para threads, permitindo o uso direto de Parallel.ForEach sem gerenciamento de instâncias por thread. Não há limite de throughput em nenhum plano de preços.

Quais versões do .NET o IronBarcode suporta?

O IronBarcode é compatível com o .NET Framework 4.6.2+, .NET Core 3.1 e .NET 5, 6, 7, 8 e 9 em um único pacote NuGet. As plataformas suportadas incluem Windows x64/x86, Linux x64 e macOS x64/ARM.

Como faço para instalar o IronBarcode em um projeto .NET?

Instale o IronBarcode via NuGet: execute 'Install-Package IronBarCode' no Console do Gerenciador de Pacotes ou 'dotnet add package IronBarCode' na CLI. Não são necessários instaladores de SDK ou arquivos de tempo de execução adicionais.

Posso avaliar o IronBarcode antes de comprar, ao contrário do QRCoder?

Sim. O modo de avaliação do IronBarcode retorna os valores completos dos códigos de barras decodificados — apenas as imagens de saída geradas recebem uma marca d'água. Você pode testar a precisão de leitura em seus próprios documentos antes de efetuar a compra.

Qual é a diferença de preço entre QRCoder.NET e IronBarcode?

O IronBarcode tem um preço inicial de US$ 749 para uma licença perpétua de desenvolvedor único, que abrange desenvolvimento e produção. Detalhes sobre preços e opções de volume estão disponíveis na página de licenciamento do IronBarcode. Não há necessidade de uma licença de tempo de execução separada.

É simples migrar do QRCoder.NET para o IronBarcode?

A migração do QRCoder.NET para o IronBarcode envolve principalmente a substituição de chamadas de API baseadas em instâncias por métodos estáticos do IronBarcode, a remoção de código repetitivo relacionado a licenciamento e a atualização dos nomes das propriedades de resultado. A maioria das migrações consiste em reduzir o código em vez de adicioná-lo.

O IronBarcode gera códigos QR com logotipos?

Sim. O método `QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")` incorpora uma imagem da marca em um código QR nativamente, com correção de erros configurável. Códigos QR coloridos também são suportados através do método `ChangeBarCodeColor()`.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais

Equipe de Suporte Iron

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim