Ir para o conteúdo do rodapé
VíDEOS

Como gerar formatos de dados de código de barras em C# | IronBarcode

Migrando de Neodynamic Barcode para IronBarcode

Este guia fornece um caminho completo de migração de Neodynamic.SDK.Barcode e Neodynamic.SDK.BarcodeReader para IronBarcode. Abrange a remoção de ambos os pacotes Neodynamic, a substituição da configuração de licença dupla por uma única chave, a tradução das chamadas de API de geração e leitura e o processo de obtenção da capacidade de leitura de código de barras 2D, que não era possível com o conjunto de produtos Neodynamic. Este guia foi escrito para desenvolvedores que já possuem código Neodynamic e precisam de uma abordagem sistemática, arquivo por arquivo, para concluir a migração.

Por que migrar do código de barras neodinâmico?

Lacuna de leitura 2D: O SDK Professional de código de barras neodinâmico gera códigos de barras QR Code, DataMatrix, PDF417 e Aztec. Nenhum desses formatos pode ser lido pelo SDK de leitor de código de barras complementar. Um projeto que gera códigos QR para etiquetas de produtos, contêineres de transporte ou rastreamento de documentos não consegue ler esses mesmos códigos através do leitor que adquiriu juntamente com o gerador. O IronBarcode lê e gera códigos QR, DataMatrix, PDF417, Aztec e todos os outros formatos 2D suportados, utilizando a mesma biblioteca e a mesma licença.

Sobrecarga de Produto Duplo: Todo projeto que utiliza ambos os SDKs da Neodynamic possui duas entradas PackageReference, duas diretivas using, dois blocos de licença e dois ciclos de atualização separados. A sobrecarga se repete em todas as máquinas de desenvolvedores, em todos os pipelines de CI e em todos os ambientes de produção. Consolidar dois pacotes com requisitos de manutenção distintos em uma única dependência com uma única licença é o resultado mecânico dessa migração.

O Problema da Terceira Biblioteca: As equipes que se depararam com a lacuna na leitura 2D e optaram por contorná-la em vez de migrar, normalmente adicionavam uma terceira biblioteca — sendo o ZXing .NET a escolha mais comum — especificamente para lidar com a leitura de códigos QR. Essa decisão troca uma limitação por uma complexidade diferente: três dependências relacionadas a códigos de barras, cada uma com suas próprias restrições de versão, suas próprias notas de lançamento e seu próprio potencial de conflito quando o runtime do .NET ou a estrutura dependente for atualizada.IronBarcode substitui todos os três.

Complexidade de Preços: O Professional de código de barras neodinâmico SDK é precificado por desenvolvedor (Básico a partir de aproximadamente $352, Ultimate a partir de aproximadamente $705 via ComponentSource). O SDK do Leitor de Código de Barras tem um custo separado. Um projeto que precisa tanto da geração quanto da leitura de 1D deve adquirir ambos, e o custo combinado escala com o tamanho da equipe além da taxa do Leitor. Um projeto que precisa de leitura 2D ainda não pode atender a esse requisito a qualquer preço dentro da família de produtos Neodynamic.IronBarcode Lite cobre geração e leitura — 1D e 2D — sob uma única licença. Os preços atuais estão na página de licenciamento do IronBarcode.

O problema fundamental

A principal questão em qualquer código-fonte que utilizasse os dois SDKs da Neodynamic para um fluxo de trabalho completo de código de barras era que a leitura de códigos QR nunca foi possível:

// Before: Leitor de código de barras neodinâmico does not support QR codes
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;

public string ReadQrCode(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    var reader = new BarcodeReader();
    var results = reader.Read(bitmap);

    // Results are always null or empty for 2D barcodes
    if (results == null || !results.Any())
    {
        throw new NotSupportedException(
            "Neodynamic Barcode Reader does not support QR codes");
    }

    return results.First().Value;
}
// Before: Leitor de código de barras neodinâmico does not support QR codes
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;

public string ReadQrCode(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    var reader = new BarcodeReader();
    var results = reader.Read(bitmap);

    // Results are always null or empty for 2D barcodes
    if (results == null || !results.Any())
    {
        throw new NotSupportedException(
            "Neodynamic Barcode Reader does not support QR codes");
    }

    return results.First().Value;
}
Imports Neodynamic.SDK.BarcodeReader
Imports System.Drawing

Public Function ReadQrCode(imagePath As String) As String
    Using bitmap As New Bitmap(imagePath)
        Dim reader As New BarcodeReader()
        Dim results = reader.Read(bitmap)

        ' Results are always null or empty for 2D barcodes
        If results Is Nothing OrElse Not results.Any() Then
            Throw New NotSupportedException("Neodynamic Barcode Reader does not support QR codes")
        End If

        Return results.First().Value
    End Using
End Function
$vbLabelText   $csharpLabel

Após a migração para o IronBarcode, a mesma operação se torna uma chamada de leitura padrão, sem tratamento específico de formato:

// After:IronBarcode reads QR codes with the same call used for all formats
using IronBarCode;

public string ReadQrCode(string imagePath)
{
    var result = BarcodeReader.Read(imagePath).FirstOrDefault();
    return result?.Value;
}
// After:IronBarcode reads QR codes with the same call used for all formats
using IronBarCode;

public string ReadQrCode(string imagePath)
{
    var result = BarcodeReader.Read(imagePath).FirstOrDefault();
    return result?.Value;
}
Imports IronBarCode

Public Function ReadQrCode(imagePath As String) As String
    Dim result = BarcodeReader.Read(imagePath).FirstOrDefault()
    Return If(result?.Value, Nothing)
End Function
$vbLabelText   $csharpLabel

Todo espaço reservado throw new NotSupportedException(...) em um código base que referencia a leitura de código de barras 2D é removido durante esta migração e substituído por uma chamada de leitura funcional.

IronBarcode vs Neodynamic Barcode: Comparação de Recursos

Recurso Professional de código de barras neodinâmico Leitor de código de barras neodinâmico IronBarcode
Geração de código 128, EAN-13 e UPC-A Sim N / D Sim
Geração de código QR, DataMatrix e PDF417 Sim N / D Sim
Leitura de código de barras 1D N / D Sim Sim
Leitura de código QR N / D Não Sim
Leitura de DataMatrix N / D Não Sim
Leitura PDF417 N / D Não Sim
Leitura nativa de código de barras em PDF Não Não Sim
Detecção automática de formato N / D Não Sim
Pacotes NuGet necessários 1 1 1 (abrange ambos)
Chaves de licença necessárias 1 1 (separado) 1 (abrange tudo)
Dependência de desenho do sistema Sim Sim Não
Suporte para Linux/Docker Limitado Limitado Sim
Suporte para .NET 8 / .NET 9 Sim Limitado Sim
Leitura em lote assíncrona Não Não Sim

Guia rápido: Migração de código de barras Neodynamic para IronBarcode

Passo 1: Remova ambos os pacotes neodinâmicos

Ambas as embalagens devem ser removidas. Eles não possuem dependências em comum que afetem a ordem de remoção:

dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
SHELL

Verifique se ambas as entradas foram removidas do arquivo .csproj antes de prosseguir.

Passo 2: Adicionar IronBarcode

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

Etapa 3: Substituir a configuração de licença dupla

Remova os dois blocos de licença Neodynamic e substitua-os por uma única atribuição de chave IronBarcode. Esta atribuição é feita uma vez na inicialização do aplicativo — em Program.cs, Startup.cs, ou na raiz de composição do aplicativo:

// Before: two license blocks, two products
using Neodynamic.SDK.Barcode;
using Neodynamic.SDK.BarcodeReader;

BarcodeProfessional.LicenseOwner = "Your Company";
BarcodeProfessional.LicenseKey = "GEN-LICENSE-KEY";

Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Your Company";
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-LICENSE-KEY";
// Before: two license blocks, two products
using Neodynamic.SDK.Barcode;
using Neodynamic.SDK.BarcodeReader;

BarcodeProfessional.LicenseOwner = "Your Company";
BarcodeProfessional.LicenseKey = "GEN-LICENSE-KEY";

Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Your Company";
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-LICENSE-KEY";
Imports Neodynamic.SDK.Barcode
Imports Neodynamic.SDK.BarcodeReader

BarcodeProfessional.LicenseOwner = "Your Company"
BarcodeProfessional.LicenseKey = "GEN-LICENSE-KEY"

Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Your Company"
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-LICENSE-KEY"
$vbLabelText   $csharpLabel
// After: one key covers generation and reading across all formats
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// After: one key covers generation and reading across all formats
using IronBarCode;

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

' After: one key covers generation and reading across all formats
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Quaisquer arquivos de configuração, variáveis ​​de ambiente ou repositórios de segredos que contenham chaves de licença do Neodynamic podem ser desativados após a verificação da migração.

Exemplos de migração de código

Gerando um código de barras Code 128

Abordagem neodinâmica:

using Neodynamic.SDK.Barcode;
using System.Drawing.Imaging;

public void GenerateCode128(string data, string outputPath)
{
    var barcode = new BarcodeProfessional();
    barcode.Code = data;
    barcode.Symbology = Symbology.Code128;
    barcode.BarcodeUnit = BarcodeUnit.Pixel;

    System.Drawing.Image image = barcode.GetBarcodeImage();
    image.Save(outputPath, ImageFormat.Png);
}
using Neodynamic.SDK.Barcode;
using System.Drawing.Imaging;

public void GenerateCode128(string data, string outputPath)
{
    var barcode = new BarcodeProfessional();
    barcode.Code = data;
    barcode.Symbology = Symbology.Code128;
    barcode.BarcodeUnit = BarcodeUnit.Pixel;

    System.Drawing.Image image = barcode.GetBarcodeImage();
    image.Save(outputPath, ImageFormat.Png);
}
Imports Neodynamic.SDK.Barcode
Imports System.Drawing.Imaging

Public Sub GenerateCode128(data As String, outputPath As String)
    Dim barcode As New BarcodeProfessional()
    barcode.Code = data
    barcode.Symbology = Symbology.Code128
    barcode.BarcodeUnit = BarcodeUnit.Pixel

    Dim image As System.Drawing.Image = barcode.GetBarcodeImage()
    image.Save(outputPath, ImageFormat.Png)
End Sub
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

public void GenerateCode128(string data, string outputPath)
{
    BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .SaveAsPng(outputPath);
}
using IronBarCode;

public void GenerateCode128(string data, string outputPath)
{
    BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .SaveAsPng(outputPath);
}
Imports IronBarCode

Public Sub GenerateCode128(data As String, outputPath As String)
    BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
        .SaveAsPng(outputPath)
End Sub
$vbLabelText   $csharpLabel

A importação System.Drawing.Imaging não é mais necessária. A instância BarcodeInfo e suas atribuições de propriedades são condensadas em uma única chamada de método. Para opções de dimensionamento, anotação e formato de saída, consulte o guia de criação de códigos de barras 1D .

Gerando um código QR

Abordagem neodinâmica:

using Neodynamic.SDK.Barcode;

public void GenerateQrCode(string data, string outputPath)
{
    var barcode = new BarcodeProfessional();
    barcode.Code = data;
    barcode.Symbology = Symbology.QRCode;
    barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H;

    barcode.GetBarcodeImage().Save(outputPath, System.Drawing.Imaging.ImageFormat.Png);
}
using Neodynamic.SDK.Barcode;

public void GenerateQrCode(string data, string outputPath)
{
    var barcode = new BarcodeProfessional();
    barcode.Code = data;
    barcode.Symbology = Symbology.QRCode;
    barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H;

    barcode.GetBarcodeImage().Save(outputPath, System.Drawing.Imaging.ImageFormat.Png);
}
Imports Neodynamic.SDK.Barcode
Imports System.Drawing.Imaging

Public Sub GenerateQrCode(data As String, outputPath As String)
    Dim barcode As New BarcodeProfessional()
    barcode.Code = data
    barcode.Symbology = Symbology.QRCode
    barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H

    barcode.GetBarcodeImage().Save(outputPath, ImageFormat.Png)
End Sub
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

public void GenerateQrCode(string data, string outputPath)
{
    QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
        .SaveAsPng(outputPath);
}
using IronBarCode;

public void GenerateQrCode(string data, string outputPath)
{
    QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
        .SaveAsPng(outputPath);
}
Imports IronBarCode

Public Sub GenerateQrCode(data As String, outputPath As String)
    QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest) _
        .SaveAsPng(outputPath)
End Sub
$vbLabelText   $csharpLabel

A tradução de geração altera apenas a superfície da API. A principal diferença introduzida por essa migração é que o mesmo aplicativo agora também pode ler os códigos QR que gera, por meio da mesma biblioteca IronBarcode e da mesma licença. Para obter instruções completas sobre a criação de códigos de barras 2D, consulte o guia de criação de códigos de barras 2D .

Leitura de códigos de barras 1D

Abordagem neodinâmica:

using Neodynamic.SDK.BarcodeReader;
using System.Drawing;

public string[] Read1DBarcodes(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    var reader = new BarcodeReader();
    var results = reader.Read(bitmap);
    return results?.Select(r => r.Value).ToArray() ?? Array.Empty<string>();
}
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;

public string[] Read1DBarcodes(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    var reader = new BarcodeReader();
    var results = reader.Read(bitmap);
    return results?.Select(r => r.Value).ToArray() ?? Array.Empty<string>();
}
Imports Neodynamic.SDK.BarcodeReader
Imports System.Drawing

Public Function Read1DBarcodes(imagePath As String) As String()
    Using bitmap As New Bitmap(imagePath)
        Dim reader As New BarcodeReader()
        Dim results = reader.Read(bitmap)
        Return If(results?.Select(Function(r) r.Value).ToArray(), Array.Empty(Of String)())
    End Using
End Function
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

public string[] Read1DBarcodes(string imagePath)
{
    var results = BarcodeReader.Read(imagePath);
    return results.Select(r => r.Value).ToArray();
}
using IronBarCode;

public string[] Read1DBarcodes(string imagePath)
{
    var results = BarcodeReader.Read(imagePath);
    return results.Select(r => r.Value).ToArray();
}
Imports IronBarCode

Public Function Read1DBarcodes(imagePath As String) As String()
    Dim results = BarcodeReader.Read(imagePath)
    Return results.Select(Function(r) r.Value).ToArray()
End Function
$vbLabelText   $csharpLabel

A construção Bitmap e a importação System.Drawing são removidas. O IronBarcode aceita o caminho do arquivo diretamente. O nome da propriedade result.Value é o mesmo em ambas as APIs, portanto, o código subsequente que processa os valores retornados não muda. Para opções de leitura e pré-processamento de imagens com múltiplos códigos de barras, consulte o guia de leitura de códigos de barras a partir de imagens .

Leitura de códigos QR (antes impossível)

Abordagem neodinâmica:

// This method could not be implemented with Neodynamic Barcode Reader
public string ReadQrCode(string imagePath)
{
    throw new NotSupportedException(
        "Neodynamic Barcode Reader does not support QR codes");
}
// This method could not be implemented with Neodynamic Barcode Reader
public string ReadQrCode(string imagePath)
{
    throw new NotSupportedException(
        "Neodynamic Barcode Reader does not support QR codes");
}
' This method could not be implemented with Neodynamic Barcode Reader
Public Function ReadQrCode(imagePath As String) As String
    Throw New NotSupportedException("Neodynamic Barcode Reader does not support QR codes")
End Function
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

public string ReadQrCode(string imagePath)
{
    var result = BarcodeReader.Read(imagePath).FirstOrDefault();
    return result?.Value;
}
using IronBarCode;

public string ReadQrCode(string imagePath)
{
    var result = BarcodeReader.Read(imagePath).FirstOrDefault();
    return result?.Value;
}
Imports IronBarCode

Public Function ReadQrCode(imagePath As String) As String
    Dim result = BarcodeReader.Read(imagePath).FirstOrDefault()
    Return If(result?.Value, Nothing)
End Function
$vbLabelText   $csharpLabel

Todo espaço reservado throw new NotSupportedException(...) que referencia a leitura de código de barras 2D se torna uma chamada de leitura padrão. O corpo do método passa de uma exceção lançada para uma implementação funcional. Não é necessário nenhum cuidado especial com os códigos QR; O IronBarcode identifica o formato automaticamente.

Leitura de códigos de barras em documentos PDF (Nova funcionalidade)

Abordagem neodinâmica:

// Neodynamic Reader cannot read barcodes from PDF files directly
// An image extraction step using a separate library was required before reading
// Não direct equivalent exists
// Neodynamic Reader cannot read barcodes from PDF files directly
// An image extraction step using a separate library was required before reading
// Não direct equivalent exists
' Neodynamic Reader cannot read barcodes from PDF files directly
' An image extraction step using a separate library was required before reading
' Não direct equivalent exists
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

public void ReadBarcodesFromPdf(string pdfPath)
{
    var results = BarcodeReader.Read(pdfPath);

    foreach (var result in results)
    {
        Console.WriteLine($"Value: {result.Value} | Format: {result.Format} | Page: {result.PageNumber}");
    }
}
using IronBarCode;

public void ReadBarcodesFromPdf(string pdfPath)
{
    var results = BarcodeReader.Read(pdfPath);

    foreach (var result in results)
    {
        Console.WriteLine($"Value: {result.Value} | Format: {result.Format} | Page: {result.PageNumber}");
    }
}
Imports IronBarCode

Public Sub ReadBarcodesFromPdf(pdfPath As String)
    Dim results = BarcodeReader.Read(pdfPath)

    For Each result In results
        Console.WriteLine($"Value: {result.Value} | Format: {result.Format} | Page: {result.PageNumber}")
    Next
End Sub
$vbLabelText   $csharpLabel

O IronBarcode lê códigos de barras diretamente de documentos PDF em todas as páginas. O número da página em que cada código de barras foi encontrado é retornado no resultado. Essa funcionalidade não requer nenhuma biblioteca adicional nem etapa intermediária de extração de imagem.

Referência de mapeamento da API Neodynamic Barcode para IronBarcode

API Neodinâmica Equivalente ao IronBarcode Notas
BarcodeInfo.LicenseOwner = "..." IronBarCode.License.LicenseKey = "key" Fundidas em uma única chave
BarcodeInfo.LicenseKey = "..." (part of single key above) Não há campo de proprietário separado
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner (removed) Não é necessário
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey (removed) Não é necessário
new BarcodeInfo() BarcodeWriter.CreateBarcode(data, encoding) Estático, sem instância
barcode.Value = data Primeiro parâmetro de CreateBarcode Aprovado na construção
barcode.Symbology = Symbology.Code128 BarcodeEncoding.Code128 Segundo parâmetro
barcode.Symbology = Symbology.QRCode BarcodeEncoding.QRCode Agora é possível viajar com ida e volta completas.
barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H QRCodeWriter.QrErrorCorrectionLevel.Highest Ponto de entrada de classe diferente
barcode.GetImage().Save(path, ImageFormat.Png) .SaveAsPng(path) Fluente, sem enumeração ImageFormat
BarcodeReader.Read(bitmap) BarcodeReader.Read(imagePath) O caminho do arquivo substitui o Bitmap
result.Value result.Value Mesmo nome de propriedade
Symbology.DataMatrix BarcodeEncoding.DataMatrix Geração apenas → geração e leitura
throw new NotSupportedException(...) para leitura 2D BarcodeReader.Read(imagePath) Substitua por uma implementação funcional.

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

Problema 1: Ordem de Remoção de Dois Pacotes

Problema: Desenvolvedores que removem apenas um pacote do Neodynamic e deixam o outro instalado causam erros de compilação, pois os dois SDKs não compartilham tipos, mas alguns arquivos de origem podem importar ambos os namespaces no mesmo arquivo.

Solução: Remova ambos os pacotes antes de fazer qualquer alteração no código-fonte. Após ambas serem removidas, procure por todas as diretivas using Neodynamic.SDK.Barcode e using Neodynamic.SDK.BarcodeReader e remova-as juntas:

dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
SHELL

Em seguida, realize a auditoria com:

grep -r "Neodynamic.SDK" --include="*.cs" .
grep -r "Neodynamic.SDK" --include="*.cs" .
SHELL

Problema 2: Limpeza da configuração de licença dupla

Problema: Os dois blocos de licença Neodynamic frequentemente aparecem em locais diferentes — um na classe de inicialização da aplicação e outro em um inicializador de serviço. Se apenas um bloco for removido, o código restante fará referência a um namespace que não existe mais e a compilação falhará.

Solução: Procure todas as quatro atribuições de propriedades da licença Neodynamic e remova-as em conjunto antes de adicionar a chave IronBarcode:

grep -r "LicenseOwner\|LicenseKey" --include="*.cs" .
grep -r "LicenseOwner\|LicenseKey" --include="*.cs" .
SHELL

Substitua todas as quatro linhas por uma única atribuição:

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

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Problema 3: Remoção de NotSupportedException de blocos Catch

Problema: Algumas bases de código que usaram o Neodynamic Reader adicionaram blocos catch (NotSupportedException) especificamente para lidar com a falha silenciosa de leituras de código de barras 2D. Esses blocos de captura devem ser removidos juntamente com o código de lançamento; caso contrário, a cláusula catch refere-se a um caminho de código que não pode mais ocorrer.

Solução: Procure por NotSupportedException em arquivos relacionados a código de barras e reveja cada ocorrência. Se a exceção foi lançada em resposta a uma tentativa de leitura de formato 2D, remova tanto o lançamento quanto a captura da exceção:

grep -r "NotSupportedException" --include="*.cs" .
grep -r "NotSupportedException" --include="*.cs" .
SHELL

Substitua o corpo do método lançador por BarcodeReader.Read(imagePath) e remova o bloco de captura correspondente de qualquer chamador.

Lista de verificação para migração de código de barras neodinâmico

Pré-migração

  • Procure por todas as referências de pacote Neodynamic: grep -r "Neodynamic.SDK" --include="*.csproj" .
  • Procure por todas as diretivas de uso de Neodynamic: grep -r "using Neodynamic" --include="*.cs" .
  • Pesquise os locais de configuração da licença: grep -r &quot;LicenseOwner\|LicenseKey&quot; --include=&quot;*.cs&quot; .
  • Procure por todos os locais de instância BarcodeInfo: grep -r "new BarcodeInfo\(\)" --include="*.cs" .
  • Procure por todas as chamadas de leitura Neodynamic: grep -r "BarcodeReader.Read" --include="*.cs" .
  • Procure por todos os usos de NotSupportedException em caminhos de código de barras: grep -r "NotSupportedException" --include="*.cs" .
  • Identifique qualquer biblioteca de terceiros (ZXing .NET ou similar) que tenha sido adicionada especificamente para suprir a lacuna de leitura 2D — ela pode ser removida após a migração.
  • Registre todas as chaves de licença da Neodynamic para que possam ser desativadas dos repositórios de segredos após a verificação.

Tarefas de atualização de código

  1. Execute dotnet remove package Neodynamic.SDK.Barcode
  2. Execute dotnet remove package Neodynamic.SDK.BarcodeReader
  3. Execute dotnet add package IronBarcode
  4. Remova todas as diretivas using Neodynamic.SDK.Barcode e using Neodynamic.SDK.BarcodeReader
  5. Adicione using IronBarCode em todos os arquivos que realizam operações de código de barras
  6. Remova ambos os blocos de configuração de licença Neodynamic.
  7. Adicione IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY" uma vez na inicialização do aplicativo
  8. Substitua new BarcodeInfo() + atribuições de propriedades + barcode.GetImage().Save(...) por BarcodeWriter.CreateBarcode(data, encoding).SaveAsPng(path)
  9. Substitua padrões QRCodeWriter adequadamente usando QRCodeWriter.CreateQrCode()
  10. Substitua chamadas BarcodeReader.Read(bitmap) removendo a construção new Bitmap(imagePath) e passando o caminho do arquivo diretamente para BarcodeReader.Read(imagePath)
  11. Remova todos os espaços reservados throw new NotSupportedException(...) para leitura 2D e substitua por BarcodeReader.Read(imagePath)
  12. Remova os blocos correspondentes catch (NotSupportedException) dos chamadores
  13. Remova qualquer biblioteca de terceiros que tenha sido adicionada exclusivamente para suprir a lacuna de leitura 2D da Neodynamic.

Testes pós-migração

  • Verificar se a geração do código de barras Code 128 produz resultados com dimensões e configurações de DPI correspondentes às configurações anteriores.
  • Verificar se a geração do código QR produz resultados legíveis por scanner.
  • Verificar se a leitura do código de barras 1D retorna os mesmos valores que a implementação anterior do Neodynamic Reader.
  • Verifique se a leitura de QR Code tem sucesso em imagens que anteriormente lançaram NotSupportedException
  • Verifique se a leitura de DataMatrix e PDF417 é bem-sucedida caso esses formatos apareçam na entrada do aplicativo.
  • Teste a leitura de código de barras em PDF se o aplicativo processar documentos PDF.
  • Confirme se todas as referências à chave de licença do Neodynamic foram removidas dos arquivos de configuração e variáveis ​​de ambiente.
  • Confirme se a biblioteca 2D de terceiros (caso exista) foi completamente removida e se nenhuma importação restante a referencia.

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

Capacidade unificada de leitura e gravação: após a migração, toda simbologia que o IronBarcode pode gerar também pode ser lida de volta através da mesma biblioteca. A assimetria entre o gerador e o leitor do Neodynamic — onde códigos QR, DataMatrix, PDF417 e Aztec podiam ser produzidos, mas não consumidos — é eliminada. Aplicações que anteriormente exigiam uma solução alternativa ou uma biblioteca de terceiros para leitura 2D agora obtêm essa capacidade sem qualquer trabalho adicional de integração.

Administração de Licença Única: Um pacote NuGet , uma chave de licença e um bloco de configuração substituem duas assinaturas de produto separadas. A renovação, a rotação de chaves e o gerenciamento de variáveis ​​de ambiente tornam-se metade da complexidade. A redução dos custos administrativos é contínua, e não um ganho pontual.

Leitura nativa de códigos de barras em PDF: o IronBarcode lê códigos de barras diretamente de documentos PDF, retornando metadados de número de página juntamente com os valores dos códigos de barras. Aplicações que processam manifestos de envio, documentos de faturas ou registros médicos contendo códigos de barras incorporados não exigem mais uma etapa intermediária de extração de imagem ou uma biblioteca PDF adicional para suportar a leitura de códigos de barras. Consulte a lista completa de formatos de código de barras suportados para obter o conjunto completo de simbologias e tipos de entrada abrangidos.

Eliminação da Dependência do System.Drawing: Os SDKs da Neodynamic dependem de System.Drawing, o que exige configuração adicional de biblioteca nativa no Linux e em contêineres Docker.IronBarcode não possui dependência System.Drawing, o que significa que o mesmo código base roda no Windows, Linux e em ambientes de nuvem conteinerizados sem alterações específicas de plataforma.

Custo de licenciamento simplificado para funcionalidade completa: Um projeto que precisava dos SDKs da Neodynamic e de uma terceira biblioteca para leitura 2D estava pagando por três dependências para obter o que a IronBarcode oferece com uma única licença. Para projetos que exigem geração e leitura 2D, a migração consolida tanto a infraestrutura técnica quanto o custo de licenciamento em um único produto comercial. As informações atuais sobre preços estão disponíveis na página de licenciamento do IronBarcode .

ObserveNeodynamic e ZXing.NET são marcas registradas de seus respectivos proprietários. Este site não é afiliado, endossado ou patrocinado por Neodynamic ou 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.

Perguntas frequentes

Por que devo migrar do Neodynamic Barcode Professional para o IronBarcode?

Entre os motivos comuns estão a simplificação do licenciamento (removendo a complexidade do SDK e da chave de tempo de execução), a eliminação dos limites de taxa de transferência, a obtenção de suporte nativo para PDF, a melhoria da implantação em Docker/CI/CD e a redução do código repetitivo da API em produção.

Como faço para substituir as chamadas da API Neodynamic pelo IronBarcode?

Substitua o código padrão de criação de instâncias e licenciamento por `IronBarCode.License.LicenseKey = "key"`. Substitua as chamadas de leitura por `BarcodeReader.Read(path)` e as chamadas de gravação por `BarcodeWriter.CreateBarcode(data, encoding)`. Os métodos estáticos não exigem gerenciamento de instâncias.

Quanta alteração de código ocorre ao migrar do Neodynamic Barcode Professional para o IronBarcode?

A maioria das migrações resulta em menos linhas de código. O código repetitivo de licenciamento, os construtores de instância e a configuração explícita de formato são removidos. As operações principais de leitura/gravação são mapeadas para equivalentes mais curtos em IronBarcode, com objetos de resultado mais limpos.

Preciso manter o Neodynamic Barcode Professional e o IronBarcode instalados durante a migração?

Não. A maioria das migrações são substituições diretas, e não operações paralelas. Migre uma classe de serviço por vez, substitua a referência do NuGet e atualize os padrões de instanciação e chamada de API antes de passar para a próxima classe.

Qual é o nome do pacote NuGet para IronBarcode?

O pacote é 'IronBarCode' (com B e C maiúsculos). Instale-o com 'Install-Package IronBarCode' ou 'dotnet add package IronBarCode'. A diretiva using no código é 'using IronBarCode;'.

Como o IronBarcode simplifica a implementação do Docker em comparação com o Neodynamic Barcode Professional?

IronBarcode é um pacote NuGet sem arquivos SDK externos ou configuração de licença montada. No Docker, defina a variável de ambiente IRONBARCODE_LICENSE_KEY e o pacote cuidará da validação da licença na inicialização.

O IronBarcode detecta automaticamente todos os formatos de código de barras após a migração do Neodynamic?

Sim. O IronBarcode detecta automaticamente a simbologia em todos os formatos suportados. A enumeração explícita de BarcodeTypes não é necessária. Se o formato já for conhecido e o desempenho for importante, o BarcodeReaderOptions permite restringir o espaço de busca como uma otimização.

O IronBarcode consegue ler códigos de barras de PDFs sem uma biblioteca separada?

Sim. O método `BarcodeReader.Read("document.pdf")` processa arquivos PDF nativamente. Os resultados incluem o número da página, o formato, o valor e a confiança de cada código de barras encontrado. Não é necessária nenhuma etapa externa de renderização de PDF.

Como o IronBarcode lida com o processamento paralelo de códigos de barras?

Os métodos estáticos do IronBarcode são sem estado e thread-safe. Use Parallel.ForEach diretamente em listas de arquivos sem gerenciamento de instâncias por thread. BarcodeReaderOptions.MaxParallelThreads controla o orçamento interno de threads.

Quais propriedades de resultado são alteradas ao migrar do Neodynamic Barcode Professional para o IronBarcode?

Renomeações comuns: BarcodeValue torna-se Value, BarcodeType torna-se Format. Os resultados do IronBarcode também incluem Confidence e PageNumber. Uma função de busca e substituição em toda a solução lida com as renomeações no código de processamento de resultados existente.

Como configuro o licenciamento do IronBarcode em um pipeline de CI/CD?

Armazene IRONBARCODE_LICENSE_KEY como um segredo de pipeline e atribua IronBarCode.License.LicenseKey no código de inicialização do aplicativo. Um único segredo abrange todos os ambientes, incluindo desenvolvimento, teste, homologação e produção.

O IronBarcode suporta a geração de códigos QR com estilos personalizados?

Sim. O método QRCodeWriter.CreateQrCode() suporta cores personalizadas através do método ChangeBarCodeColor(), incorporação de logotipo através do método AddBrandLogo(), níveis configuráveis de correção de erros e múltiplos formatos de saída, incluindo PNG, JPG, PDF e fluxo de dados.

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