Przejdź do treści stopki
PORóWNAJ Z INNYMI KOMPONENTAMI

Scandit SDK vs IronBarcode: Porównanie bibliotek kodów kreskowych C#

Aby rozpocząć odczytywanie barcode'ów za pomocą Scandit, należy skonfigurować DataCaptureContext, utworzyć BarcodeCaptureSettings, wyraźnie włączyć symbole, podłączyć kamerę, ustawić ją jako źródło klatek, przełączyć kamerę w stan włączony i włączyć przechwytywanie. Cena nadal nie jest podana na stronie internetowej.

To połączenie — obowiązkowy potok kamer i nieprzejrzyste ceny dla Enterprise — dokładnie określa, kiedy Scandit jest niewłaściwym narzędziem dla projektu .NET. Jeśli tworzysz proces przetwarzania dokumentów po stronie serwera, interfejs API ASP.NET Core odczytujący kody kreskowe z przesłanych plików lub funkcję Azure Function przetwarzającą pliki PDF dotyczące wysyłek, architektura Scandit utrudnia Ci pracę na każdym etapie. W niniejszym porównaniu analizujemy, skąd pochodzi ta architektura, gdzie zamiast niej sprawdza się IronBarcode oraz ile kosztuje sprawdzenie obu opcji.

Zrozumienie Scandit SDK

Scandit SDK to komercyjna platforma do skanowania BarCode przeznaczona dla środowisk mobilnych i edge computing. Biblioteka została zaprojektowana do obsługi skanowania kamerą w czasie rzeczywistym na urządzeniach z systemami iOS, Android i MAUI, a specjalistyczne linie produktów obejmują nakładki rzeczywistości rozszerzonej, jednoczesne wykrywanie wielu kodów BarCode oraz skanowanie dokumentów tożsamości. Głównym kontekstem wdrożenia Scandit są mobilni pracownicy terenowi, operacje magazynowe oraz scenariusze punktów interakcji w handlu detalicznym, w których jednocześnie występują fizyczna kamera, aktywny użytkownik oraz czas reakcji poniżej 100 ms.

Architektura biblioteki opiera się na potoku DataCaptureContext, który koordynuje sesję kamery, ustawienia analizy klatek i konfigurację przechwytywania BarCode jako ujednolicony system stanowy. Ponieważ każda linia produktów na platformie Scandit — SparkScan, MatrixScan, ID Scanning, AR Overlays i Parser — jest licencjonowana i wyceniana osobno w ramach modelu sprzedaży bezpośredniej, całkowity koszt integracji z platformą Scandit można ustalić dopiero po rozmowie z przedstawicielem handlowym.

Kluczowe cechy architektury Scandit SDK obejmują:

  • Projekt z priorytetem kamery: SDK zakłada obecność fizycznej kamery i działającego źródła klatek. Wszystkie operacje odczytu kodów kreskowych są wykonywane na klatkach wideo na żywo, a nie na statycznych plikach lub strumieniach.
  • Obowiązkowa inicjalizacja DataCaptureContext: Każda integracja rozpoczyna się od utworzenia obiektu DataCaptureContext i podłączenia go do instancji kamery, zanim będzie można rozpocząć pracę z BarCode.
  • Wyraźna deklaracja symboliki: Formaty BARCODE muszą być włączane indywidualnie za pomocą EnableSymbologies przed rozpoczęciem sesji przechwytywania. Automatyczne wykrywanie nie jest dostępne.
  • Dostarczanie wyników sterowane zdarzeniami: Wyniki skanowania BarCode są dostarczane asynchronicznie poprzez wywołania zwrotne zdarzeń (BarcodeScanned), a nie zwracane synchronicznie w wyniku wywołania metody.
  • Modułowa architektura produktu: SparkScan, MatrixScan, skanowanie identyfikatorów, nakładki AR i parser to funkcje wyceniane oddzielnie, które wymagają indywidualnych pozycji w umowie.
  • Kontakt – Dział sprzedaży Ceny: Ceny nie są publikowane. Każda integracja wymaga zapytania ofertowego, zanim będzie znany koszt licencji.
  • Platforma zorientowana na urządzenia mobilne: Główne wsparcie dotyczy systemów iOS i Android. Wdrożenia po stronie serwera, w Dockerze i bezserwerowe wykraczają poza zakres projektu SDK.

Pipeline DataCaptureContext

Każda integracja Scandit rozpoczyna się od sekwencji inicjalizacji kamery, zanim będzie można odczytać choćby jeden BARCODE:

// Scandit SDK: full camera pipeline setup
// NuGet: Scandit.BarcodePicker

var dataCaptureContext = DataCaptureContext.ForLicenseKey("YOUR-SCANDIT-LICENSE");

var settings = BarcodeCaptureSettings.Create();
settings.EnableSymbologies(new HashSet<Symbology>
{
    Symbology.Ean13Upca,
    Symbology.Ean8,
    Symbology.Code128,
    Symbology.QrCode
});

var barcodeCapture = BarcodeCapture.Create(dataCaptureContext, settings);
var camera = Camera.GetDefaultCamera();
await dataCaptureContext.SetFrameSourceAsync(camera);
await camera.SwitchToDesiredStateAsync(FrameSourceState.On);
barcodeCapture.IsEnabled = true;
// Scandit SDK: full camera pipeline setup
// NuGet: Scandit.BarcodePicker

var dataCaptureContext = DataCaptureContext.ForLicenseKey("YOUR-SCANDIT-LICENSE");

var settings = BarcodeCaptureSettings.Create();
settings.EnableSymbologies(new HashSet<Symbology>
{
    Symbology.Ean13Upca,
    Symbology.Ean8,
    Symbology.Code128,
    Symbology.QrCode
});

var barcodeCapture = BarcodeCapture.Create(dataCaptureContext, settings);
var camera = Camera.GetDefaultCamera();
await dataCaptureContext.SetFrameSourceAsync(camera);
await camera.SwitchToDesiredStateAsync(FrameSourceState.On);
barcodeCapture.IsEnabled = true;
Imports Scandit.DataCapture.Core
Imports Scandit.DataCapture.Barcode
Imports Scandit.DataCapture.Barcode.Capture
Imports Scandit.DataCapture.Core.Source
Imports System.Collections.Generic

' Scandit SDK: full camera pipeline setup
' NuGet: Scandit.BarcodePicker

Dim dataCaptureContext = DataCaptureContext.ForLicenseKey("YOUR-SCANDIT-LICENSE")

Dim settings = BarcodeCaptureSettings.Create()
settings.EnableSymbologies(New HashSet(Of Symbology) From {
    Symbology.Ean13Upca,
    Symbology.Ean8,
    Symbology.Code128,
    Symbology.QrCode
})

Dim barcodeCapture = BarcodeCapture.Create(dataCaptureContext, settings)
Dim camera = Camera.GetDefaultCamera()
Await dataCaptureContext.SetFrameSourceAsync(camera)
Await camera.SwitchToDesiredStateAsync(FrameSourceState.On)
barcodeCapture.IsEnabled = True
$vbLabelText   $csharpLabel

Każda linia w tym bloku to infrastruktura kamer. Nie ma argumentu ścieżki do pliku. Nie ma pliku PDF. Nie ma strumienia. Biblioteka zakłada, że kamera jest uruchomiona, zanim będzie można rozpocząć pracę z BARCODE-ami.

Zrozumienie IronBarcode

IronBarcode to komercyjna biblioteka .NET do odczytu i generowania kodów kreskowych. Biblioteka jest przeznaczona dla środowisk serwerowych, desktopowych i chmurowych, w których dane BarCode są dostarczane w postaci plików, strumieni, tablic bajtów lub treści osadzonych w dokumentach PDF. Jego API jest bezstanowe — nie ma obiektu sesji, nie ma potoku kamery do zainicjowania ani trwałego kontekstu do zarządzania między odczytami. Pojedyncze statyczne wywołanie BarcodeReader.Read przyjmuje ścieżkę do pliku, strumień, tablicę bajtów lub plik PDF i zwraca zbiór wyników.

IronBarcode jest dostarczany jako pojedynczy pakiet NuGet zawierający wszystkie funkcje odczytu i generowania ponad 30 formatów kodów kreskowych 1D i 2D. Biblioteka obsługuje automatyczne wykrywanie formatów, co oznacza, że wywołujący nie musi określać, jakich symboli ma szukać. Ceny są podane na stronie produktu i nie wymagają rozmowy sprzedażowej.

Najważniejsze cechy IronBarcode to:

  • Bezstanowe API oparte na plikach: Odczyt rozpoczyna się od pojedynczego wywołania metody, która przyjmuje ścieżkę do pliku, strumień, tablicę bajtów lub dokument PDF.
  • Automatyczne wykrywanie formatu: Wszystkie obsługiwane formaty BarCode są wykrywane automatycznie. Wyraźna konfiguracja symboliki jest opcjonalną optymalizacją wydajności, a nie warunkiem koniecznym.
  • Natywna obsługa plików PDF: wielostronicowe dokumenty PDF są odczytywane bezpośrednio, a wyniki indeksowane według numerów stron. Nie jest wymagańa żadna zewnętrzna biblioteka do renderowania plików PDF.
  • Gotowość do pracy na serwerach i w chmurze: Obsługuje ASP.NET Core, Azure Functions, Docker na systemie Linux oraz wdrożenia kontenerowe bez konieczności stosowania architektonicznych obejść.
  • Przetwarzanie współbieżne: Bezstanowe API jest z natury bezpieczne dla wątków, umożliwiając stosowanie wzorców Parallel.ForEach i asynchronicznych w scenariuszach przetwarzania wsadowego o dużej przepustowości.
  • Generowanie kodów kreskowych: Tworzy kody kreskowe w formacie obrazu i PDF we wszystkich obsługiwanych systemach symbolicznych. Tworzenie i odczyt są zawarte w tym samym pakiecie.
  • Licencje wieczyste: Ceny są podane publicznie jako jednorazowe zakupy wieczyste bez opłat za skanowanie lub za urządzenie.

Porównanie funkcji

Poniższa tabela przedstawia podstawowe różnice między Scandit SDK a IronBarcode:

Funkcja Scandit SDK IronBarcode
Główny przypadek użycia Skanowanie kamerą w czasie rzeczywistym na urządzeniach mobilnych Odczytywanie plików, strumieni i BarCode'ów PDF na serwerze
Wymagana kamera Tak Nie
Ekstrakcja BarCodes z plików PDF Nieobsługiwane Wsparcie native
Model cenowy Skontaktuj się z działem sprzedaży, w zależności od produktu Opublikowane poziomy wieczyste
Przetwarzanie po stronie serwera Nieprzeznaczone dla Główny cel wdrożenia
Konfiguracja symboli Wymagane przed skanowaniem Opcjonalnie; auto-detection is default
Generowanie kodów kreskowych Nieobsługiwane Zawarte w jednym pakiecie

Szczegółowe porównanie funkcji

Funkcja Scandit SDK IronBarcode
Czytanie
Odczytywanie plików graficznych Nieprzeznaczone dla Główny cel
Pobieranie kodów kreskowych z plików PDF Nieobsługiwane Natywny wielostronicowy
Wejście strumieniowe / tablica bajtów Nieobsługiwane Tak
Automatyczne wykrywanie formatu Nie (należy określić) Tak
Formaty 1D (Code 128, EAN, UPC itp.) 30+ 30+
Formaty 2D (QR, DataMatrix, Aztec, PDF417) Tak Tak
Wykrywanie wielu BarCodes w jednym dokumencie MatrixScan (oddzielny produkt) Tak (pojedynczy pakiet)
Odzyskiwanie uszkodzonych kodów kreskowych Ograniczone Tak (oparte na ML)
Generacja
Generowanie BarCode'ów Nieobsługiwane Tak
Wyprowadź do pliku graficznego Nieobsługiwane Tak
Wyprowadź do pliku PDF Nieobsługiwane Tak
Architektura
Model inicjalizacji Pipeline kamery z zachowaniem stanu Wywołanie metody bezstanowej
Dostarczenie wyników Wywołanie zwrotne zdarzenia (asynchroniczne) Synchroniczna wartość zwracana
Zależność od kamery Wymagane Nie dotyczy
Wstępna deklaracja symboli Wymagane Opcjonalnie
Platforma
iOS / Android (MAUI) Główna grupa docelowa Wykorzystanie programowe
ASP.NET Core Nieprzeznaczone dla Pełne wsparcie
Azure Functions / bezserwerowe Niepraktyczne Pełne wsparcie
Docker / serwer Linux Nieobsługiwane Pełne wsparcie
Konsola / usługa działająca w tle Nieprzeznaczone dla Pełne wsparcie
Licencjonowanie
Przejrzystość cen Wymagany kontakt z działem sprzedaży Opublikowano na stronie internetowej
Rodzaj licencji Roczna (na produkt) Wieczyste jednorazowe
Opłaty za skan lub za urządzenie Tak Nie
Dostęp do wszystkich funkcji w jednym pakiecie Nie (produkty modułowe) Tak

Architektura odczytu BarCode

Najważniejszą różnicą strukturalną między tymi dwiema bibliotekami jest sposób modelowania relacji między danymi wejściowymi a wyjściowymi.

Podejście Scandit SDK

Scandit przetwarza klatki z kamery w czasie rzeczywistym. DataCaptureContext utrzymuje aktywną sesję kamery, a BarcodeCapture nasłuchuje BARCODE-ów w każdej przychodzącej klatce. Wyniki skanowania BarCode są dostarczane asynchronicznie poprzez zdarzenie BarcodeScanned. Odczytanie statycznego pliku obrazu za pomocą Scandit wymaga dostosowania potoku kamery tak, aby traktował plik jako źródło klatek — jest to proces, który nie jest obsługiwany natywnie i wymaga nakładu pracy inżynieryjnej w celu jego przybliżenia.

// Scandit SDK: event-callback result delivery
barcodeCapture.BarcodeScanned += (sender, args) =>
{
    foreach (var barcode in args.Session.NewlyRecognizedBarcodes)
    {
        string value = barcode.Data;
        string symbology = barcode.Symbology.ToString();
        ProcessBarcode(value, symbology);
    }
};
// Scandit SDK: event-callback result delivery
barcodeCapture.BarcodeScanned += (sender, args) =>
{
    foreach (var barcode in args.Session.NewlyRecognizedBarcodes)
    {
        string value = barcode.Data;
        string symbology = barcode.Symbology.ToString();
        ProcessBarcode(value, symbology);
    }
};
Imports System

' Scandit SDK: event-callback result delivery
AddHandler barcodeCapture.BarcodeScanned, Sub(sender, args)
    For Each barcode In args.Session.NewlyRecognizedBarcodes
        Dim value As String = barcode.Data
        Dim symbology As String = barcode.Symbology.ToString()
        ProcessBarcode(value, symbology)
    Next
End Sub
$vbLabelText   $csharpLabel

Model sterowany zdarzeniami jest odpowiedni do ciągłego skanowania na żywo, gdzie BARCODES pojawiają się w strumieniu wideo w sposób nieprzewidywalny. W przypadku przetwarzania opartego na plikach model wprowadza niepotrzebną złożoność: dane wejściowe mają znaną granicę zakończenia, sesja kamery nigdy nie kończy się w sposób naturalny, a asynchroniczny wzorzec wywołania zwrotnego nie współgra dobrze z architekturami serwerowymi typu żądanie-odpowiedź.

Podejście IronBarcode

IronBarcode traktuje każde wprowadzone dane jako odrębny dokument o deterministycznym wyniku. Metoda BarcodeReader.Read przyjmuje ścieżkę do pliku, strumień lub tablicę bajtów, wykonuje wszystkie operacje wykrywania synchronicznie i zwraca zbiór wyników. Nie ma sesji do otwarcia, źródła ramki do skonfigurowania ani zdarzenia, na które można się zapisać.

// IronBarcode: direct file reading
// NuGet: dotnet add package IronBarcode

IronBarCode.License.LicenseKey = "YOUR-KEY";
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
    Console.WriteLine($"{result.Value} ({result.Format})");
// IronBarcode: direct file reading
// NuGet: dotnet add package IronBarcode

IronBarCode.License.LicenseKey = "YOUR-KEY";
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
    Console.WriteLine($"{result.Value} ({result.Format})");
' IronBarcode: direct file reading
' NuGet: dotnet add package IronBarcode

IronBarCode.License.LicenseKey = "YOUR-KEY"
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
    Console.WriteLine($"{result.Value} ({result.Format})")
Next
$vbLabelText   $csharpLabel

W przypadku odczytu BarCodes z obrazów bezstanowe API nie wymaga żadnej inicjalizacji poza kluczem licencyjnym. Wykrywanie formatu odbywa się automatycznie. Powyższy kompletny program odczytuje dowolny obsługiwany format BARCODE z pliku obrazu za pomocą trzech wierszy kodu operacyjnego.

Wsparcie w zakresie platform i wdrażania

Kontekst wdrożenia biblioteki BarCode decyduje o tym, czy może ona w ogóle działać w środowisku docelowym, niezależnie od dostępnych funkcji.

Podejście Scandit SDK

Architektura Scandit wymaga sprzętu kamerowego oraz platformy mobilnej, która może udostępniać go za pośrednictwem natywnego interfejsu API kamery. Głównymi obsługiwanymi platformami są iOS i Android. Komputery stacjonarne z systemem Windows stanowią drugorzędną grupę docelową. ASP.NET Core, Azure Functions, kontenery Docker i serwery Linux nie wchodzą w zakres projektu biblioteki. DataCaptureContext zakłada uruchomioną sesję kamery, która nie ma odpowiednika w środowiskach obliczeniowych bezserwerowych, wdrożeniach kontenerowych ani usługach przetwarzania w tle.

Platforma Scandit SDK
iOS / Android (MAUI) Główna grupa docelowa
Pulpit Windows Wsparcie dodatkowe
ASP.NET Core Nieprzeznaczone dla
Azure Functions Niepraktyczne
Docker / serwer Linux Nieobsługiwane
Konsola / usługa działająca w tle Nieprzeznaczone dla

Podejście IronBarcode

IronBarcode został stworzony z myślą o środowiskach serwerowych, chmurowych i kontenerowych. Bezstanowe API nie ma żadnych zależności sprzętowych ani wymagań dotyczących inicjalizacji specyficznych dla platformy. Wdrożenie w Azure Functions w celu przetwarzania kodów kreskowych jest obsługiwanym i udokumentówanym rozwiązaniem. Docker na systemie Linux jest standardowym celem wdrożenia. Punkty końcowe .NET Core odczytujące BARCODES z przesłanych plików stanowią podstawowy obsługiwany scenariusz, który nie wymaga żadnych architektonicznych obejść.

Platforma IronBarcode
iOS / Android (MAUI) Programowe przetwarzanie plików
ASP.NET Core Pełne wsparcie
Azure Functions / Lambda Pełne wsparcie
Docker / serwer Linux Pełne wsparcie
Konsola / usługa działająca w tle Pełne wsparcie
Blazor Server Pełne wsparcie

Równoległe przetwarzanie wsadowe

Przetwarzanie dużych ilości dokumentów opatrzonych kodami BarCode jest powszechnym wymaganiem po stronie serwera, do którego obie biblioteki podchodzą z zasadniczo różnych perspektyw.

Podejście Scandit SDK

Pipeline kamery Scandit został zaprojektowany z myślą o pojedynczej sesji kamery obsługującej jednego użytkownika lub urządzenie. Model FrameSourceState zakłada trwałą, ciągłą sesję kamery — a nie kolejkę dokumentów przetwarzanych z określoną przepustowością. Dostosowanie biblioteki do przetwarzania partii plików wymaga symulacji sesji kamery dla każdego dokumentu lub serializacji przetwarzania dokumentów za pośrednictwem wspólnego potoku, z których żadne nie stanowi obsługiwanego ani wydajnego wzorca.

Podejście IronBarcode

Ponieważ metoda BarcodeReader.Read biblioteki IronBarcode jest bezstanowa, wywoływanie jej jednocześnie z wielu wątków jest z natury bezpieczne. Równoległe przetwarzanie wsadowe nie wymaga żadnej specjalnej konfiguracji poza zdefiniowaniem BarcodeReaderOptions:

// IronBarcode: concurrent batch processing
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    MaxParallelThreads = 4
};

var files = Directory.GetFiles("./incoming/", "*.pdf");
var allResults = new ConcurrentBag<BarcodeResult>();

Parallel.ForEach(files, file =>
{
    var results = BarcodeReader.Read(file, options);
    foreach (var r in results)
        allResults.Add(r);
});
// IronBarcode: concurrent batch processing
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    MaxParallelThreads = 4
};

var files = Directory.GetFiles("./incoming/", "*.pdf");
var allResults = new ConcurrentBag<BarcodeResult>();

Parallel.ForEach(files, file =>
{
    var results = BarcodeReader.Read(file, options);
    foreach (var r in results)
        allResults.Add(r);
});
Imports System.IO
Imports System.Collections.Concurrent
Imports System.Threading.Tasks

' IronBarcode: concurrent batch processing
Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True,
    .MaxParallelThreads = 4
}

Dim files = Directory.GetFiles("./incoming/", "*.pdf")
Dim allResults As New ConcurrentBag(Of BarcodeResult)()

Parallel.ForEach(files, Sub(file)
    Dim results = BarcodeReader.Read(file, options)
    For Each r In results
        allResults.Add(r)
    Next
End Sub)
$vbLabelText   $csharpLabel

Szczegółowe wzorce dotyczące asynchronicznego i wielowątkowego odczytu kodów kreskowych można znaleźć w dokumentacji IronBarcode, która obejmuje wzorce bezpieczne dla wątków oraz opcje optymalizacji przepustowości.

Przetwarzanie dokumentów PDF

Wyodrębnianie BARCODE-ów z plików PDF jest funkcją odrębną od odczytu opartego na obrazach i stanowi istotną różnicę między tymi dwiema bibliotekami.

Podejście Scandit SDK

Scandit nie obsługuje natywnie formatu PDF. Wyodrębnianie kodów kreskowych z pliku PDF za pomocą Scandit wymaga renderowania każdej strony PDF do obrazu rastrowego przy użyciu oddzielnej biblioteki renderującej PDF, a następnie przekazania tych obrazów przez potok symulacji kamery. Takie podejście wprowadza dodatkową zależność, dodatkowe koszty licencji i znaczny nakład pracy inżynieryjnej dla zadania, które jest rutynowe w procesach przetwarzania dokumentów. Dokumenty wielostronicowe wymagają iteracji stron, zarządzania pamięcią dla renderowanych obrazów oraz ręcznej koordynacji wyników między stronami.

Podejście IronBarcode

IronBarcode natywnie odczytuje kody kreskowe z dokumentów PDF. Ścieżka do pliku PDF jest prawidłowym argumentem dla BarcodeReader.Read, a wyniki zawierają właściwość PageNumber wskazującą, na której stronie dokumentu znaleziono każdy BARCODE:

// IronBarcode: extract barcodes from every page of a PDF
var results = BarcodeReader.Read("shipping-manifest.pdf");

foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value} ({barcode.Format})");
}
// IronBarcode: extract barcodes from every page of a PDF
var results = BarcodeReader.Read("shipping-manifest.pdf");

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

' IronBarcode: extract barcodes from every page of a PDF
Dim results = BarcodeReader.Read("shipping-manifest.pdf")

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

Pełne wytyczne dotyczące odczytu kodów kreskowych z plików PDF, w tym opcje wyboru zakresu stron i wyodrębniania wielu kodów kreskowych, można znaleźć w dokumentacji IronBarcode, która obejmuje pełen zakres scenariuszy przetwarzania plików PDF.

Ceny i licencje

Struktura licencji wpływa nie tylko na koszt biblioteki, ale także na czas potrzebny do jej oceny i wdrożenia.

Podejście firmy Scandit

Scandit nie publikuje cennika. Strona produktu zawiera listę funkcji i nazw produktów — SparkScan, MatrixScan, ID Scanning, AR Overlays, Parser — oraz przekierowuje wszystkie zapytania do rozmowy sprzedażowej. Proces wyceny obejmuje wyjaśnienie przypadku użycia, oszacowanie objętości skanowania, określenie urządzeń, omówienie poziomów wsparcia oraz negocjację długości umowy przed podaniem kwoty kosztów. Recenzje na platformach takich jak G2 i DiscoverSDK konsekwentnie zwracają uwagę na nieprzewidywalne koszty dla małych i średnich przedsiębiorstw oraz wyzwania związane z prognozowaniem budżetu. Każda linia produktów Scandit ma odrębną cenę i jest przedmiotem odrębnej umowy, co oznacza, że rozszerzony dostęp do funkcji wymaga dodatkowych cykli sprzedaży.

Podejście IronBarcode

IronBarcode publikuje informacje o poziomach licencji na stronie produktu bez konieczności wypełniania formularza lub wysyłania zapytania handlowego:

Licencja Cena Programiści Projekty
Lite 749 USD jednorazowo 1 1
Professional 1499 USD jednorazowo 10 10
Nieograniczona 2999 USD jednorazowo Nieograniczona Nieograniczona

Licencje są bezterminowe. Nie ma opłat za skanowanie, opłat za urządzenie ani progów ilościowych, które powodowałyby zmiany poziomu taryfowego. Roczne odnowienie jest opcjonalne i kosztuje połowę pierwotnej ceny, ale zakupiona licencja pozostaje ważna bez konieczności odnawiania. Wszystkie funkcje zawarte w pakiecie IronBarcode — odczyt, generowanie, obsługa plików PDF, wykrywanie wielu kodów kreskowych — są dostępne na każdym poziomie.

Przewodnik po mapowaniu API

Poniższa tabela przedstawia powiązania między pojęciami z pakietu Scandit SDK a ich odpowiednikami w IronBarcode dla zespołów oceniających koszt tłumaczenia związany z migracją:

Scandit SDK IronBarcode Uwagi
DataCaptureContext.ForLicenseKey("key") IronBarCode.License.LicenseKey = "key" Jedno zlecenie; no context object required
BarcodeCaptureSettings.Create() new BarcodeReaderOptions() Opcjonalnie w IronBarcode
settings.EnableSymbologies(Symbology.Code128, ...) (not needed) Automatyczne wykrywanie jest ustawieniem domyślnym
Camera.GetDefaultCamera() (not applicable) Brak koncepcji kamery w przetwarzaniu plików
dataCaptureContext.SetFrameSourceAsync(camera) (not applicable) Brak źródła ramki w IronBarcode
camera.SwitchToDesiredStateAsync(FrameSourceState.On) (not applicable) Brak maszyny stanów kamery
barcodeCapture.IsEnabled = true BarcodeReader.Read(path) Pojedyncze wywołanie inicjuje odczyt
BarcodeScanned += procedurę obsługi zdarzeń Iteracja nad wartością zwracaną przez BarcodeReader.Read() Zbiórka synchroniczna; no event system
args.Session.NewlyRecognizedBarcodes Wartość zwracana przez BarcodeReader.Read() Bezpośredni dostęp do kolekcji
barcode.Data result.Value Ta sama treść semantyczna
barcode.Symbology result.Format Wymiennik formatów
SparkScan, MatrixScan, ID Scanning (oddzielne produkty) Pojedynczy pakiet IronBarcode Brak oddzielnych dodatków

Kiedy zespoły rozważają przejście z Scandit SDK na IronBarcode

Wymagania dotyczące przetwarzania po stronie serwera

Zespoły tworzące interfejsy API .NET Core, usługi przetwarzania w tle lub Azure Functions napotykają na architekturę Scandit jako fundamentalną niezgodność już od pierwszego etapu integracji. DataCaptureContext i potok kamer zakładają istnienie sprzętu, który nie występuje w środowisku serwerowym. Gdy wymagania projektu dotyczące kodów kreskowych dotyczą wyłącznie strony serwerowej — odczytu z przesłanych plików, przetwarzania kolejek dokumentów, wyodrębniania danych kodów kreskowych z przychodzących plików PDF — proces przetwarzania obrazu z kamery zwiększa złożoność inicjalizacji, obciążenie związane z asynchroniczną maszyną stanów oraz ograniczenia platformy, które nie wnoszą nic do rzeczywistych wymagań biznesowych.

Przetwarzanie dokumentów w trybie wsadowym

Organizacje przetwarzające duże ilości dokumentów z BarCode — listy przewozowe, faktury, ewidencje magazynowe, formularze medyczne — stwierdzają, że model frame-source firmy Scandit nie współgra z kolejkami dokumentów. Biblioteka została zaprojektowana z myślą o ciągłych sesjach kamery, a nie o pojedynczych dokumentach z deterministycznymi punktami początkowymi i końcowymi. Gdy ilość dokumentów rośnie i konieczne staje się przetwarzanie równoległe, stanowość potoku kamer staje się przeszkodą inżynieryjną, a nie funkcją.

Przejrzystość cen

Zespoły programistów pracujące nad propozycjami budżetowymi, porównaniami dostawców lub analizami kosztów i korzyści dla nowych projektów nie mogą wykonać tej pracy z wykorzystaniem Scandit bez uprzedniego wejścia w cykl sprzedaży. Gdy projekt ma określony budżet i harmonogram, brak możliwości ustalenia kosztu licencji bez rozmowy handlowej powoduje opóźnienia i niepewność, które mają dalsze skutki dla planowania projektu. Zespoły oceniające jednocześnie wiele opcji bibliotek stwierdzają, że brak opublikowanych cen utrudnia uwzględnienie Scandit w ustrukturyzowanym porównaniu.

Zmniejszenie złożoności potoku

Nawet jeśli Scandit jest już wdrożony do skanowania za pomocą kamery mobilnej, niektóre zespoły odkrywają, że wymagania dotyczące BarCode po stronie serwera w tej samej aplikacji wymagają innego narzędzia. Pipeline kamery, który jest odpowiedni do skanowania mobilnego w czasie rzeczywistym, wprowadza niepotrzebną złożoność, gdy jest stosowany do przetwarzania dokumentów statycznych. Zespoły, które doszły do tego etapu, często wdrażają IronBarcode do przetwarzania po stronie serwera obok istniejącej implementacji Scandit, zamiast próbować rozszerzać potok przetwarzania obrazu z kamery na przypadki użycia, do których nie został on zaprojektowany.

Typowe kwestie związane z migracją

Pipeline kamery nie ma odpowiednika w postaci pliku

Cały blok inicjalizacyjny DataCaptureContext — tworzenie kontekstu, konfiguracja ustawień, włączanie symboli, pozyskiwanie obrazu z kamery, przypisywanie źródła klatek i przejście między stanami — nie ma odpowiednika w interfejsie API opartym na plikach IronBarcode. Podczas migracji kodu integracji po stronie serwera ten blok jest usuwany w całości. Nie jest przetłumaczone; zostaje usunięte. Zastąpienie IronBarcode polega na przypisaniu klucza licencyjnego, a następnie wywołaniu BarcodeReader.Read.

Wywołanie zwrotne zdarzenia do bezpośredniego powrotu

Scandit dostarcza wyniki skanowania BARCODE poprzez zdarzenie BarcodeScanned, ponieważ skanowanie na żywo za pomocą kamery ma z natury charakter asynchroniczny. IronBarcode zwraca wyniki synchronicznie jako kolekcję typowaną, ponieważ odczyt oparty na plikach ma znaną granicę zakończenia. Migracja polega na przekształceniu logiki obsługi zdarzeń na standardową iterację:

// Scandit callback pattern (removed during migration)
barcodeCapture.BarcodeScanned += (sender, args) =>
{
    foreach (var barcode in args.Session.NewlyRecognizedBarcodes)
        ProcessBarcode(barcode.Data, barcode.Symbology.ToString());
};

// IronBarcode direct return (replacement)
foreach (var result in BarcodeReader.Read("document.png"))
    ProcessBarcode(result.Value, result.Format.ToString());
// Scandit callback pattern (removed during migration)
barcodeCapture.BarcodeScanned += (sender, args) =>
{
    foreach (var barcode in args.Session.NewlyRecognizedBarcodes)
        ProcessBarcode(barcode.Data, barcode.Symbology.ToString());
};

// IronBarcode direct return (replacement)
foreach (var result in BarcodeReader.Read("document.png"))
    ProcessBarcode(result.Value, result.Format.ToString());
Imports System

' Scandit callback pattern (removed during migration)
AddHandler barcodeCapture.BarcodeScanned, Sub(sender, args)
    For Each barcode In args.Session.NewlyRecognizedBarcodes
        ProcessBarcode(barcode.Data, barcode.Symbology.ToString())
    Next
End Sub

' IronBarcode direct return (replacement)
For Each result In BarcodeReader.Read("document.png")
    ProcessBarcode(result.Value, result.Format.ToString())
Next
$vbLabelText   $csharpLabel

Usunięcie deklaracji symbologii

Scandit wymaga wyraźnych wywołań EnableSymbologies przed rozpoczęciem skanowania. IronBarcode nie wymaga wstępnego deklarowania symboli — wszystkie formaty są wykrywane automatycznie. Podczas migracji wszystkie wywołania settings.EnableSymbologies(...) są usuwane. Jeśli oryginalny kod Scandit ograniczał symbole ze względu na wydajność, w IronBarcode dostępna jest równoważna optymalizacja poprzez BarcodeReaderOptions.ExpectBarcodeTypes, ale nie jest ona wymagańa do rozpoczęcia pracy.

Dodatkowe możliwości IronBarcode

Oprócz obszarów omówionych w powyższym porównaniu, IronBarcode oferuje funkcje, które rozszerzają jego zastosowanie w scenariuszach przetwarzania dokumentów i danych:

  • Generowanie kodów kreskowych: Generuj kody kreskowe jako pliki graficzne lub osadzaj je w plikach PDF we wszystkich obsługiwanych symbolikach, w tym kodach QR, Code 128, Data Matrix i PDF417.
  • GS1 i parsowanie danych strukturalnych: Dekoduj formaty danych strukturalnych BarCode, w tym identyfikatory aplikacji GS1-128, bezpośrednio z wyników skanowania BarCode.
  • Korekcja i wstępne przetwarzanie obrazów: Automatyczna korekcja obrazów w przypadku przekrzywionych, o niskim kontraście lub uszkodzonych BARCODE'ów poprawia wskaźniki odczytu skanowanych dokumentów bez konieczności ręcznego przetwarzania wstępnego.
  • Wykrywanie wielu BarCodes: Pojedyncze wywołanie BarcodeReader.Read wykrywa wszystkie BarCodes obecne w dokumencie, w tym mieszane formaty na tej samej stronie, przy użyciu opcji ExpectMultipleBarcodes.
  • Odczytywanie BarCode'ów w MAUI: W aplikacjach MAUI wykorzystujących model przechwytywania i przetwarzania, IronBarcode obsługuje etap przetwarzania po zrobieniu zdjęcia za pomocą MediaPicker.
  • Wejście strumieniowe i tablica bajtów: Oprócz ścieżek do plików, BarcodeReader.Read akceptuje dane wejściowe Stream i byte[], umożliwiając integrację z procedurami obsługi przesyłania, buforami pamięci i strumieniami sieciowymi bez tworzenia plików tymczasowych.

Zgodność z platformą .NET i gotowość na przyszłość

IronBarcode obsługuje .NET Framework 4.6.2 i nowsze wersje, .NET Standard 2.0 oraz wszystkie nowoczesne wersje .NET, w tym .NET 6, .NET 7, .NET 8 i .NET 9. Biblioteka jest regularnie aktualizowana w celu zachowania zgodności z obecnymi i przyszłymi wersjami .NET, w tym z .NET 10, którego premiera przewidziana jest na koniec 2026 roku. Jej bezstanowa konstrukcja API jest zgodna z modelem programowania async-first wprowadzonym w nowoczesnym .NET, a obsługa systemu Linux i wdrożeń kontenerowych sprawia, że nadaje się ona do obciążeń natywnych dla chmury, gdzie popularność .NET wciąż rośnie. Ponieważ biblioteka jest dostarczana jako pojedynczy pakiet NuGet bez zależności uruchomieniowych specyficznych dla platformy, poza samym środowiskiem uruchomieniowym .NET, aktualizacja wersji .NET nie wymaga oddzielnych aktualizacji biblioteki ani dodatkowej konfiguracji.

Wnioski

Scandit SDK i IronBarcode reprezentują zasadniczo różne podejścia do przetwarzania kodów kreskowych, które odzwierciedlają różne konteksty wdrożeniowe. Scandit został stworzony do skanowania w czasie rzeczywistym za pomocą kamery na urządzeniach mobilnych, z architekturą koordynującą sesję na żywo z kamery, ustawienia analizy poszczególnych klatek oraz dostarczanie wyników w oparciu o zdarzenia. IronBarcode został stworzony do przetwarzania opartego na plikach i dokumentach na serwerach, komputerach stacjonarnych i w infrastrukturze chmurowej, z bezstanowym API, które akceptuje pliki, strumienie i pliki PDF oraz zwraca wyniki synchroniczne. Nie są to konkurencyjne implementacje tego samego pomysłu — są to różne pomysły służące różnym przypadkom użycia.

Scandit SDK to odpowiedni wybór dla aplikacji mobilnych, w których użytkownik kieruje aparat urządzenia na fizyczny BARCODE i potrzebuje wizualnej informacji zwrotnej w czasie poniżej 100 ms. Funkcje nakładania AR, jednoczesne wykrywanie wielu kodów kreskowych za pomocą MatrixScan oraz skanowanie dokumentów tożsamości za pomocą ID Scanning to specjalnie zaprojektowane funkcje, których nie oferuje żadna biblioteka BarCode oparta na plikach. Organizacje zatrudniające na dużą skalę pracowników terenowych korzystających z urządzeń mobilnych, oferujące usługi skanowania dla konsumentów lub wymagające umów SLA Enterprise dotyczących skanowania mobilnego stanowią grupę docelową, dla której firma Scandit została stworzona.

IronBarcode to właściwy wybór, gdy dane kodów kreskowych są dostarczane w postaci plików — obrazów, plików PDF, tablic bajtów lub strumieni przesyłania — a przetwarzanie odbywa się bez kamery, bez udziału użytkownika i bez interfejsu użytkownika. Przetwarzanie dokumentów po stronie serwera, punkty końcowe API ASP.NET Core, Azure Functions, zaplanowane zadania wsadowe i mikrousługi w kontenerach to środowiska, w których działa IronBarcode. Opublikowane ceny, dostęp do funkcji w ramach jednego pakietu oraz API do bezpośredniego odczytu plików eliminują problemy architektoniczne i niepewność budżetową, które model potoku kamerowego i model sprzedaży kontaktowej firmy Scandit wprowadzają w tych scenariuszach.

Szczera ocena jest taka, że wybór zależy w dużej mierze od kontekstu wdrożenia, a nie od preferencji. Projekt wymagający skanowania na żywo za pomocą kamery w telefonie ma jasną odpowiedź. Projekt wymagający ekstrakcji BARCODE-ów z plików PDF po stronie serwera ma równie jasną odpowiedź. Te dwie biblioteki są czasami mylone w obszarze pośrednim — aplikacjach MAUI, architekturach hybrydowych oraz organizacjach, które mają wymagania zarówno w zakresie skanowania mobilnego, jak i przetwarzania dokumentów. W takich przypadkach obie biblioteki mogą współistnieć: Scandit zajmuje się zadaniami związanymi z kamerą, a biblioteka IronBarcode przetwarzaniem dokumentów, przy czym żadna z bibliotek nie jest zmuszana do pełnienia roli, do której nie została zaprojektowana.

Często Zadawane Pytania

Czym jest Scandit SDK?

Scandit 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 Scandit SDK a IronBarcode?

IronBarcode wykorzystuje statyczne, bezstanowe API, które nie wymaga zarządzania instancjami, podczas gdy Scandit 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 licencja na IronBarcode jest łatwiejsza do uzyskania niż na Scandit 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 Scandit 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 Scandit 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 Scandit?

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 Scandit 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 Scandit SDK do IronBarcode jest prosta?

Migracja z Scandit 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().

Jordi Bardia
Inżynier oprogramowania
Jordi jest najbardziej biegły w Pythonie, C# i C++. Kiedy nie wykorzystuje swoich umiejętności w Iron Software, programuje gry. Dzieląc odpowiedzialność za testowanie produktów, rozwój produktów i badania, Jordi wnosi ogromną wartość do ciągłej poprawy produktów. Różnorodne doświadczenia ...
Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie