Neodynamic Barcode Professional vs IronBarcode: Comparação de bibliotecas de código de barras em C#
SDK Scanbot vs IronBarcode: Pipeline de Câmera vs Processamento de Arquivo
O SDK Scanbot abre uma visualização de leitura de código de barras em tela cheia usando a câmera do dispositivo. Não há método BarcodeScanner.Read(imagePath). O scanner é a interface de usuário da câmera. Se o seu código de barras estiver em uma fatura em PDF armazenada em um servidor, o Scanbot não poderá ajudar. Isso não é uma crítica, mas sim uma descrição da arquitetura do sistema. O SDK Scanbot é um controle de câmera que envolve APIs de digitalização nativas iOS, Android e UWP/WinUI 3 em um componente de visor. ScanbotSDKMain.Barcode.StartScannerAsync(configuration) entrega o controle para uma experiência de câmera em tela cheia, o usuário aponta o dispositivo para um código de barras, o SDK o detecta no feed de vídeo ao vivo, e o resultado retorna ao seu aplicativo. A comparação é relevante porque o nome do pacote NuGet — ScanbotBarcodeSDK.MAUI — e a categoria do produto — "SDK de código de barras" — podem levar os desenvolvedores a avaliá-lo para processamento de documentos no lado do servidor, aplicativos desktop WPF ou APIs ASP.NET Core. Este artigo explica a diferença arquitetônica entre as duas ferramentas e para que cada uma é construída.
Entendendo o SDK do Scanbot
Scanbot SDK é um SDK comercial de escaneamento de código de barras desenvolvido pela doo GmbH. Sua principal oferta .NET é ScanbotBarcodeSDK.MAUI (v8.0.0), um pacote que tem como alvo net9.0-android e net9.0-ios. Um pacote separado, Scanbot.BarcodeSDK.Windows (v7.0.0), abrange aplicativos desktop UWP e WinUI 3 no Windows 10 1809+ (x64) com uma câmera de autofoco. Todos os alvos suportados são vinculados à câmera — o SDK não será resolvido contra um aplicativo de console, uma biblioteca de classes, um projetoASP.NET Coreou um aplicativo MAUI direcionado ao macOS.
O Scanbot foi projetado como um produto que prioriza a câmera. Toda a sua interface de API é orientada para a experiência do visor ao vivo: os objetos de configuração controlam a aparência da interface do usuário da câmera, os formatos que o pipeline de vídeo ao vivo monitora e como o feedback é fornecido ao usuário. A biblioteca entrega um componente de escaneamento para iOS, Android e Windows (UWP/WinUI 3) em aplicativos de consumo e empresariais.
- Plataforma de destino principal: iOS e Android via .NET MAUI, além de UWP/WinUI 3 no Windows 10 1809+ via o pacote
Scanbot.BarcodeSDK.Windowsseparado; Alvos domacOS MAUInão são suportados - Modelo de entrada: Exclusivamente feed de vídeo ao vivo da câmera do dispositivo — não existem sobrecargas para caminho de arquivo, fluxo ou matriz de bytes.
- Design da API:
ScanbotSDKMain.Barcode.StartScannerAsync(configuration)entrega o controle para uma experiência de câmera em tela cheia e retorna um resultado comIsSuccesse uma coleçãoValue.Items. - Recursos da interface do usuário da câmera: visor em tempo real com sobreposição da região de varredura, controle da lanterna, configuração da proporção da imagem, feedback de áudio e tátil e bloqueio de orientação.
- Formatos suportados: Mais de 20 formatos unidimensionais (Código 128, EAN-13, UPC e outros) e diversos formatos bidimensionais (QR, DataMatrix, PDF417, Aztec)
- Sem processamento de arquivos: Não há mecanismo para ler um código de barras de um arquivo de imagem salvo, um fluxo de dados ou um documento PDF.
- Sem geração de código de barras: o SDK lê códigos de barras; não os produz
- Modelo de licenciamento: Taxa fixa anual; O custo anual é fixo, independentemente do volume de digitalizações.
- Escopo do Tipo de Projeto: Os pacotes NuGet suportados têm como alvo os runtimes vinculados à câmera (MAUI iOS/Android e UWP/WinUI 3); console, biblioteca de classes, ASP.NET Core, WPF, WinForms, Azure Functions e hosts de servidor Docker estão fora desse conjunto de alvos
Arquitetura do Pipeline da Câmera
A arquitetura do Scanbot requer inicialização na abertura do aplicativo, seguida por uma chamada de digitalização controlada pela câmera. O método do scanner requer um BarcodeScannerScreenConfiguration porque toda a operação é dirigida pela câmera:
using ScanbotSDK.MAUI;
using ScanbotSDK.MAUI.Barcode;
// In MauiProgram.cs — initialization required before any scan
// ScanbotSDKMain.Initialize(new SdkConfiguration {
// LicenseKey = "YOUR-SCANBOT-LICENSE-KEY",
// LoggingEnabled = false
// }, builder);
// Configure scanner appearance and behavior
var configuration = new BarcodeScannerScreenConfiguration
{
UseCase = new SingleScanningMode()
};
// Open full-screen camera scanner — UI takes over the entire screen
var result = await ScanbotSDKMain.Barcode.StartScannerAsync(configuration);
if (result.IsSuccess)
{
foreach (var item in result.Value.Items)
Console.WriteLine($"{item.Barcode.Format}: {item.Barcode.Text}");
}
using ScanbotSDK.MAUI;
using ScanbotSDK.MAUI.Barcode;
// In MauiProgram.cs — initialization required before any scan
// ScanbotSDKMain.Initialize(new SdkConfiguration {
// LicenseKey = "YOUR-SCANBOT-LICENSE-KEY",
// LoggingEnabled = false
// }, builder);
// Configure scanner appearance and behavior
var configuration = new BarcodeScannerScreenConfiguration
{
UseCase = new SingleScanningMode()
};
// Open full-screen camera scanner — UI takes over the entire screen
var result = await ScanbotSDKMain.Barcode.StartScannerAsync(configuration);
if (result.IsSuccess)
{
foreach (var item in result.Value.Items)
Console.WriteLine($"{item.Barcode.Format}: {item.Barcode.Text}");
}
Imports ScanbotSDK.MAUI
Imports ScanbotSDK.MAUI.Barcode
' In MauiProgram.vb — initialization required before any scan
' ScanbotSDKMain.Initialize(New SdkConfiguration With {
' .LicenseKey = "YOUR-SCANBOT-LICENSE-KEY",
' .LoggingEnabled = False
' }, builder)
' Configure scanner appearance and behavior
Dim configuration As New BarcodeScannerScreenConfiguration With {
.UseCase = New SingleScanningMode()
}
' Open full-screen camera scanner — UI takes over the entire screen
Dim result = Await ScanbotSDKMain.Barcode.StartScannerAsync(configuration)
If result.IsSuccess Then
For Each item In result.Value.Items
Console.WriteLine($"{item.Barcode.Format}: {item.Barcode.Text}")
Next
End If
O SDK processa quadros de vídeo ao vivo em tempo real, destaca os códigos de barras detectados no visor e retorna quando um código de barras é confirmado ou quando o usuário cancela. O objeto de configuração controla a aparência da interface do usuário da câmera, não o comportamento de processamento. Esse é o modelo completo.
Entendendo o IronBarcode
IronBarcode é uma biblioteca comercial .NET para leitura e geração de códigos de barras, desenvolvida pela Iron Software. Ele opera com base em um modelo de processamento de arquivos: as fontes de entrada são caminhos de arquivos, fluxos, matrizes de bytes e documentos PDF. Não há interface de câmera e não há necessidade de hardware móvel. A biblioteca funciona em todos os tipos de projetos .NET .
O método estático BarcodeReader.Read() do IronBarcode aceita qualquer fonte que o código chamador forneça, independentemente de como essa fonte foi produzida. Um arquivo carregado via HTTP, um PDF em disco, uma imagem do armazenamento de blobs ou uma matriz de bytes decodificada de uma string base64 são todos entradas equivalentes. A biblioteca retorna uma coleção de resultados decodificados, cada um contendo o valor do código de barras, o formato e o número da página, quando aplicável.
- Fontes de entrada: Caminhos de arquivos, fluxos de dados, matrizes de bytes e documentos PDF (análise nativa de PDF, não extração de imagens)
- Tipos de projeto suportados: Aplicativos de console, ASP.NET Core, WPF, WinForms, Blazor Server, Azure Functions, AWS Lambda, Docker, Serviços do Windows, .NET MAUI (todos os destinos, incluindo Windows e macOS) e .NET Framework 4.6.2 ou superior.
- Geração de código de barras: Produz códigos de barras como imagens ou incorporados em documentos HTML e PDF.
- Cobertura de formatos: Mais de 30 formatos unidimensionais e cinco formatos bidimensionais, incluindoQR, DataMatrix, PDF417, Aztece MaxiCode.
- Melhorias na leitura: correção de erros baseada em aprendizado de máquina e recuperação de códigos de barras danificados para imagens complexas do mundo real.
- Objeto de Configuração:
BarcodeReaderOptionscontrola o comportamento do processamento (velocidade, detecção de múltiplos códigos de barras) em vez da aparência da UI da câmera. - Modelo de licenciamento: Compra única perpétua em quatro níveis (Lite US$ 749, Plus US$ 1.499, Professional $ 2.999, Ilimitado US$ 5.999); Não é necessária renovação anual.
Comparação de recursos
A tabela a seguir destaca as principais diferenças entre o SDK da Scanbot e o IronBarcode:
| Recurso | SDK Scanbot | IronBarcode |
|---|---|---|
| Principal Caso de Uso | Leitura de código de barras ao vivo por câmera em dispositivos móveis | Leitura e geração de códigos de barras em arquivos e documentos |
| Modelo de entrada | Somente a imagem da câmera do dispositivo | Caminho do arquivo, fluxo, matriz de bytes, PDF |
| Suporte da plataforma | iOS/Android MAUI e UWP/WinUI 3 (vinculado à câmera) | Todas as plataformas .NET e tipos de projeto |
| Geração de código de barras | Não | Sim |
| Extração de código de barras em PDF | Não | Sim |
| Modelo de licenciamento | Taxa fixa anual | Uma vez perpétuo |
| Interface do usuário da câmera ao vivo | Sim — componente do visor polido | Não (use o MediaPicker para capturar fotos) |
Comparação Detalhada de Recursos
| Recurso | SDK Scanbot | IronBarcode |
|---|---|---|
| Leitura | ||
| Entrada a partir do caminho do arquivo | Não | Sim |
| Entrada do fluxo | Não | Sim |
| Entrada de um array de bytes | Não | Sim |
| Extração de código de barras PDF | Não | Sim |
| Visor da câmera ao vivo | Sim | Não |
| Varredura de quadros em tempo real | Sim | Não |
| Detecção automática de formato | Sim | Sim |
| Correção de erros de aprendizado de máquina | Não | Sim |
| Recuperação de código de barras danificado | Não | Sim |
| contagem de formato 1D | 20+ | 30+ |
| contagem de formato 2D | QR, DataMatrix, PDF417, Aztec | QR, DataMatrix, PDF417, Aztec, MaxiCode |
| Geração | ||
| Geração de código de barras | Não | Sim |
| Plataforma | ||
| iOS PRINCIPAL | Sim | Sim |
| Android MAUI | Sim | Sim |
| Windows MAUI | Não | Sim |
| macOS MAUI | Não | Sim |
| UWP / WinUI 3 (com câmera) | Sim (pacote separado do Windows) | Sim |
| Aplicativo de console | Não | Sim |
| ASP.NET Core | Não | Sim |
| Servidor Blazor | Não | Sim |
| Aplicação WPF | Não | Sim |
| Aplicativo WinForms | Não | Sim |
| Azure Functions | Não | Sim |
| AWS Lambda | Não | Sim |
| Docker / Linux | Não | Sim |
| Serviço do Windows | Não | Sim |
| .NET Framework 4.6.2+ | Não | Sim |
| Licenciamento | ||
| Modelo de licença | Taxa fixa anual | Uma vez perpétuo |
| Preço publicado | Entre em contato com vendas | Sim (US$ 749 a US$ 5.999) |
| Preços por volume | Não aplicável (taxa fixa) | N/A (níveis perpétuos) |
Arquitetura: Pipeline da Câmera vs. Processamento de Arquivos
A diferença mais significativa entre o SDK Scanbot e o IronBarcode não reside em funcionalidades específicas, mas sim em uma diferença arquitetônica fundamental na forma como cada biblioteca concebe sua entrada de dados.
Abordagem do SDK Scanbot
A arquitetura do Scanbot é construída em torno de um pipeline de câmera nativo. Quando ScanbotSDKMain.Barcode.StartScannerAsync(configuration) é chamado, a biblioteca entrega o controle para uma experiência de câmera em tela cheia alimentada pelas APIs de câmera nativa do dispositivo no iOS, Android ou Windows. A biblioteca processa continuamente quadros de vídeo ao vivo, aplica a detecção de código de barras a cada quadro e retorna o controle ao aplicativo que fez a chamada quando um código de barras é confirmado ou o usuário dispensa o scanner. Não modelo Scanbot, não existe o conceito de imagem estática — a entrada é sempre um fluxo de quadros de vídeo ao vivo da câmera do dispositivo.
Este design produz uma experiência de escaneamento com códigos de barras em tempo real destacados no visor, região de escaneamento configurável com controle de proporção, alternância de lanterna, feedback de áudio e tátil, e bloqueio de orientação. Estes são recursos de interface gráfica construídos para o caso de uso da câmera. A desvantagem é que a biblioteca é inseparável do hardware da câmera e do sistema operacional que a controla.
Abordagem do IronBarcode
O IronBarcode aceita qualquer representação binária de uma imagem contendo um código de barras e retorna os resultados decodificados pelo mesmo método estático, independentemente de como a imagem foi obtida:
// Install: dotnet add package BarCode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// From a file path — works in any project type
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
Console.WriteLine($"{result.Value} ({result.Format})");
// From a PDF — reads all barcodes on all pages
var pdfResults = BarcodeReader.Read("invoice.pdf");
foreach (var result in pdfResults)
Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
// From a stream — useful for HTTP file uploads
using var stream = File.OpenRead("document.pdf");
var streamResults = BarcodeReader.Read(stream);
// With processing options
var options = new BarcodeReaderOptions { Speed = ReadingSpeed.Balanced };
var configuredResults = BarcodeReader.Read("image.png", options);
// Install: dotnet add package BarCode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// From a file path — works in any project type
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
Console.WriteLine($"{result.Value} ({result.Format})");
// From a PDF — reads all barcodes on all pages
var pdfResults = BarcodeReader.Read("invoice.pdf");
foreach (var result in pdfResults)
Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
// From a stream — useful for HTTP file uploads
using var stream = File.OpenRead("document.pdf");
var streamResults = BarcodeReader.Read(stream);
// With processing options
var options = new BarcodeReaderOptions { Speed = ReadingSpeed.Balanced };
var configuredResults = BarcodeReader.Read("image.png", options);
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
' From a file path — works in any project type
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
Console.WriteLine($"{result.Value} ({result.Format})")
Next
' From a PDF — reads all barcodes on all pages
Dim pdfResults = BarcodeReader.Read("invoice.pdf")
For Each result In pdfResults
Console.WriteLine($"Page {result.PageNumber}: {result.Value}")
Next
' From a stream — useful for HTTP file uploads
Using stream = File.OpenRead("document.pdf")
Dim streamResults = BarcodeReader.Read(stream)
End Using
' With processing options
Dim options = New BarcodeReaderOptions With {.Speed = ReadingSpeed.Balanced}
Dim configuredResults = BarcodeReader.Read("image.png", options)
A mesma chamada é executada em um aplicativo de console, um controladorASP.NET Core, uma Função do Azure, um formulário WPF ou uma página MAUI. O IronBarcodelê códigos de barras de PDFs nativamente — não como imagens extraídas de PDFs, mas analisando diretamente a estrutura do PDF e encontrando códigos de barras em cada página.
Cobertura da plataforma e da implantação
O escopo da plataforma do SDK Scanbot é definido pelos destinos suportados pelo seu pacote NuGet . O escopo do IronBarcode corresponde ao próprio ambiente de execução do .NET .
Abordagem do SDK Scanbot
O pacote Scanbot MAUI tem como alvo net9.0-android e net9.0-ios. Um projeto .NET MAUI Application que declara apenas esses dois destinos será construído com sucesso. Não entanto, quando net9.0-maccatalyst ou um destino MAUI do Windows é adicionado a TargetFrameworks, a referência ao pacote Scanbot MAUI falha ao resolver nesses destinos. Isso não é um problema de configuração — o pacote MAUI não fornece assemblies para MAUI no Windows ou macOS. O desktop do Windows é coberto pelo pacote Scanbot.BarcodeSDK.Windows separado para aplicativos UWP/WinUI 3 com uma câmera de autofoco.
O resultado é que o conjunto de pacotes .NET do Scanbot tem como alvo MAUI móvel e UWP/WinUI 3 no desktop, em vez de tipos de projetos de servidor ou desktop sem câmera.
Abordagem do IronBarcode
O IronBarcode é distribuído como um único pacote NuGet que funciona corretamente em todos os tipos de projetos .NET e frameworks de destino:
# Same package, same API — works in ASP.NET Core, WPF, console, MAUI, Azure Functions
dotnet add package BarCode
# Same package, same API — works in ASP.NET Core, WPF, console, MAUI, Azure Functions
dotnet add package BarCode
Para aplicações MAUI que também têm como alvo o Windows ou o macOS , o IronBarcode suporta todos os quatro destinos MAUI a partir de uma única referência de pacote, sem necessidade de configuração condicional à plataforma. As equipes que estão construindo um projeto MAUI que visa iOS, Android e Windows podem adicionar o IronBarcode uma vez e usar BarcodeReader.Read() em todas as três plataformas sem modificação.
Padrões de integração MAUI
Ambas as bibliotecas podem ser usadas em projetos .NET MAUI , mas o padrão de integração difere significativamente com base no modelo de entrada de cada biblioteca.
Abordagem do SDK Scanbot
Em um projeto MAUI voltado para iOS e Android, o Scanbot fornece um visor de câmera nativo incorporado ao fluxo de navegação do aplicativo. A chamada ScanbotSDKMain.Barcode.StartScannerAsync() apresenta o scanner em tela cheia, e o resultado retorna para a página chamadora quando o usuário completa ou dispensa a digitalização. Essa integração dá ao aplicativo móvel uma interface de escaneamento que parece nativa da plataforma.
A limitação surge quando o projeto se expande. Adicionar um destino macOS ou um destino MAUI do Windows quebra a compilação nessas plataformas (o desktop do Windows é tratado em vez disso pelo pacote Scanbot.BarcodeSDK.Windows separado para aplicativos UWP/WinUI 3). Adicionar um componente de servidor sem cabeça que precisa de processamento de código de barras exige uma biblioteca separada — a dependência do Scanbot não pode acompanhar o projeto em ASP.NET Core, Azure Functions ou Docker.
Abordagem do IronBarcode
Em um projeto MAUI, o IronBarcode funciona com o MediaPicker da plataforma para capturar fotos e ler códigos de barras das imagens resultantes. O fluxo de trabalho de digitalização utiliza a câmera do sistema em vez de um visor personalizado:
// Works on iOS, Android, Windows, andmacOS MAUItargets
// NuGet: dotnet add package BarCode
using IronBarCode;
private async void ScanButton_Clicked(object sender, EventArgs e)
{
var photo = await MediaPicker.CapturePhotoAsync();
if (photo == null) return;
using var stream = await photo.OpenReadAsync();
using var ms = new MemoryStream();
await stream.CopyToAsync(ms);
var results = BarcodeReader.Read(ms.ToArray());
foreach (var result in results)
await DisplayAlert("Scanned", $"{result.Format}: {result.Value}", "OK");
}
// Works on iOS, Android, Windows, andmacOS MAUItargets
// NuGet: dotnet add package BarCode
using IronBarCode;
private async void ScanButton_Clicked(object sender, EventArgs e)
{
var photo = await MediaPicker.CapturePhotoAsync();
if (photo == null) return;
using var stream = await photo.OpenReadAsync();
using var ms = new MemoryStream();
await stream.CopyToAsync(ms);
var results = BarcodeReader.Read(ms.ToArray());
foreach (var result in results)
await DisplayAlert("Scanned", $"{result.Format}: {result.Value}", "OK");
}
Imports IronBarCode
Imports System.IO
Imports System.Threading.Tasks
Private Async Sub ScanButton_Clicked(sender As Object, e As EventArgs)
Dim photo = Await MediaPicker.CapturePhotoAsync()
If photo Is Nothing Then Return
Using stream = Await photo.OpenReadAsync()
Using ms As New MemoryStream()
Await stream.CopyToAsync(ms)
Dim results = BarcodeReader.Read(ms.ToArray())
For Each result In results
Await DisplayAlert("Scanned", $"{result.Format}: {result.Value}", "OK")
Next
End Using
End Using
End Sub
A vantagem é a sobreposição do visor em tempo real. O usuário visualiza a interface da câmera do sistema em vez de uma região de digitalização personalizada, o que é adequado para aplicações comerciais onde apontar e capturar é suficiente. O tutorial sobre o leitor de código de barras .NET MAUI aborda o padrão de integração MAUI completo para dispositivos iOS e Android , incluindo o gerenciamento de permissões e a configuração do projeto.
Modelo de licenciamento
O SDK da Scanbot e o IronBarcode utilizam estruturas de licenciamento comercial fundamentalmente diferentes.
Abordagem Scanbot
A Scanbot opera com um modelo de taxa fixa anual. O custo anual da licença não é medido pelo volume de escaneamentos. Isso proporciona um orçamento anual previsível para equipes com implantações estáveis exclusivamente em dispositivos móveis. Para obter o preço exato, é necessário entrar em contato com a equipe de vendas da Scanbot; Os dados publicados não estão disponíveis. A obrigação de renovação anual significa que a licença representa um custo operacional contínuo.
Abordagem do IronBarcode
O IronBarcode é vendido como uma compra única perpétua em quatro níveis: Lite por US$ 749, Plus por US$ 1.499, Professional por US$ 2.999 e Unlimited por US$ 5.999. Não há necessidade de renovação anual para o uso contínuo da versão adquirida. As atualizações de software durante o período de licença estão incluídas. Os preços são publicados no site da Iron Software, sem necessidade de uma conversa com um vendedor.
Referência de Mapeamento de API
As equipes que avaliam a diferença arquitetônica entre as duas bibliotecas acharão este mapeamento útil para entender as equivalências conceituais:
| SDK Scanbot | IronBarcode |
|---|---|
ScanbotSDKMain.Initialize(new SdkConfiguration { LicenseKey = "..." }, builder) |
IronBarCode.License.LicenseKey = "key" |
new BarcodeScannerScreenConfiguration { UseCase = new SingleScanningMode() } |
new BarcodeReaderOptions() |
ScanbotSDKMain.Barcode.StartScannerAsync(configuration) |
BarcodeReader.Read(path / stream / bytes) |
result.IsSuccess |
Verifique results.Any() ou results.FirstOrDefault() != null. |
result.Value.Items |
Retorno do valor de BarcodeReader.Read(). |
item.Barcode.Format |
result.Format (IronBarCode.BarcodeEncoding) |
item.Barcode.Text |
result.Value |
BarcodeFormat.Code128 |
BarcodeEncoding.Code128 |
BarcodeFormat.QrCode |
BarcodeEncoding.QRCode |
BarcodeFormat.Ean13 |
BarcodeEncoding.EAN13 |
| Configuração da região de escaneamento/câmera e proporção. | Não há equivalente — o enquadramento da imagem é feito pelo MediaPicker. |
| Configuração do flash/lanterna da câmera. | Não há equivalente — use as opções do MediaPicker. |
| Entrada somente para câmera | Caminho do arquivo, fluxo, matriz de bytes ou PDF |
| iOS/Android MAUI and UWP/WinUI 3 | Todas as plataformas .NET |
Quando as equipes consideram migrar do SDK Scanbot para o IronBarcode
Diversas situações costumam levar as equipes de desenvolvimento a avaliar o IronBarcode como substituto ou complemento ao SDK Scanbot.
Processamento do lado do servidor e do backend
Um aplicativo móvel desenvolvido com o Scanbot geralmente existe em conjunto com um componente do lado do servidor que lida com uploads de documentos, trabalhos em lote ou endpoints de API. Quando esse componente do lado do servidor precisa de processamento de código de barras — extrair códigos de barras de PDFs carregados, validar valores de código de barras em documentos recebidos ou processar dados de código de barras de anexos de imagem — o Scanbot não está disponível. O pacote não compila em ASP.NET Core, Azure Functions, aplicativos de console ou qualquer projeto que não seja MAUI. Nessa situação, as equipes se veem obrigadas a manter uma dependência de código de barras para dispositivos móveis, além de uma solução separada de código de barras para servidores, ou a avaliar se o IronBarcode pode abranger ambas as funções em um único pacote.
Requisitos de aplicativos para desktop
A proposta de valor do MAUI reside frequentemente na sua abrangência multiplataforma: uma única base de código que abrange iOS, Android e Windows. Quando o alvo MAUI do Windows entra no roteiro — seja a partir de requisitos iniciais ou como uma adição posterior — o pacote ScanbotBarcodeSDK.MAUI falha ao resolver nesse alvo, porque o Scanbot cobre o Windows através de um pacote separado UWP/WinUI 3 (Scanbot.BarcodeSDK.Windows) em vez de através do MAUI Windows. Equipes que desejam um único caminho de construção do Windows dentro de um projeto MAUI com vários alvos, ou que precisam de um componente Windows sem interface (como um Serviço do Windows), não terão isso do conjunto de pacotes do Scanbot.IronBarcode fornece um único pacote que se resolve no alvo MAUI do Windows e também roda em contextos de desktop sem interface e servidor.
Fluxos de trabalho de PDF e documentos
Aplicações que migram da digitalização em tempo real para a automação de documentos encontram um limite de capacidade com o Scanbot. Ler códigos de barras de uma fatura em PDF, extrair códigos de rastreamento de uma imagem digitalizada de etiqueta de remessa ou processar dados de código de barras de um documento arquivado situam-se fora do modelo de entrada do Scanbot, que é construído em torno de um fluxo de câmera ao vivo. O IronBarcode lida com todas essas entradas baseadas em arquivos de forma nativa. O mesmo pacote que é executado no aplicativo móvel MAUI pode extrair códigos de barras de documentos PDF em um processo em segundo plano, sem quaisquer dependências adicionais.
Custos de licenciamento previsíveis
Os custos anuais de renovação exigem uma reavaliação a cada ciclo de renovação. Equipes que começaram a usar o Scanbot em uma implantação móvel de pequena escala e expandiram para uma implantação mais ampla com mais usuários ou plataformas podem achar a taxa anual menos vantajosa à medida que o escopo aumenta. O modelo de licença perpétua única da IronBarcode elimina a obrigação de renovação. As equipes que realizam avaliações de renovação de licenças frequentemente consideram se uma compra única se alinha melhor com seu planejamento de custos a longo prazo, principalmente quando o escopo expandido do projeto inclui plataformas de servidor ou desktop que, de qualquer forma, não estão cobertas pelo Scanbot.
Considerações Comuns de Migração
As equipes que migrarem do SDK Scanbot para o IronBarcode devem se preparar para diversas diferenças técnicas que surgirão durante a transição.
Não há equivalente ao visor ao vivo.
O visor de câmera em tempo real do Scanbot — com sobreposição da região de digitalização, detecção contínua e feedback tátil — não tem equivalente direto no IronBarcode. O padrão de substituição usa o MediaPicker.CapturePhotoAsync() do MAUI para abrir a câmera do sistema, capturar uma foto e retornar a imagem para processamento. A experiência do usuário consiste em um fluxo de captura de fotos, e não em um fluxo contínuo de digitalização. Para aplicações comerciais (inventário, logística, processamento de documentos), essa distinção raramente é significativa. Para aplicativos voltados ao consumidor, nos quais a sobreposição em tempo real é fundamental para a experiência do produto, essa é uma diferença genuína na experiência do usuário que deve ser avaliada antes de se comprometer com a migração.
Padrão de retorno de chamada de evento para retorno direto
O ScanbotSDKMain.Barcode.StartScannerAsync() do Scanbot é assíncrono e retorna um resultado com um indicador IsSuccess e uma coleção Value.Items. O BarcodeReader.Read() do IronBarcode retorna uma coleção diretamente — não há um objeto wrapper com um campo de status. A verificação de sucesso muda de result.IsSuccess para results.Any() ou uma verificação de nulo em results.FirstOrDefault().
Alterar o namespace do Enum Formatar
O enum BarcodeFormat do Scanbot (por exemplo, BarcodeFormat.Code128) e o enum BarcodeEncoding do IronBarcode(por exemplo, BarcodeEncoding.Code128) contêm membros semelhantes, mas são tipos diferentes em espaços de nomes diferentes. O código que armazena ou compara valores de formato por tipo enum requer que a referência de tipo seja atualizada. Comparações de strings baseadas na saída de .ToString() são geralmente compatíveis, uma vez que os nomes dos membros são semelhantes, mas comparações de tipos explícitas de enum requerem atualização para valores BarcodeEncoding.
Adições de compilação do Windows
Se o pacote Scanbot estava causando falhas na compilação do MAUI do Windows antes da migração, removê-lo resolve esses problemas. Após adicionar o IronBarcode, verifique se os recursos específicos do Windows — caixas de diálogo de seleção de arquivos, caminhos de arquivos locais, permissões do Windows — são tratados adequadamente no código do aplicativo MAUI, uma vez que estes diferem dos padrões de acesso a arquivos do iOS e do Android.
Funcionalidades adicionais do IronBarcode
Além dos cenários principais abordados nesta comparação, o IronBarcode oferece recursos que se tornam relevantes à medida que os projetos se expandem:
- Geração de códigos de barras: Produza códigos de barras em todos os principais formatos unidimensionais e bidimensionais como arquivos de imagem, fluxos de dados ou conteúdo incorporado em documentos HTML e PDF.
- Processamento de documentos com múltiplos códigos de barras: Leia todos os códigos de barras em todas as páginas de um PDF com várias páginas em uma única chamada, com cada resultado contendo o número da página em que foi encontrado. Correção de erros por aprendizado de máquina: Recupera códigos de barras de imagens danificadas, parcialmente obscurecidas ou com baixo contraste que os algoritmos de detecção padrão não conseguem decodificar.
- Processamento de imagens em lote: Processe matrizes de caminhos ou fluxos de imagens em uma única operação para fluxos de trabalho de documentos de alto rendimento.
- Ajustes do BarcodeReaderOptions: Controle a velocidade de leitura, a detecção de múltiplos códigos de barras, a filtragem de formatos e o pré-processamento de imagens para equilibrar a taxa de transferência e a precisão para casos de uso específicos.
- Integração com iOS MAUI : Suporte completo para leitura de código de barras em aplicativos iOS PRINCIPAL usando o padrão MediaPicker.
- Integração com Android MAUI : Suporte completo para leitura de código de barras em aplicativosAndroid MAUIcom a mesma API do iOS.
Compatibilidade com .NET e Preparação para o Futuro
O IronBarcode é compatível com .NET 6, .NET 7, .NET 8 e .NET 9, bem como com o .NET Framework 4.6.2 e versões posteriores. A biblioteca recebe atualizações regulares alinhadas com o ciclo de lançamentos do .NET , garantindo a compatibilidade com o .NET 10, previsto para o final de 2026, e com versões futuras. Como o IronBarcode é uma biblioteca de processamento de arquivos e não um SDK de câmera específico para uma plataforma, ele não depende das APIs do sistema operacional móvel nem dos recursos de hardware, o que significa que sua compatibilidade cresce com o ecossistema .NET, em vez de ficar limitado aos ciclos de suporte da plataforma móvel.
Conclusão
O SDK Scanbot e o IronBarcode ocupam diferentes categorias de produtos que compartilham o rótulo "SDK de código de barras". Scanbot é um componente de escaneamento de câmera que oferece uma experiência de visualização ao vivo para iOS e Android (via MAUI) e Windows (via UWP/WinUI 3).IronBarcode é uma biblioteca de processamento de arquivos e documentos que lê e gera códigos de barras em toda a gama de tipos de projetos .NET e destinos de implantação. A comparação diz respeito ao escopo e à arquitetura, não à qualidade dentro do domínio pretendido de cada biblioteca.
O SDK Scanbot é forte dentro de seu escopo definido. Para aplicações onde o usuário aponta diretamente a câmera do dispositivo para um código de barras físico e espera feedback visual em tempo real — varejo, bilhetes, pesquisa de armazém — o pipeline de câmera e o componente de visualização do Scanbot são preparados especificamente para esse modelo de interação. Se o uso for limitado a alvos vinculados à câmera (iOS, Android, e UWP/WinUI 3 Windows), a experiência de escaneamento ao vivo é central para o produto, e a taxa fixa anual se encaixa no orçamento, o Scanbot é uma escolha razoável para esse uso.
O IronBarcode é apropriado quando a necessidade de processamento de código de barras vai além do cenário de câmera ao vivo. Processamento de documentos no servidor, endpointsASP.NET Coreque aceitam uploads de arquivos, aplicativos desktop no Windows ou macOS, Azure Functions acionadas pelo armazenamento de blobs, projetos MAUI de múltiplos destinos que incluem plataformas desktop e trabalhos de processamento em lote de PDF estão todos dentro do escopo nativo do IronBarcode. O pacote único instala sem configuração condicional de plataforma e fornece a mesma chamada BarcodeReader.Read(), independentemente de o código rodar em um dispositivo móvel, um servidor ou um desktop.
Para equipes cujas necessidades abrangem tanto a digitalização ao vivo por câmera de dispositivos móveis quanto o processamento de arquivos ou servidores, a solução arquiteturalmente mais limpa é usar o Scanbot para a interface do usuário da câmera móvel e o IronBarcode para todo o resto. O custo dessa abordagem consiste em duas dependências de código de barras e dois contratos de licença. Para equipes dispostas a aceitar a câmera do sistema em vez de um visor personalizado para a interação de digitalização móvel, o IronBarcode sozinho pode cobrir todo o escopo do projeto — desde o aplicativo móvel MAUI até a API do servidor e o aplicativo complementar para desktop Windows — com um único pacote e uma única licença.
Perguntas frequentes
O que é o Scanbot SDK?
O Scanbot SDK é 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 o SDK da Scanbot e o IronBarcode?
O IronBarcode utiliza uma API estática e sem estado, que não requer gerenciamento de instâncias, enquanto o SDK da Scanbot 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 licenciamento do IronBarcode é mais fácil do que o do Scanbot SDK?
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 suportados pelo SDK Scanbot?
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 SDK do Scanbot?
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 Scanbot?
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 o Scanbot SDK e o 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 SDK da Scanbot para o IronBarcode?
A migração do SDK Scanbot 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 de 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()`.

