Scanbot SDK vs IronBarcode: Porównanie bibliotek kodów kreskowych C#
Scanbot SDK otwiera pełnoekranowy widok skanowania kodów barcode przy użyciu aparatu urządzenia. Nie ma metody BarcodeScanner.Read(imagePath). Skaner to interfejs użytkownika kamery. Jeśli BARCODE znajduje się na fakturze w formacie PDF na serwerze, Scanbot nie będzie w stanie pomóc. Nie jest to krytyka — to opis architektury. Scanbot SDK to kontroler kamery MAUI, który łączy natywne interfejsy API skanowania systemów iOS i Android w dopracowany komponent wizjera. ScanbotBarcodeSDK.BarcodeScanner.Open(configuration) przejmuje kontrolę nad trybem pełnoekranowym kamery, użytkownik kieruje urządzenie na BarCode, SDK wykrywa go w strumieniu wideo na żywo, a wynik wraca do aplikacji. Porównanie to ma znaczenie, ponieważ nazwa pakietu NuGet — ScanbotBarcodeSDK.MAUI — oraz kategoria produktu — "barcode SDK" — mogą skłonić programistów do rozważenia jego zastosowania w przetwarzaniu dokumentów po stronie serwera, aplikacjach desktopowych WPF lub interfejsach API .NET Core. W niniejszym artykułe wyjaśniono różnice architektoniczne między tymi dwoma narzędziami, rzeczywiste funkcje każdego z nich oraz sytuacje, w których IronBarcode obsługuje scenariusze, których Scanbot strukturalnie nie jest w stanie obsłużyć.
Zrozumienie Scanbot SDK
Scanbot SDK to komercyjny mobilny zestaw SDK do skanowania BarCodes opracowany przez firmę Scanbot GmbH. Oferta .NET to ScanbotBarcodeSDK.MAUI, pakiet skierowany do net8.0-android i net8.0-ios. SDK wymaga projektu .NET MAUI Application z <UseMaui>true</UseMaui> i celami mobilnymi w swoim TargetFrameworks. Nie będzie działać w przypadku aplikacji konsolowej, biblioteki klas, projektu .NET Core ani aplikacji MAUI przeznaczonej dla systemu Windows.
Scanbot został zaprojektowany jako produkt, w którym priorytetem jest aparat. Cała powierzchnia API jest zorientowana na doświadczenie podglądu na żywo: obiekty konfiguracyjne kontrolują wygląd interfejsu użytkownika kamery, formaty, na które monitoruje strumień wideo na żywo, oraz sposób przekazywania informacji zwrotnych użytkownikowi. Biblioteka zapewnia dopracowany komponent skanujący dla konsumenckich i Enterprise aplikacji mobilnych na systemy iOS i Android.
- Główna platforma docelowa: urządzenia mobilne z systemami iOS i Android poprzez framework .NET MAUI; Cele MAUI dla systemów Windows i macOS nie są obsługiwane
- Model wejściowy: Wyłącznie obraz z kamery urządzenia na żywo — nie ma przeciążenia ścieżką pliku, strumieniem ani tablicą bajtów
- Projekt API:
BarcodeScanner.Open(configuration)przekazuje kontrolę do trybu pełnoekranowego kamery i zwracaOperationResult, gdy użytkownik potwierdzi skanowanie lub anuluje - Funkcje interfejsu użytkownika aparatu: wizjer działający w czasie rzeczywistym z nakładką obszaru skanowania, sterowanie latarką, konfiguracja proporcji obrazu, informacja zwrotna dźwiękowa i haptyczna oraz blokada orientacji
- Obsługiwane formaty: ponad 20 formatów jednowymiarowych (Code 128, EAN-13, UPC i inne) oraz kilka formatów dwuwymiarowych (QR, DataMatrix, PDF417, Aztec)
- Brak przetwarzania plików: Nie ma mechanizmu odczytu BARCODE-a z zapisanego pliku graficznego, strumienia danych lub dokumentu PDF
- Brak generowania kodów kreskowych: SDK odczytuje kody kreskowe; it does not produce them
- Model licencyjny: roczna opłata ryczałtowa; the annual cost is fixed regardless of scan volume
- Ograniczenia dotyczące typu projektu: Nie będzie kompilować się w projektach konsolowych, bibliotekach klas, .NET Core, WPF, WinForms, Azure Functions ani projektach hostowanych w Dockerze
Architektura potoku przetwarzania obrazu z kamery
Architektura Scanbota wymaga inicjalizacji przy uruchomieniu aplikacji, a następnie wywołania skanowania za pomocą aparatu. Nie ma przeciążenia BarcodeScanner.Open(), które akceptuje ścieżkę do pliku lub strumień; sygnatura metody wymaga BarcodeScannerConfiguration, ponieważ cała operacja jest sterowana przez kamerę:
// In MauiProgram.cs or App.xaml.cs — initialization required before any scan
ScanbotSDK.Initialize(new ScanbotSDKConfiguration
{
LicenseKey = "YOUR-SCANBOT-LICENSE-KEY",
EnableLogging = false
});
// Configure accepted formats and camera appearance
var configuration = new BarcodeScannerConfiguration();
configuration.BarcodeFormats = new[]
{
BarcodeFormat.Code128,
BarcodeFormat.QrCode,
BarcodeFormat.Ean13
};
// Open full-screen camera scanner — UI takes over the entire screen
var result = await ScanbotBarcodeSDK.BarcodeScanner.Open(configuration);
if (result.Status == OperationResult.Ok)
{
foreach (var barcode in result.Barcodes)
Console.WriteLine($"{barcode.Format}: {barcode.Text}");
}
// In MauiProgram.cs or App.xaml.cs — initialization required before any scan
ScanbotSDK.Initialize(new ScanbotSDKConfiguration
{
LicenseKey = "YOUR-SCANBOT-LICENSE-KEY",
EnableLogging = false
});
// Configure accepted formats and camera appearance
var configuration = new BarcodeScannerConfiguration();
configuration.BarcodeFormats = new[]
{
BarcodeFormat.Code128,
BarcodeFormat.QrCode,
BarcodeFormat.Ean13
};
// Open full-screen camera scanner — UI takes over the entire screen
var result = await ScanbotBarcodeSDK.BarcodeScanner.Open(configuration);
if (result.Status == OperationResult.Ok)
{
foreach (var barcode in result.Barcodes)
Console.WriteLine($"{barcode.Format}: {barcode.Text}");
}
Imports System
' In MauiProgram.vb or App.xaml.vb — initialization required before any scan
ScanbotSDK.Initialize(New ScanbotSDKConfiguration With {
.LicenseKey = "YOUR-SCANBOT-LICENSE-KEY",
.EnableLogging = False
})
' Configure accepted formats and camera appearance
Dim configuration As New BarcodeScannerConfiguration()
configuration.BarcodeFormats = New BarcodeFormat() {
BarcodeFormat.Code128,
BarcodeFormat.QrCode,
BarcodeFormat.Ean13
}
' Open full-screen camera scanner — UI takes over the entire screen
Dim result = Await ScanbotBarcodeSDK.BarcodeScanner.Open(configuration)
If result.Status = OperationResult.Ok Then
For Each barcode In result.Barcodes
Console.WriteLine($"{barcode.Format}: {barcode.Text}")
Next
End If
SDK przetwarza klatki wideo na żywo w czasie rzeczywistym, podświetla wykryte kody kreskowe w wizjerze i zwraca wynik po potwierdzeniu kodu kreskowego lub anulowaniu przez użytkownika. Obiekt konfiguracyjny kontroluje wygląd interfejsu użytkownika kamery, a nie sposób przetwarzania. To jest kompletny model.
Zrozumienie IronBarcode
IronBarcode to komercyjna biblioteka .NET do odczytu i generowania kodów kreskowych, opracowana przez firmę Iron Software. Działa w modelu przetwarzania plików: źródłami wejściowymi są ścieżki do plików, strumienie, tablice bajtów i dokumenty PDF. Nie ma interfejsu użytkownika kamery ani wymagań dotyczących sprzętu mobilnego. Biblioteka działa w każdym typie projektu .NET.
Metoda statyczna BarcodeReader.Read() klasy IronBarcode akceptuje dowolne źródło dostarczone przez kod wywołujący, niezależnie od tego, w jaki sposób zostało ono wygenerowane. Plik przesłany przez HTTP, plik PDF na dysku, obraz z magazynu blobów lub tablica bajtów zdekodowana z ciągu base64 to równoważne dane wejściowe. Biblioteka zwraca zbiór zdekodowanych wyników, z których każdy zawiera wartość BARCODE, format oraz numer strony, jeśli ma to zastosowanie.
- Źródła danych wejściowych: ścieżki plików, strumienie, tablice bajtów i dokumenty PDF (natywne parsowanie plików PDF, a nie wyodrębnianie obrazów)
- Obsługiwane typy projektów: aplikacje konsolowe, ASP.NET Core, WPF, WinForms, Blazor Server, Azure Functions, AWS Lambda, Docker, usługi Windows, .NET MAUI (wszystkie platformy docelowe, w tym Windows i macOS) oraz .NET Framework 4.6.2+
- Generowanie kodów kreskowych: Tworzy kody kreskowe jako obrazy lub osadzone w dokumentach HTML i PDF
- Obsługa formatów: ponad 30 formatów jednowymiarowych i pięć formatów dwuwymiarowych, w tym QR, DataMatrix, PDF417, Aztec i MaxiCode
- Ulepszenia w zakresie odczytu: korekcja błędów oparta na uczeniu maszynowym oraz odzyskiwanie uszkodzonych BarCodes z trudnych obrazów pochodzących ze świata rzeczywistego
- Obiekt konfiguracyjny:
BarcodeReaderOptionskontroluje zachowanie przetwarzania (szybkość, wykrywanie wielu BARCODE-ów), a nie wygląd interfejsu użytkownika kamery - Model licencyjny: jednorazowy zakup na czas nieokreślony w czterech wersjach (Lite 749 USD, Plus 1499 USD, Professional 2999 USD, Unlimited 5999 USD); no annual renewal required
Porównanie funkcji
Poniższa tabela przedstawia podstawowe różnice między Scanbot SDK a IronBarcode:
| Funkcja | Scanbot SDK | IronBarcode |
|---|---|---|
| Główny przypadek użycia | Skanowanie BarCode na żywo za pomocą kamery w telefonie komórkowym | Odczytywanie i generowanie BarCodes plików i dokumentów |
| Model wejściowy | Tylko obraz z kamery urządzenia | Ścieżka do pliku, strumień, tablica bajtów, PDF |
| Obsługa platform | Tylko iOS i Android MAUI | Wszystkie platformy .NET i typy projektów |
| Generowanie kodów kreskowych | Nie | Tak |
| Ekstrakcja BarCodes z plików PDF | Nie | Tak |
| Model licencyjny | Roczna opłata ryczałtowa | Jednorazowa, wieczysta |
| Interfejs użytkownika kamery na żywo | Tak — dopracowany komponent wizjera | Nie (do robienia zdjęć użyj MediaPicker) |
Szczegółowe porównanie funkcji
| Funkcja | Scanbot SDK | IronBarcode |
|---|---|---|
| Czytanie | ||
| Dane wejściowe ze ścieżki pliku | Nie | Tak |
| Dane wejściowe ze strumienia | Nie | Tak |
| Dane wejściowe z tablicy bajtów | Nie | Tak |
| Pobieranie kodów kreskowych z plików PDF | Nie | Tak |
| Podgląd na żywo z kamery | Tak | Nie |
| Skanowanie ramek w czasie rzeczywistym | Tak | Nie |
| Automatyczne wykrywanie formatowania | Tak | Tak |
| Korekta błędów ML | Nie | Tak |
| Odzyskiwanie uszkodzonych kodów kreskowych | Nie | Tak |
| Liczba formatów 1D | 20+ | 30+ |
| Liczba formatów 2D | QR, DataMatrix, PDF417, Aztec | QR, DataMatrix, PDF417, Aztec, MaxiCode |
| Generacja | ||
| Generowanie BarCode'ów | Nie | Tak |
| Platforma | ||
| iOS MAUI | Tak | Tak |
| Android MAUI | Tak | Tak |
| Windows MAUI | Nie | Tak |
| macOS MAUI | Nie | Tak |
| Aplikacja konsolowa | Nie | Tak |
| ASP.NET Core | Nie | Tak |
| Blazor Server | Nie | Tak |
| Aplikacja WPF | Nie | Tak |
| Aplikacja WinForms | Nie | Tak |
| Azure Functions | Nie | Tak |
| AWS Lambda | Nie | Tak |
| Docker / Linux | Nie | Tak |
| Usługa Windows | Nie | Tak |
| .NET Framework 4.6.2+ | Nie | Tak |
| Licencjonowanie | ||
| Model licencji | Roczna opłata ryczałtowa | Jednorazowa, wieczysta |
| Opublikowane ceny | Skontaktuj się z działem sprzedaży | Tak (749–5999 USD) |
| Ceny hurtowe | Nie dotyczy (ryczałtowa opłata) | Nie dotyczy (poziomy bezterminowe) |
Architektura: potok kamerowy a przetwarzanie plików
Najważniejsza różnica między Scanbot SDK a IronBarcode nie polega na braku funkcji — jest to zasadnicza różnica architektoniczna w sposobie, w jaki każda biblioteka traktuje dane wejściowe.
Podejście Scanbot SDK
Architektura Scanbota opiera się na natywnym potoku kamery. Po wywołaniu BarcodeScanner.Open(configuration) biblioteka przekazuje kontrolę do trybu pełnoekranowego obsługi kamery, opartego na natywnych interfejsach API kamery urządzenia w systemach iOS i Android. Biblioteka w sposób ciągły przetwarza klatki wideo na żywo, stosuje wykrywanie BarCode do każdej klatki i zwraca kontrolę do aplikacji wywołującej po potwierdzeniu BarCode lub zamknięciu skanera przez użytkownika. W modelu Scanbot nie ma pojęcia statycznego obrazu — dane wejściowe to zawsze strumień klatek wideo na żywo z kamery urządzenia.
Ten projekt zapewnia doskonałe wrażenia podczas skanowania: BarCodes podświetlanych w czasie rzeczywistym w wizjerze, konfigurowalnego obszaru skanowania z kontrolą proporcji, przełącznika latarki, sygnałów dźwiękowych i dotykowych oraz blokady orientacji. Są to funkcje interfejsu użytkownika, w które firma Scanbot zainwestowała z myślą o zastosowaniu w mobilnych aparatach fotograficznych. Kompromisem jest to, że biblioteka jest nierozerwalnie związana ze sprzętem aparatu i mobilnym systemem operacyjnym, który go obsługuje.
Podejście IronBarcode
IronBarcode akceptuje dowolną reprezentację binarną obrazu zawierającego kod kreskowy i zwraca zdekodowane wyniki za pomocą tej samej metody statycznej, niezależnie od tego, w jaki sposób obraz został uzyskany:
// Install: dotnet add package IronBarcode
IronBarCode.License.LicenseKey = "YOUR-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 IronBarcode
IronBarCode.License.LicenseKey = "YOUR-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
Imports System.IO
' Install: dotnet add package IronBarcode
License.LicenseKey = "YOUR-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)
To samo wywołanie działa w aplikacji konsolowej, kontrolerze .NET Core, funkcji Azure, formularzu WPF lub stronie MAUI. IronBarcode odczytuje kody kreskowe z plików PDF w sposób natywny — nie jako obrazy wyodrębnione z plików PDF, ale poprzez bezpośrednią analizę struktury pliku PDF i wyszukiwanie kodów kreskowych na każdej stronie.
Zakres platform i wdrożeń
Zakres platformy Scanbot SDK jest określony przez cele obsługiwane przez pakiet NuGet. Zakres działania IronBarcode odpowiada samemu środowisku uruchomieniowemu .NET.
Podejście Scanbot SDK
Pakiet Scanbot jest skierowany do net8.0-android i net8.0-ios. Projekt .NET MAUI Application, który deklaruje tylko te dwa cele, zostanie pomyślnie skompilowany. Jednak gdy net8.0-windows lub net8.0-maccatalyst zostanie dodane do TargetFrameworks, odwołanie do pakietu Scanbot nie zostanie rozpoznane na tych platformach. Nie jest to kwestia konfiguracji — pakiet nie zawiera zestawów dla systemów Windows ani macOS. Błąd pojawia się podczas pierwszej próby kompilacji na komputerze stacjonarnym, a nie w momencie instalacji z NuGet.
To ograniczenie oznacza, że Scanbot jest strukturalnie niekompatybilny z projektami MAUI obsługującymi wiele platform, w tym platformy desktopowe, i nie może być używany w żadnym projekcie serwerowym lub desktopowym innym niż MAUI, niezależnie od wersji frameworka.
Podejście IronBarcode
IronBarcode jest dystrybuowany jako pojedynczy pakiet NuGet, który działa poprawnie we wszystkich typach projektów .NET i docelowych frameworkach:
// Same package, same API — works in ASP.NET Core, WPF, console, MAUI, Azure Functions
dotnet add package IronBarcode
// Same package, same API — works in ASP.NET Core, WPF, console, MAUI, Azure Functions
dotnet add package IronBarcode
W przypadku aplikacji MAUI, które są również przeznaczone na komputery stacjonarne z systemem Windows lub macOS, IronBarcode obsługuje wszystkie cztery platformy docelowe MAUI z poziomu jednego odwołania do pakietu, bez konieczności konfiguracji zależnej od platformy. Zespoły tworzące projekt MAUI przeznaczony dla systemów iOS, Android i Windows mogą dodać IronBarcode tylko raz i używać BarcodeReader.Read() na wszystkich trzech platformach bez modyfikacji.
Wzorce integracji MAUI
Obie biblioteki mogą być używane w projektach .NET MAUI, ale sposób integracji różni się znacznie w zależności od modelu wejściowego każdej biblioteki.
Podejście Scanbot SDK
W projekcie MAUI przeznaczonym dla systemów iOS i Android, Scanbot udostępnia natywny wizjer aparatu wbudowany w układ nawigacyjny aplikacji. Wywołanie BarcodeScanner.Open() uruchamia skaner pełnoekranowy, a wynik jest zwracany do strony wywołującej, gdy użytkownik zakończy lub zamknie skanowanie. Ta integracja zapewnia aplikacji mobilnej specjalistyczny interfejs użytkownika do skanowania, który wygląda jak natywny dla platformy.
Ograniczenie pojawia się, gdy projekt się rozszerza. Dodanie platformy docelowej Windows lub macOS do projektu MAUI powoduje przerwanie kompilacji na tych platformach. Dodanie komponentu po stronie serwera, który wymaga przetwarzania kodów barcode, wymaga osobnej biblioteki. Zależność od Scanbota nie może wykraczać poza systemy iOS i Android.
Podejście IronBarcode
W projekcie MAUI IronBarcode współpracuje z funkcją MediaPicker platformy w celu robienia zdjęć i odczytywania kodów kreskowych z uzyskanych obrazów. Proces skanowania wykorzystuje aparat systemówy zamiast niestandardowego wizjera:
// Works on iOS, Android, Windows, and macOS MAUI targets
// NuGet: dotnet add package IronBarcode
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, and macOS MAUI targets
// NuGet: dotnet add package IronBarcode
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
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
Cechą charakterystyczną jest nakładka na wizjer na żywo. Użytkownik widzi interfejs aparatu systemówego zamiast niestandardowego obszaru skanowania, co jest wystarczające w zastosowaniach biznesowych, gdzie wystarczy funkcja "wskazania i uchwycenia". Samouczek dotyczący skanera BARCODE .NET MAUI obejmuje pełny wzorzec integracji MAUI dla platform iOS i Android, w tym obsługę uprawnień i konfigurację projektu.
Model licencyjny
Scanbot SDK i IronBarcode wykorzystują zasadniczo różne struktury licencji komercyjnych.
Podejście Scanbot
Scanbot działa w oparciu o model rocznej opłaty ryczałtowej. Roczny koszt licencji jest stały, niezależnie od liczby skanów — czy to 100 skanów rocznie, czy 10 milionów skanów rocznie, opłata jest taka sama. Zapewnia to przewidywalne roczne budżetowanie dla zespołów korzystających wyłącznie ze stabilnych wdrożeń mobilnych. Aby uzyskać dokładną wycenę, należy skontaktować się z zespołem sprzedaży Scanbot; Opublikowane dane liczbowe nie są dostępne. Obowiązek corocznego odnawiania oznacza, że licencja stanowi stały koszt operacyjny.
Podejście IronBarcode
IronBarcode jest sprzedawany jako jednorazowy zakup na czas nieokreślony w czterech wersjach: Lite za 749 USD, Plus za 1499 USD, Professional za 2999 USD i Unlimited za 5999 USD. Nie ma wymogu corocznego odnawiania licencji w celu dalszego korzystania z zakupionej wersji. W cenie zawarte są aktualizacje oprogramowania w okresie obowiązywania licencji. Ceny są publikowane na stronie internetowej Iron Software bez konieczności prowadzenia rozmów handlowych.
Przewodnik po mapowaniu API
Zespoły oceniające różnice architektoniczne między tymi dwiema bibliotekami uznają to zestawienie za przydatne do zrozumieniuiuiuiuia równoważności koncepcji:
| Scanbot SDK | IronBarcode |
|---|---|
ScanbotSDK.Initialize(new ScanbotSDKConfiguration { LicenseKey = "..." }) |
IronBarCode.License.LicenseKey = "key" |
new BarcodeScannerConfiguration() |
new BarcodeReaderOptions() |
ScanbotBarcodeSDK.BarcodeScanner.Open(configuration) |
BarcodeReader.Read(path / stream / bytes) |
result.Status == OperationResult.Ok |
Sprawdź results.Any() lub results.FirstOrDefault() != null |
result.Barcodes |
Wartość zwracana przez BarcodeReader.Read() |
barcode.Format |
result.Format (IronBarCode.BarcodeEncoding) |
barcode.Text |
result.Value |
BarcodeFormat.Code128 |
BarcodeEncoding.Code128 |
BarcodeFormat.QrCode |
BarcodeEncoding.QRCode |
BarcodeFormat.Ean13 |
BarcodeEncoding.EAN13 |
BarcodeScannerConfiguration.FinderAspectRatio |
Brak odpowiednika — kadrowanie obrazu obsługiwane przez MediaPicker |
BarcodeScannerConfiguration.FlashEnabled |
Brak odpowiednika — użyj opcji MediaPicker |
| Wprowadzanie danych wyłącznie za pomocą kamery | Ścieżka pliku, strumień, tablica bajtów lub plik PDF |
| Tylko iOS i Android MAUI | Wszystkie platformy .NET |
Kiedy zespoły rozważają przejście z Scanbot SDK na IronBarcode
Istnieje kilka sytuacji, w których zespoły programistów często rozważają IronBarcode jako zamiennik lub uzupełnienie Scanbot SDK.
Przetwarzanie po stronie serwera i przetwarzanie zaplecza
Aplikacja mobilna zbudowana przy użyciu Scanbot często współistnieje z komponentem po stronie serwera, który obsługuje przesyłanie dokumentów, zadania wsadowe lub punkty końcowe API. Gdy ten komponent po stronie serwera wymaga przetwarzania kodów kreskowych — wyodrębniania kodów kreskowych z przesłanych plików PDF, sprawdzania poprawności wartości kodów kreskowych w przychodzących dokumentach lub przetwarzania danych kodów kreskowych z załączonych obrazów — aplikacja Scanbot nie jest dostępna. Pakiet nie kompiluje się w .NET Core, Azure Functions, aplikacjach konsolowych ani żadnym projekcie innym niż MAUI. Zespoły w tej sytuacji muszą utrzymywać zależność od mobilnego rozwiązania do obsługi kodów kreskowych obok oddzielnego rozwiązania po stronie serwera lub oceniać, czy IronBarcode może pełnić obie role w ramach jednego pakietu.
Wymagania dotyczące aplikacji desktopowej
Główną zaletą MAUI jest często obsługa wielu platform: jedna baza kodu przeznaczona dla systemów iOS, Android i Windows. Gdy cel Windows MAUI zostanie uwzględniony w planie działania — czy to na podstawie wstępnych wymagań, czy jako późniejszy dodatek — pakiet Scanbot nie może zostać rozwiązany na tym celu. Kompilacja dla systemu Windows nie może przebiegać, jeśli Scanbot znajduje się na liście zależności. Zespoły odkrywają to podczas pierwszej próby kompilacji dla platformy desktopowej, a rozwiązanie wymaga usunięcia Scanbota ze wspólnej listy zależności. Dla zespołów, dla których platforma desktopowa Windows jest twardym wymogiem, IronBarcode staje się jedyną opcją spośród bibliotek kodów kreskowych ukierunkowanych na urządzenia mobilne, która obejmuje również platformę desktopową.
PDF i przepływy pracy z dokumentami
Aplikacje, które przechodzą od skanowania na żywo do automatyzacji dokumentów, napotykają ograniczenia możliwości Scanbota. Odczytywanie kodów kreskowych z faktury w formacie PDF, wyodrębnianie kodów śledzenia ze zeskanowanego obrazu etykiety wysyłkowej lub przetwarzanie danych kodów kreskowych z archiwalnego dokumentu — żadna z tych operacji nie jest możliwa w modelu Scanbot, ponieważ dane wejściowe muszą zawsze pochodzić z obrazu na żywo z kamery. IronBarcode obsługuje wszystkie te dane wejściowe oparte na plikach w sposób natywny. Ten sam pakiet, który działa w aplikacji mobilnej MAUI, może wyodrębniać BARCODE-sy z dokumentów PDF w ramach zadania przetwarzania w tle, bez żadnych dodatkowych zależności.
Przewidywalne koszty licencji
Roczne koszty odnowienia wymagają ponownej oceny w każdym cyklu odnowienia. Zespoły, które rozpoczęły korzystanie z Scanbota w ramach wdrożenia mobilnego na małą skalę, a następnie rozszerzyły je na szersze wdrożenie z większą liczbą użytkowników lub platform, mogą uznać opłatę roczną za mniej korzystną w miarę wzrostu zakresu. Model jednorazowej licencji wieczystej IronBarcode eliminuje obowiązek odnawiania. Zespoły przeprowadzające oceny przedłużenia licencji często zastanawiają się, czy jednorazowy zakup lepiej wpisuje się w ich długoterminowe planowanie kosztów, zwłaszcza gdy rozszerzony zakres projektu obejmuje platformy po stronie serwera lub platformy desktopowe, które i tak nie są objęte zasięgiem Scanbota.
Typowe kwestie związane z migracją
Zespoły przechodzące z Scanbot SDK na IronBarcode powinny przygotować się na kilka różnic technicznych, które pojawią się podczas przejścia.
Brak odpowiednika podglądu na żywo
Wizjer kamery Scanbota działający w czasie rzeczywistym — z nakładką obszaru skanowania, ciągłym wykrywaniem i haptycznym sprzężeniem zwrotnym — nie ma bezpośredniego odpowiednika w IronBarcode. Wzorzec zastępczy wykorzystuje MediaPicker.CapturePhotoAsync() z biblioteki MAUI do uruchomienia aparatu systemówego, zrobienia zdjęcia i zwrócenia obrazu do przetworzenia. Interakcja użytkownika polega raczej na robieniu zdjęć niż na ciągłym skanowaniu. W przypadku aplikacji biznesowych (zarządzanie zapasami, logistyka, przetwarzanie dokumentów) to rozróżnienie rzadko ma znaczenie. W przypadku aplikacji konsumenckich, w których nakładka na żywo ma kluczowe znaczenie dla wrażeń z użytkowania produktu, jest to istotna różnica w zakresie UX, którą należy ocenić przed podjęciem decyzji o migracji.
Wzorzec wywołania zwrotnego zdarzenia do bezpośredniego powrotu
Funkcja BarcodeScanner.Open() w Scanbot jest asynchroniczna i zwraca OperationResult z polem statusu oraz kolekcję Barcodes. Funkcja BarcodeReader.Read() biblioteki IronBarcode zwraca bezpośrednio kolekcję — nie ma obiektu opakowującego z polem statusu. Sprawdzenie poprawności zmienia się z result.Status == OperationResult.Ok na results.Any() lub sprawdzenie wartości null w results.FirstOrDefault().
Zmiana nazwy przestrzeni nazw Format Enum
Enum BarcodeFormat w Scanbot (na przykład BarcodeFormat.Code128) oraz enum IronBarcode BarcodeEncoding (na przykład BarcodeEncoding.Code128) zawierają podobne elementy, ale są różnymi typami w różnych przestrzeniach nazw. Kod, który przechowuje lub porównuje wartości formatów według typu enum, wymaga aktualizacji odniesienia do typu. Porównania ciągów znaków oparte na wynikach .ToString() są generalnie kompatybilne, ponieważ nazwy elementów są podobne, ale jawne porównania typów wyliczeniowych wymagają aktualizacji do wartości BarcodeEncoding.
Dodatki do kompilacji systemu Windows
Jeśli pakiet Scanbot powodował błędy kompilacji Windows MAUI przed migracją, jego usunięcie rozwiązuje te problemy. Po dodaniu IronBarcode sprawdź, czy funkcje specyficzne dla systemu Windows — okna dialogowe wyboru plików, lokalne ścieżki plików, uprawnienia systemu Windows — są odpowiednio obsługiwane w kodzie aplikacji MAUI, ponieważ różnią się one od schematów dostępu do plików w systemach iOS i Android.
Dodatkowe możliwości IronBarcode
Oprócz podstawowych scenariuszy omówionych w tym porównaniu, IronBarcode oferuje funkcje, które stają się istotne w miarę rozszerzania się projektów:
- Generowanie kodów kreskowych: Tworzenie kodów kreskowych we wszystkich głównych formatach jednowymiarowych i dwuwymiarowych jako pliki graficzne, strumienie lub treści osadzone w dokumentach HTML i PDF
- Przetwarzanie dokumentów z wieloma BARCODAMI: odczyt wszystkich BARCODE'ów na każdej stronie wielostronicowego pliku PDF za pomocą jednego wywołania, przy czym każdy wynik zawiera numer strony, na której został znaleziony
- Korekcja błędów za pomocą uczenia maszynowego: odzyskiwanie BARCODE-ów z uszkodzonych, częściowo zasłoniętych lub mało kontrastowych obrazów, których standardowe algorytmy wykrywania nie są w stanie odczytać
- Przetwarzanie obrazów w partiach: przetwarzaj tablice ścieżek obrazów lub strumienie w ramach jednej operacji, aby uzyskać wysoką przepustowość w przepływie pracy z dokumentami
- Dostosowanie opcji BarCodeReaderOptions: Kontrola prędkości odczytu, wykrywanie wielu kodów kreskowych, filtrowanie formatów i wstępne przetwarzanie obrazów w celu zrównoważenia przepustowości i dokładności w konkretnych przypadkach użycia
- Integracja z iOS MAUI: Pełna obsługa odczytu BarCode w aplikacjach iOS MAUI przy użyciu wzorca MediaPicker
- Integracja z Android MAUI: Pełna obsługa odczytu BarCode w aplikacjach Android MAUI przy użyciu tego samego interfejsu API co w przypadku iOS
Zgodność z platformą .NET i gotowość na przyszłość
IronBarcode obsługuje .NET 6, .NET 7, .NET 8 i .NET 9, a także .NET Framework 4.6.2 i nowsze wersje. Biblioteka jest regularnie aktualizowana zgodnie z cyklem wydawniczym platformy .NET, co zapewnia kompatybilność z platformą .NET 10, której premiera przewidziana jest na koniec 2026 roku, oraz z przyszłymi wersjami. Ponieważ biblioteka IronBarcode jest biblioteką do przetwarzania plików, a nie platformowym zestawem SDK do obsługi aparatu, nie jest zależna od interfejsów API mobilnych systemów operacyjnych ani możliwości sprzętowych, co oznacza, że jej kompatybilność rośnie wraz z ekosystemem .NET, a nie jest ograniczona cyklami wsparcia platform mobilnych.
Wnioski
Scanbot SDK i IronBarcode należą do różnych kategorii produktów, które łączy nazwa "BARCODE SDK". Scanbot to komponent do skanowania za pomocą aparatu mobilnego, który zapewnia dopracowany podgląd na żywo w aplikacjach na systemy iOS i Android. IronBarcode to biblioteka do przetwarzania plików i dokumentów, która odczytuje i generuje kody kreskowe w pełnym zakresie typów projektów .NET i miejsc wdrożenia. Porównanie dotyczy zakresu i architektury, a nie jakości w ramach docelowej dziedziny każdej biblioteki.
Scanbot SDK jest naprawdę mocny w swoim określonym zakresie. W przypadku aplikacji mobilnych dla konsumentów i przedsiębiorstw, w których użytkownik kieruje aparat urządzenia bezpośrednio na fizyczny BARCODE i oczekuje wizualnej informacji zwrotnej w czasie rzeczywistym — handel detaliczny, sprzedaż biletów, wyszukiwanie w magazynie — potok kamery Scanbot i dopracowany komponent wizjera są specjalnie zaprojektowane dla tego modelu interakcji. Jeśli wdrożenie dotyczy wyłącznie urządzeń mobilnych z systemem iOS i Android, a skanowanie na żywo ma kluczowe znaczenie dla produktu, a roczna opłata ryczałtowa mieści się w budżecie, Scanbot jest rozsądnym wyborem dla tego wąskiego i dobrze zdefiniowanego przypadku użycia.
IronBarcode jest odpowiednim rozwiązaniem, gdy wymagania dotyczące przetwarzania kodów kreskowych wykraczają poza scenariusz z wykorzystaniem kamery na żywo. Przetwarzanie dokumentów po stronie serwera, punkty końcowe ASP.NET Core akceptujące przesyłanie plików, aplikacje desktopowe na Windows lub macOS, funkcje Azure wywoływane przez magazyn obiektów blob, projekty MAUI dla wielu platform, w tym platformy desktopowe, oraz zadania przetwarzania plików PDF w trybie wsadowym – wszystko to mieści się w zakresie działania IronBarcode. Pojedynczy pakiet instaluje się bez konfiguracji zależnej od platformy i zapewnia to samo wywołanie BarcodeReader.Read() niezależnie od tego, czy kod działa na urządzeniu mobilnym, serwerze czy komputerze stacjonarnym.
Dla zespołów, których wymagania obejmują zarówno skanowanie na żywo za pomocą kamery mobilnej, jak i przetwarzanie plików lub serwerów, najbardziej przejrzystym rozwiązaniem pod względem architektury jest użycie Scanbot do obsługi interfejsu użytkownika kamery mobilnej oraz IronBarcode do wszystkich pozostałych zadań. Kosztem takiego podejścia są dwie zależności od BarCodes i dwie umowy licencyjne. Dla zespołów, które wolą korzystać z aparatu systemówego zamiast niestandardowego wizjera do skanowania mobilnego, sam IronBarcode może pokryć cały zakres projektu — od aplikacji mobilnej MAUI, przez API serwera, aż po aplikację towarzysząca na Windows — za pomocą jednego pakietu i jednej licencji.
Często Zadawane Pytania
Czym jest Scanbot SDK?
Scanbot SDK to biblioteka kodów kreskowych .NET służąca do generowania i odczytywania kodów kreskowych w aplikacjach C#. Jest to jedna z kilku alternatyw rozważanych przez programistów przy wyborze rozwiązania do obsługi kodów kreskowych w projektach .NET.
Jakie są główne różnice między Scanbot SDK a IronBarcode?
IronBarcode wykorzystuje statyczne, bezstanowe API, które nie wymaga zarządzania instancjami, podczas gdy Scanbot SDK zazwyczaj wymaga utworzenia i konfiguracji instancji przed użyciem. IronBarcode zapewnia również natywną obsługę plików PDF, automatyczne wykrywanie formatów oraz licencjonowanie za pomocą jednego klucza we wszystkich środowiskach.
Czy licencjonowanie IronBarcode jest łatwiejsze niż w przypadku Scanbot SDK?
IronBarcode wykorzystuje pojedynczy klucz licencyjny obejmujący zarówno wdrożenia deweloperskie, jak i produkcyjne. Upraszcza to procesy CI/CD oraz konfiguracje Docker w porównaniu z systemami licencyjnymi, które oddzielają klucze SDK od kluczy środowiska uruchomieniowego.
Czy IronBarcode obsługuje wszystkie formaty kodów kreskowych obsługiwane przez Scanbot SDK?
IronBarcode obsługuje ponad 30 symboli kodów kreskowych, w tym QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 i wiele innych. Automatyczne wykrywanie formatu oznacza, że nie jest wymagane jawne wyliczanie formatów.
Czy IronBarcode obsługuje natywne odczytywanie kodów kreskowych z plików PDF?
Tak. IronBarcode odczytuje kody kreskowe bezpośrednio z plików PDF za pomocą BarcodeReader.Read("document.pdf") bez konieczności korzystania z oddzielnej biblioteki do renderowania plików PDF. Wyniki dla każdej strony obejmują numer strony, format kodu kreskowego, wartość oraz wskaźnik pewności.
W jaki sposób IronBarcode radzi sobie z przetwarzaniem wsadowym w porównaniu z Scanbot SDK?
Metody statyczne IronBarcode są bezstanowe i z natury bezpieczne dla wątków, co umożliwia bezpośrednie użycie Parallel.ForEach bez zarządzania instancjami dla poszczególnych wątków. Nie ma ograniczeń przepustowości w żadnym przedziale cenowym.
Jakie wersje .NET obsługuje IronBarcode?
IronBarcode obsługuje .NET Framework 4.6.2+, .NET Core 3.1 oraz .NET 5, 6, 7, 8 i 9 w jednym pakiecie NuGet. Obsługiwane platformy to Windows x64/x86, Linux x64 oraz macOS x64/ARM.
Jak zainstalować IronBarcode w projekcie .NET?
Zainstaluj IronBarcode za pomocą NuGet: uruchom polecenie „Install-Package IronBarCode” w konsoli menedżera pakietów lub „dotnet add package IronBarCode” w interfejsie CLI. Nie są wymagane żadne dodatkowe instalatory SDK ani pliki uruchomieniowe.
Czy mogę przetestować IronBarcode przed zakupem, w przeciwieństwie do Scanbot?
Tak. Tryb próbny IronBarcode zwraca pełne, zdekodowane wartości BarCode — tylko wygenerowane obrazy wyjściowe są opatrzone znakiem wodnym. Przed podjęciem decyzji o zakupie można sprawdzić dokładność odczytu na własnych dokumentach.
Jaka jest różnica w cenie między Scanbot SDK a IronBarcode?
Cena IronBarcode zaczyna się od 749 USD za Licencję wieczystą dla jednego programisty, obejmującą etapy rozwoju i produkcji. Szczegóły dotyczące cen i opcji zakupu hurtowego są dostępne na stronie licencyjnej IronBarcode. Nie ma wymogu posiadania oddzielnej licencji na środowisko uruchomieniowe.
Czy migracja z Scanbot SDK do IronBarcode jest prosta?
Migracja z Scanbot SDK do IronBarcode polega przede wszystkim na zastąpieniu wywołań API opartych na instancjach statycznymi metodami IronBarcode, usunięciu standardowych fragmentów kodu dotyczących licencji oraz aktualizacji nazw właściwości wyników. Większość migracji wiąże się raczej z redukcją kodu niż z jego dodawaniem.
Czy IronBarcode generuje kody QR z logo?
Tak. Funkcja QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") osadza obraz marki w kodzie QR w sposób natywny z konfigurowalną korekcją błędów. Kolorowe kody QR są również obsługiwane za pomocą funkcji ChangeBarCodeColor().

