IRONSOFTWAREHOME
VÍDEOS

Migrando deQRCoderpara IronBarcode

Curtis Chau
Curtis Chau
Updated: 1 de agosto de 2026

Este guia foi escrito para equipes de desenvolvimento cujos projetos começaram com oQRCodere evoluíram a ponto de exigirem recursos que vão além da geração de códigos QR. OQRCoderé uma biblioteca bem mantida e de alta qualidade para o propósito a que se destina, e a migração não reflete sua qualidade. É uma resposta a requisitos — expansão de formato, leitura de código de barras, integração com PDF — que estão fora do escopo para o qual oQRCoderfoi projetado. Este guia abrange todo o caminho técnico da migração doQRCoderpara o IronBarcode: substituição de pacotes, alterações de namespace, tradução de código para cada padrão comum, mapeamento de equivalências de API e soluções para os problemas que surgem durante a transição.

Por que migrar do QRCoder?

Requisitos de formato além do QR: OQRCodergera códigos QR exclusivamente. Projetos que crescem para exigir etiquetas Code 128 para logística, códigos EAN-13 para identificação de produtos de varejo,DataMatrixpara serialização farmacêutica ouPDF417para conformidade de documentos do governo devem introduzir uma biblioteca separada para cada formato adicional. À medida que o número de formatos necessários aumenta, também aumenta o número de pacotes independentes, APIs e obrigações de manutenção.

Requisitos de leitura de código de barras: OQRCodernão possui uma API de leitura de código de barras — ele foi projetado como uma biblioteca somente para geração de código de barras. Qualquer aplicação que precise decodificar códigos QR de imagens recebidas, verificar códigos de barras em documentos digitalizados ou processar etiquetas de envio deve adicionar uma biblioteca de leitura dedicada juntamente com o QRCoder. Essa segunda biblioteca traz sua própria superfície de API, seu próprio ciclo de atualização e suas próprias preocupações de compatibilidade a cada atualização do .NET .

Manutenção de múltiplas bibliotecas: O padrão de acumulação realista para um projeto baseado emQRCodervai doQRCoderpara geração de QR codes a uma biblioteca de códigos de barras 1D para etiquetas de envio e, finalmente, a uma biblioteca de leitura para decodificação. Gerenciar três ou quatro pacotes independentes significa acompanhar notas de versão separadas, resolver conflitos de versão quando qualquer um deles for atualizado e manter familiaridade com várias APIs em toda a equipe de desenvolvimento. O ônus da manutenção se acumula ao longo do tempo de maneiras que não são visíveis na estimativa inicial de integração.

Suporte a PDF: Incorporar códigos de barras em documentos PDF ou extrair códigos de barras de arquivos PDF recebidos estão fora do escopo do QRCoder. Os fluxos de processamento de documentos — como o gerenciamento de faturas, a geração de etiquetas a partir de modelos em PDF e a elaboração de relatórios de conformidade — encontram esse limite logo no início. Uma biblioteca PDF dedicada deve ser adicionada juntamente com o QRCoder, ou a arquitetura deve encaminhar a geração de código de barras e a geração de PDF por meio de subsistemas separados.

O problema fundamental

OQRCoderresolve a geração de QR Codes de forma eficiente. Não momento em que qualquer requisito ultrapassa o QR, a base de código deve começar a incorporar pacotes adicionais para preencher cada lacuna:

//QRCoderhandles QR generation well — but no further
using QRCoder;
using System.IO;

var generator = new QRCodeGenerator();
var qrCodeData = generator.CreateQrCode("SHIP-12345", QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrCodeData);
File.WriteAllBytes("qr.png", qrCode.GetGraphic(10));

// Now the shipping team asks for Code 128 — add NetBarcode
// Now the warehouse needs to scan barcodes — add ZXing.Net
// Now a report needs a barcode in a PDF — add a PDF library
// Each addition: new namespace, new API, new maintenance cycle
C#

IronBarcode consolida geração, leitura e integração de PDF em uma única API:

//IronBarcode— one library covers all of the above
using IronBarCode;

// Generate QR
BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.QRCode)
    .SaveAsPng("qr.png");

// Generate Code 128 — same API
BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128)
    .SaveAsPng("label.png");

// Read a barcode from an image — built in
var results = BarcodeReader.Read("incoming.png");
C#

##IronBarcode vs QRCoder: Comparação de Recursos

RecursoQRCoderIronBarcode
Geração de código QRSim, excelente.Sim
Micro QRSimNão
Código 128 / Código 39NãoSim
EAN-13 / UPC-ANãoSim
DataMatrixNãoSim
PDF417NãoSim
astecaNãoSim
Formatos totais150+
Leitura de código de barrasNãoSim — detecção automática
Extração de código de barras em PDFNãoSim
Carimbo de código de barras em PDFNãoSim
Incorporação de logotipoSimSim
Personalização de coresSimSim
Saída SVGSimSim
Auxiliares do PayloadGeneratorSimNão — construção manual de cordas
Dependências externas zeroSimAutossuficiente
LicençaMIT — sem restriçõesComercial — o nível Lite cobre um único desenvolvedor

Guia rápido: Migração doQRCoderpara o IronBarcode

Passo 1: Substitua o pacote NuGet

Remova oQRCoderdo projeto:

dotnet remove package QRCoder
SHELL

Instale o IronBarcode:

dotnet add package IronBarcode
SHELL

Se o projeto estiver usando o ZXing .NET juntamente com oQRCoderpara leitura de código de barras, esse pacote também pode ser removido nesta etapa:

dotnet remove package ZXing.Net
SHELL

Etapa 2: Atualizar Namespaces

Substitua a importação do namespaceQRCoderpelo namespace IronBarcode:

// Before (QRCoder)
using QRCoder;

// After (IronBarcode)
using IronBarCode;

Etapa 3: Inicializar a licença

Adicione a inicialização da licença na inicialização do aplicativo — Program.cs, Startup.cs ou um construtor estático:

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

Uma chave de avaliação gratuita está disponível sem necessidade de cadastro. Implantações em produção exigem uma licença adquirida.

Exemplos de migração de código

Geração básica de código QR

O padrão mais comum doQRCoderrequer três objetos: uma instância de QRCodeGenerator, um objeto intermediário QRCodeData e uma classe renderizadora como PngByteQRCode. Em IronBarcode, uma única chamada estática substitui essa cadeia.

Abordagem do QRCoder:

using QRCoder;

public class BarcodeService
{
    private readonly QRCodeGenerator _generator = new QRCodeGenerator();

    public byte[] GenerateQR(string content)
    {
        var qrCodeData = _generator.CreateQrCode(content, QRCodeGenerator.ECCLevel.M);
        var qrCode = new PngByteQRCode(qrCodeData);
        return qrCode.GetGraphic(10); // 10px per module
    }
}

Abordagem do IronBarcode:

using IronBarCode;

public class BarcodeService
{
    public byte[] GenerateQR(string content)
    {
        return BarcodeWriter.CreateBarcode(content, BarcodeEncoding.QRCode)
            .ResizeTo(200, 200)
            .ToPngBinaryData();
    }
}

BarcodeWriter é uma classe estática — nenhuma instância é necessária e não há objeto de dados intermediário. O método ResizeTo(width, height) substitui o inteiro pixel-por-módulo que oQRCoderaceita em GetGraphic. Onde oQRCoderdimensiona a saída por contagem de módulos (por exemplo, GetGraphic(10) para uma imagem de 10px por módulo), o IronBarcode toma dimensões absolutas de pixel.

Salvar códigos QR em um arquivo

OQRCodersepara os bytes na memória da saída do arquivo apenas na etapa do terminal — a cadeia de renderização é a mesma.IronBarcode utiliza diferentes métodos de terminal na mesma cadeia.

Abordagem do QRCoder:

using QRCoder;
using System.IO;

var generator = new QRCodeGenerator();
var qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var pngBytes = new PngByteQRCode(qrCodeData).GetGraphic(10);
File.WriteAllBytes("output.png", pngBytes);

Abordagem do IronBarcode:

using IronBarCode;

// Save directly — no intermediate byte array needed
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .ResizeTo(300, 300)
    .SaveAsPng("output.png");

// Or obtain bytes for in-memory use
byte[] pngBytes = BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .ResizeTo(300, 300)
    .ToPngBinaryData();

O método SaveAsPng é um terminal que grava diretamente no disco. ToPngBinaryData retorna um byte[] para streaming, respostas HTTP ou armazenamento no banco de dados.

Saída SVG

Abordagem do QRCoder:

using QRCoder;
using System.IO;

var generator = new QRCodeGenerator();
var qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
string svgContent = new SvgQRCode(qrCodeData).GetGraphic(10);
File.WriteAllText("output.svg", svgContent);

Abordagem do IronBarcode:

using IronBarCode;

BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsImage("output.svg");

A classe renderizadora SvgQRCode e sua chamada GetGraphic colapsam em um único método terminal SaveAsImage (passar uma extensão .svg produz uma saída SVG).

Mapeamento do nível de correção de erros

OQRCoderrequer seleção explícita de ECC em cada chamada CreateQrCode usando o enum QRCodeGenerator.ECCLevel. O IronBarcode aplica um padrão sensato ao usar BarcodeWriter.CreateBarcode e expõe controle explícito através de QRCodeWriter.QrErrorCorrectionLevel.

Abordagem do QRCoder:

using QRCoder;

var generator = new QRCodeGenerator();

// Medium — suitable for most generation without logos
var dataMedium = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);

// High — required when a logo will occlude part of the code
var dataHigh = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H);

Abordagem do IronBarcode:

using IronBarCode;

// Default — equivalent to Medium, applied automatically
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsPng("default-ecc.png");

// Explicit level via QRCodeWriter
var qr = QRCodeWriter.CreateQrCode(
    "https://example.com",
    500,
    QRCodeWriter.QrErrorCorrectionLevel.Highest
);
qr.SaveAsPng("high-ecc.png");

O mapeamento de nível é: ECCLevel.LLow, ECCLevel.MMedium, ECCLevel.QHigh, ECCLevel.HHighest.

Incorporação de logotipo

Ambas as bibliotecas suportam a incorporação de logotipos em códigos QR. OQRCoderroteia isso através da classe renderizadora QRCode (não PngByteQRCode) com parâmetros System.Drawing.Bitmap. O IronBarcode fornece QRCodeWriter.CreateQrCodeWithLogo() como um método de fábrica dedicado que aceita caminhos de arquivos tanto para o URL quanto para o logotipo. O guia de personalização do código QR abrange opções de tamanho, posicionamento e combinação de cores do logotipo.

Abordagem do QRCoder:

using QRCoder;
using System.Drawing;
using System.Drawing.Imaging;

var generator = new QRCodeGenerator();
// ECCLevel.H is required — the logo occludes part of the code
var qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H);

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", ImageFormat.Png);

Abordagem do IronBarcode:

using IronBarCode;

QRCodeWriter.CreateQrCodeWithLogo("https://example.com", "logo.png", 500)
    .SaveAsPng("qr-logo.png");

A dependência System.Drawing.Bitmap é removida — CreateQrCodeWithLogo aceita strings de caminho de arquivo tanto para o conteúdo quanto para a imagem do logotipo. A correção de erros é configurada automaticamente para o nível exigido para incorporação de logotipos; nenhuma configuração de ECC explícita é necessária.

Gerador de carga útil. Migração para WiFi

O PayloadGenerator.WiFi doQRCoderformata a string padrão da carga útil do QR WiFi. O formato de saída é um padrão público (WIFI:T:{auth};S:{ssid};P:{password};;) definido pela especificação do código QR. Durante a migração, essas strings podem ser construídas diretamente.

Abordagem do QRCoder:

using QRCoder;

var wifi = new PayloadGenerator.WiFi(
    ssid: "OfficeNetwork",
    password: "SecurePass123",
    authenticationMode: PayloadGenerator.WiFi.Authentication.WPA
);
// wifi.ToString() produces: WIFI:T:WPA;S:OfficeNetwork;P:SecurePass123;;

var generator = new QRCodeGenerator();
var qrData = generator.CreateQrCode(wifi.ToString(), QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrData);
System.IO.File.WriteAllBytes("wifi.png", qrCode.GetGraphic(10));

Abordagem do IronBarcode:

using IronBarCode;

// Construct the standard WiFi QR string directly
string wifiPayload = "WIFI:T:WPA;S:OfficeNetwork;P:SecurePass123;;";
BarcodeWriter.CreateBarcode(wifiPayload, BarcodeEncoding.QRCode)
    .ResizeTo(300, 300)
    .SaveAsPng("wifi.png");

Para equipes com muitos tipos de PayloadGenerator em uso (vCard, CalendarEvent, Geo, SMS), a abordagem é a mesma: identificar a string formatada que cada gerador produz usando sua saída .ToString(), depois construir essa string diretamente ou através de um pequeno método auxiliar estático.

Referência de mapeamento da APIQRCoderpara IronBarcode

QRCoderIronBarcodeNotas
new QRCodeGenerator()Classe estática — sem instânciaBarcodeWriter não requer instanciação
qrGenerator.CreateQrCode(data, ECCLevel.M)BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)Substituição direta
new PngByteQRCode(qrCodeData)Não é necessárioA renderização faz parte da cadeia fluente.
qrCode.GetGraphic(20) retornando byte[].ToPngBinaryData()Tamanho via .ResizeTo(w, h)
Padrão File.WriteAllBytes(path, bytes).SaveAsPng(path)Método terminal em GeneratedBarcode
new SvgQRCode(qrCodeData).GetGraphic(10).SaveAsImage(path)Passe extensão .svg para saída SVG
new QRCode(qrCodeData).GetGraphic(...)QRCodeWriter.CreateQrCode(data, size, level)Utilizado para personalização de logotipos e cores.
QRCodeGenerator.ECCLevel.LQRCodeWriter.QrErrorCorrectionLevel.Low
QRCodeGenerator.ECCLevel.MQRCodeWriter.QrErrorCorrectionLevel.MediumValor padrão quando não especificado
QRCodeGenerator.ECCLevel.QQRCodeWriter.QrErrorCorrectionLevel.High
QRCodeGenerator.ECCLevel.HQRCodeWriter.QrErrorCorrectionLevel.HighestNecessário para incorporar o logotipo
PayloadGenerator.WiFi(...).ToString()"WIFI:T:WPA;S:{ssid};P:{pass};;"Construa a string padrão diretamente
PayloadGenerator.ContactData(...).ToString()"BEGIN:VCARD\n..."vCard é um padrão público.
Sem API de leituraBarcodeReader.Read(path)Nova funcionalidade — sem biblioteca separada
Somente formato QR50+ formatos via BarcodeEncoding.*Nova capacidade

Problemas e soluções comuns em migrações

Problema 1: Alteração no formato da string do PayloadGenerator

QRCoder: PayloadGenerator.WiFi, PayloadGenerator.ContactData e outros auxiliares produzem strings formatadas automaticamente. O código passa a saída do objeto auxiliar .ToString() para CreateQrCode.

Solução: Identifique a string que cada tipo PayloadGenerator produz — seu formato está documentado na especificação do código QR e é fácil de reproduzir. Para WiFi: WIFI:T:WPA;S:{ssid};P:{password};;. Para vCard: blocos padrão BEGIN:VCARD / END:VCARD. Escreva métodos auxiliares estáticos caso vários locais de chamada utilizem o mesmo tipo de carga útil:

public static string WifiPayload(string ssid, string password, string auth = "WPA")
    => $"WIFI:T:{auth};S:{ssid};P:{password};;";

Problema 2: Mapeamento de Enum ECCLevel

QRCoder: QRCodeGenerator.ECCLevel é um enum aninhado com os valores L, M, Q, H. É um parâmetro necessário em cada chamada CreateQrCode.

Solução: Mapeie cada valor para seu equivalente QRCodeWriter.QrErrorCorrectionLevel ao usar o caminho QRCodeWriter. Ao usar BarcodeWriter.CreateBarcode, o nível ECC padrão para Médio automaticamente e não requer parâmetro. Atualize cada local de chamada:

//QRCoderECCLevel.H →IronBarcode QrErrorCorrectionLevel.Highest
var qr = QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest);

//QRCoderECCLevel.M →IronBarcode default (no parameter needed)
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode);
C#

Problema 3: Remoção da classe de renderização

QRCoder: Cada formato de saída requer sua própria instanciação da classe renderizadora — PngByteQRCode, SvgQRCode, AsciiQRCode, Base64QRCode, QRCode. Essas classes aceitam QRCodeData e expõem GetGraphic com diferentes tipos de retorno.

Solução: Remova todas as instâncias da classe de renderização. O IronBarcode incorpora a saída formatada nos métodos terminais da cadeia fluente. Substitua new PngByteQRCode(data).GetGraphic(n) por .ToPngBinaryData() após .ResizeTo(). Substitua new SvgQRCode(data).GetGraphic(n) por .SaveAsImage(path) (passando uma extensão .svg). O objeto intermediário QRCodeData também desaparece — não é necessário no IronBarcode.

Problema 4: Remoção de PngByteQRCode e dimensionamento baseado em módulos

QRCoder: PngByteQRCode.GetGraphic(int pixelsPerModule) dimensiona a saída pelo número de pixels por módulo QR. As dimensões da imagem resultante dependem do número de módulos, que varia de acordo com o comprimento do conteúdo e o nível de ECC.

Solução: Substitua o dimensionamento baseado em módulos por ResizeTo(int width, int height) para dimensões absolutas de pixel. Se o seu código calcula o tamanho de saída esperado dinamicamente a partir da contagem de módulos, mude para um tamanho de destino fixo que atenda aos seus requisitos de saída:

// Before: GetGraphic(20) — output size varies with content
var bytes = new PngByteQRCode(qrData).GetGraphic(20);

// After: fixed 400×400 regardless of content
byte[] bytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)
    .ResizeTo(400, 400)
    .ToPngBinaryData();

Lista de verificação para migração do QRCoder

Tarefas pré-migração

Antes de fazer qualquer alteração, audite o código-fonte de todos os usuários do QRCoder:

# Find allQRCodernamespace imports
grep -r "using QRCoder" --include="*.cs" .

# Find all generator and renderer instantiations
grep -r "QRCodeGenerator\|PngByteQRCode\|SvgQRCode\|AsciiQRCode\|QRCode\b" --include="*.cs" .

# Find all PayloadGenerator usages
grep -r "PayloadGenerator\." --include="*.cs" .

# Find ECCLevel references
grep -r "ECCLevel\." --include="*.cs" .

# Find ZXing.Net usage to remove at the same time
grep -r "using ZXing" --include="*.cs" .
SHELL
  • Documente todos os tipos de PayloadGenerator em uso e anote seus formatos de saída de string
  • Observe todos os valores de nível ECC em uso e seus respectivos pontos de chamada.
  • Identifique qualquer código de leitura ZXing .NET que tenha sido emparelhado com oQRCoderpara decodificação — este pode ser substituído ao mesmo tempo.
  • Obtenha uma chave de licença do IronBarcode(chaves de avaliação estão disponíveis sem necessidade de cadastro)

Tarefas de atualização de código

  1. Execute dotnet remove package QRCoder
  2. Execute dotnet remove package ZXing.Net se ele foi usado apenas para leitura junto com o QRCoder
  3. Execute dotnet add package IronBarcode
  4. Adicione IronBarCode.License.LicenseKey = "YOUR-KEY"; à inicialização do aplicativo
  5. Substitua todas as importações using QRCoder; por using IronBarCode;
  6. Remova todas as declarações de instância new QRCodeGenerator()BarcodeWriter é estático
  7. Substitua todos os padrões de corrente do renderizador + generator.CreateQrCode(data, ECCLevel.X) por correntes BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)
  8. Substitua as chamadas .GetGraphic(n) por .ToPngBinaryData() e adicione .ResizeTo(w, h) antes do terminal
  9. Substitua os padrões de salvar File.WriteAllBytes(path, bytes) por métodos terminais .SaveAsPng(path)
  10. Substitua new SvgQRCode(data).GetGraphic(n) por .SaveAsImage(path) (passe uma extensão .svg)
  11. Substitua as instanciações do helper PayloadGenerator.WiFi(...) e outros auxiliares por strings de formato direto
  12. Mapeie cada valor QRCodeGenerator.ECCLevel para seu equivalente QRCodeWriter.QrErrorCorrectionLevel
  13. Substitua qualquer chamada BarcodeReaderGeneric.Decode(bitmap) do ZXing.Net por BarcodeReader.Read(path)
  14. Para a incorporação de logotipo, substitua new QRCode(data).GetGraphic(n, ..., logoBitmap) por QRCodeWriter.CreateQrCodeWithLogo(data, logoPath, size)

Testes pós-migração

  • Escaneie todos os códigos QR gerados com pelo menos dois aplicativos de leitura de código QR independentes para verificar a legibilidade.
  • Verifique se os códigos QR incorporados no logotipo são escaneados corretamente — confirme se o nível de correção de erro é Highest
  • Comparar a saída visual dos códigos gerados com amostras pré-migração onde a consistência visual é necessária.
  • Teste todas as substituições PayloadGenerator — confirme se WiFi, vCard e outras strings de carga útil são decodificadas corretamente nos dispositivos alvo
  • Se o ZXing.Net também foi removido, verifique se todos os caminhos de leitura de código de barras funcionam através de BarcodeReader.Read
  • Execute o aplicativo em um ambiente limpo para confirmar que nenhuma referência residual aoQRCoderou ao ZXing .NET esteja causando falhas de vinculação.
  • Verifique se a chave de licença do IronBarcode está carregada corretamente nos ambientes de produção e de teste.

Principais benefícios da migração para o IronBarcode

API Única para Todas as Operações de Código de Barras: Após a migração, toda tarefa de código de barras — geração, leitura, carimbo de PDF — usa o mesmo namespace IronBarCode e os mesmos pontos de entrada. Os desenvolvedores que ingressam no projeto aprendem apenas uma API, em vez de três. A revisão de código em todo o subsistema de código de barras torna-se consistente. A consulta de documentação é centralizada.

Leitura de Código de Barras Sem uma Segunda Biblioteca: BarcodeReader.Read lida com arquivos de imagem, páginas PDF, streamings e bitmaps na memória com detecção automática de formato. A capacidade de leitura que antes exigia o uso do ZXing .NET — com seus requisitos de especificação de formato e considerações de segurança de threads — está disponível imediatamente por meio de uma única chamada de método. O guia de leitura de código de barras a partir de imagens abrange a detecção de múltiplos códigos de barras, o pré-processamento de imagens e a digitalização de páginas PDF.

Expansão de Formato Sem Novas Dependências: Adicionar Code 128, EAN-13, DataMatrix, PDF417, ou qualquer outro formato suportado após a migração requer apenas um valor de parâmetro diferente BarcodeEncoding. Não há novos pacotes para instalar, novas APIs para aprender ou problemas de compatibilidade de versões para gerenciar. Os novos requisitos de formato passam a ser uma simples alteração de uma linha, em vez de uma nova integração de biblioteca.

Personalização Simplificada de Código QR: A incorporação de logotipo, mudanças de cor e controle de zona silenciosa estão disponíveis como métodos nomeados no resultado QRCodeWriter. A dependência System.Drawing.Bitmap que oQRCoderrequer para a incorporação de logotipo é substituída por uma simples string de caminho de arquivo. O guia de personalização do estilo de código QR documenta todas as opções de personalização disponíveis.

Integração com PDF integrada: os códigos de barras podem ser lidos de documentos PDF recebidos e inseridos em arquivos PDF existentes sem a necessidade de adicionar uma biblioteca PDF. Os fluxos de trabalho de processamento de documentos que exigiam uma dependência separada de PDF agora têm funcionalidades de código de barras e PDF consolidadas.

Redução dos custos de manutenção a longo prazo: A migração de três ou quatro pacotes independentes para um só elimina o acúmulo de custos associados ao acompanhamento de múltiplos ciclos de lançamento, à resolução de conflitos de versões entre bibliotecas e à atualização de múltiplos conjuntos de testes quando as versões do .NET são atualizadas. O custo de manutenção do subsistema de código de barras se reduz a uma única dependência de pacote.

Observe: NetBarcode,QRCodere ZXing.NET são marcas registradas de seus respectivos proprietários. Este site não é afiliado, endossado ou patrocinado por NetBarcode,QRCoderou ZXing.NET. Todos os nomes de produtos, logotipos e marcas são propriedade de seus respectivos proprietários. As comparações são apenas para fins informativos e refletem informações disponíveis publicamente no momento da redação.
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 bem estruturados e visualmente atraentes.

...
Leia mais

Artigos relacionados

Key in blue circle

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.

Your trial license will be sent to your email address

Sem limitações. 100% desbloqueado. Sem cartão de crédito.

bullet_checkedNão é necessário cartão de crédito nem criação de conta.Sem limitações. 100% desbloqueado. Sem cartão de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Agende sua demonstração ao vivo gratuita.
Booking Badge

Aprovado por milhões de engenheiros em todo o mundo.

Logotipos dos clientes da Iron Software
Agende sua consulta sem compromisso.
Preencha o formulário abaixo ou envie um e-mail para sales@ironsoftware.com
Os seus dados serão sempre mantidos em sigilo.
Aprovado por milhões de engenheiros em todo o mundo.
Logotipos dos clientes da Iron Software
Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.