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

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

Scandit SDKkontra IronBarcode: Skanowanie kamerą a przetwarzanie dokumentów oparte na plikach

Aby rozpocząć odczytywanie kodów kreskowych za pomocą Scandit, należy skonfigurować DataCaptureContext, utworzyć BarcodeCaptureSettings, włączyć symbologie wyraźnie, zdobyć kamerę, ustawić ją jako źródło ramki, przełączyć kamerę na stan On i umożliwić rejestrację. Pricing jest tylko na podstawie kontaktu z działem sprzedaży, bez opublikowanej oficjalnej ceny.

Ta kombinacja — ścieżka kamery jako pierwsza i model cenowy oparty na kontakt-sprzedaż — kształtuje, które scenariusze .NET pasują do Scanditu, a które nie. Dla przetwarzania dokumentów po stronie serwera, API ASP.NET Core, które odczytuje kody kreskowe z przesłanych plików, albo funkcja Azure, która przetwarza PDF-y wysyłkowe, założenia ścieżki kamery są przeszkodą, a nie zdolnością. To porównanie bada, skąd pochodzi architektura Scandit, gdzie IronBarcode pasuje zamiast tego i jakie są różnice między dwoma bibliotekami w praktyce.

Zrozumienie Scandit SDK

Scandit SDK to komercyjna platforma do skanowania BarCode przeznaczona dla środowisk mobilnych i edge computing. Biblioteka jest zaprojektowana do obsługi skanowania w czasie rzeczywistym na urządzeniach iOS, Android i MAUI, z wyspecjalizowanymi liniami produktowymi obejmującymi nakładki augmented reality, jednoczesne wykrywanie wielu kodów kreskowych i skanowanie dokumentów tożsamości. Podstawowym kontekstem wdrożenia Scandit jest mobilni pracownicy terenowi, operacje magazynowe i scenariusze punktów interakcji w handlu detalicznym, gdzie zarówno fizyczna kamera, jak i użytkownik na żywo są obecni.

Architektura biblioteki jest zorganizowana wokół potoku DataCaptureContext, który koordynuje sesję kamery, ustawienia analizy ramek i konfigurację rejestracji kodu kreskowego jako zjednoczonego systemu stanowego. 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 architekturyScandit SDKobejmują:

  • 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 zaczyna się od skonstruowania DataCaptureContext i podłączenia jej do instancji kamery zanim jakakolwiek praca z kodem kreskowym może się rozpocząć.
  • Wyraźne Deklarowanie Symbologii: Formatów kodów kreskowych należy włączyć pojedynczo, używając EnableSymbologies, zanim sesja rejestracji się rozpocznie. Automatyczne wykrywanie nie jest dostępne.
  • Dostarczanie Wyników Sterowane Zdarzeniami: Wyniki kodu kreskowego są dostarczane asynchronicznie poprzez zdarzenia zwrotne (BarcodeScanned), zamiast być zwracane synchronicznie z 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.
  • Wycenianie na podstawie cytatu: Według strony cennika Scandit, płatne edycje są cytowane na podstawie edycji, urządzeń, ilości skanów i długości umowy; dostępna jest bezpłatna wersja próbna i Wydanie Społecznościowe.
  • 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.DataCapture.Core.Maui, Scandit.DataCapture.Barcode.Maui

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.DataCapture.Core.Maui, Scandit.DataCapture.Barcode.Maui

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.Maui
Imports Scandit.DataCapture.Barcode.Maui

' Scandit SDK: full camera pipeline setup
' NuGet: Scandit.DataCapture.Core.Maui, Scandit.DataCapture.Barcode.Maui

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 konfiguruje infrastrukturę kamery. Interfejs API nie ujawnia ścieżki pliku, PDF lub argumentu strumienia w tym punkcie wejściowym - zakłada, że uruchomiono kamerę przed rozpoczęciem pracy z kodem kreskowym.

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 wywołanie statyczne BarcodeReader.Read akceptuje ścieżkę do pliku, strumień, tablicę bajtów lub PDF i zwraca kolekcję wyników.

IronBarcode jest dostarczany jako pojedynczy pakiet NuGet zawierający wszystkie zdolności odczytu i generowania w ponad 50 formatach 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 wymagana ż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 Równoległe: Stateless API jest z natury bezpieczne dla wątków, umożliwiając Parallel.ForEach oraz wzorce asynchroniczne dla scenariuszy wsadowych 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ędzyScandit SDKa 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 Nie jest dokumentowanym celem 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 Nie jest dokumentowanym celem 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.) Wszechstronny (zgodnie z dokumentacją symbologii Scandit) 50+
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 Nie jest dokumentowaną funkcją przetwarzania pliku 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 Nie jest dokumentowanym celem 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 Nie jest dokumentowanym celem 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 Możliwe (wymienione jako zmienne cenowe) 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 ramki kamery w czasie rzeczywistym. DataCaptureContext utrzymuje aktywną sesję kamery, a BarcodeCapture nasłuchuje kodów kreskowych w każdej przychodzącej ramce. Wyniki kodu kreskowego 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 akceptuje ścieżkę do pliku, strumień lub tablicę bajtów, wykonuje wszystkie wykrywania synchronicznie i zwraca kolekcję 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-LICENSE-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-LICENSE-KEY";
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
    Console.WriteLine($"{result.Value} ({result.Format})");
Imports IronBarCode

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

IronBarCode.License.LicenseKey = "YOUR-LICENSE-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, co nie ma odpowiednika w środowiskach obliczeń bezserwerowych, wdrożeniach w kontenerach lub usługach przetwarzania w tle.

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

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 udokumentowanym 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
Funkcje Azure / 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

Potok kamery Scandit został zaprojektowany dla jednej 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 w 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.ReadIronBarcode jest bezstanowa, jest z natury bezpieczna do wywołania z wielu wątków jednocześnie. Przetwarzanie wsadowe równoległe nie wymaga 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 to ważny argument dla BarcodeReader.Read, a wyniki obejmują właściwość PageNumber wskazującą, na której stronie dokumentu znaleziono każdy kod kreskowy:

// 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 wymienia funkcje i nazwy produktów – SparkScan, MatrixScan, ID Scanning, AR Overlays, Parser – i kieruje zapytania cenowe przez rozmowę sprzedażową. Proces cytowania zazwyczaj obejmuje opisanie przypadku użycia, szacowanie ilości skanowania, określenie urządzeń, omówienie poziomów wsparcia i wybranie długości umowy przed przedstawieniem kwoty kosztów. Każda linia produktów Scandit jest osobno wyceniona i osobno kontraktowana, więc rozszerzenie dostępu do funkcji może wymagać dodatkowego cyklu sprzedażowego.

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
Plus 1499 USD jednorazowo 3 3
Professional 2999 USD jednorazowo 10 10
Nieograniczona $5,999 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 pakietuScandit SDKa 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; nie wymaga obiektu kontekstowego
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 += obsługiwacz zdarzeń Iteracja nad wartością zwrotną BarcodeReader.Read() Zbiórka synchroniczna; brak systemu zdarzeń
args.Session.NewlyRecognizedBarcodes Wartość zwrotna 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) Pojedyncza paczka IronBarcode Brak oddzielnych dodatków

Kiedy zespoły rozważają przejście zScandit SDKna IronBarcode

Wymagania dotyczące przetwarzania po stronie serwera

Zespoły budujące API ASP.NET Core, usługi przetwarzania w tle lub funkcje Azure stwierdzają, że architektura Scandit jest zorientowana na założenia, które nie mają zastosowania w środowisku serwerowym. Potok DataCaptureContext oraz kamera oczekują sprzętu kamery i źródła ramki na żywo. Kiedy wymagania dotyczące kodów kreskowych w projekcie są całkowicie po stronie serwera — odczytywanie z przesłanych plików, przetwarzanie kolejek dokumentów, wyodrębnianie danych kodu kreskowego z nadchodzących PDF-ów — pipeline kamery dodaje kroki inicjalizacji i ograniczenia platformowe, które nie mają znaczenia dla obciążenia.

Przetwarzanie dokumentów w trybie wsadowym

Organizacje przetwarzające duże ilości dokumentów zawierających kody kreskowe — listy przewozowe, faktury, rejestry inwentarzowe, formularze medyczne — stwierdzają, że model źródła klatek Scandit jest zorientowany na ciągłe sesje kamery, a nie na dyskretne dokumenty z deterministycznymi punktami startu i zakończenia. Gdy objętość dokumentów rośnie, a przetwarzanie równoległe staje się konieczne, zaprojektowana jako stanowa ścieżka kamery wymaga dodatkowego inżynierii, aby się dostosować.

Przejrzystość cen

Zespoły deweloperskie pracujące nad propozycjami budżetowymi, porównaniami dostawców lub analizami kosztów i korzyści dla nowych projektów potrzebują rozmowy sprzedażowej, aby określić koszt licencji Scandit. Kiedy projekt ma określony budżet i określony harmonogram, wymaganie rozmowy sprzedażowej do uzyskania oferty cenowej dodaje kroki do oceny i planowania. Zespoły oceniające jednocześnie kilka opcji bibliotek mogą stwierdzić, że brak opublikowanego cennika utrudnia skonstruowane porównania obok siebie.

Zmniejszenie złożoności potoku

Nawet gdy Scandit jest już wdrożony do skanowania kamerą mobilną, wymagania dotyczące kodów kreskowych po stronie serwera w tej samej aplikacji mogą wymagać innego narzędzia. Ścieżka kamery, która pasuje do skanowania w czasie rzeczywistym na urządzeniach mobilnych, dodaje złożoność, gdy jest stosowana do przetwarzania dokumentów statycznych. Zespoły, które osiągnęły ten punkt, często przyjmująIronBarcode do przetwarzania po stronie serwera obok istniejącego wdrożenia Scanbot, zamiast rozszerzania ścieżki kamery o przepływy pracy dokumentu.

Typowe kwestie związane z migracją

Pipeline kamery nie ma odpowiednika w postaci pliku

Cały blok inicjalizacji DataCaptureContext — tworzenie kontekstu, konfiguracja ustawień, włączenie symbologii, pozyskanie kamery, przypisanie źródła ramki i przejście stanu — nie ma odpowiednika w 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. Zamiennik IronBarcode to przypisanie klucza licencyjnego, a następnie wywołanie BarcodeReader.Read.

Wywołanie zwrotne zdarzenia do bezpośredniego powrotu

Scandit dostarcza wyniki kodu kreskowego poprzez zdarzenie BarcodeScanned, ponieważ skanowanie kamery na żywo jest z natury asynchroniczne.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.Collections.Generic

' 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ł symbologie ze względu na wydajność, odpowiednia optymalizacja w IronBarcode jest dostępna przez BarcodeReaderOptions.ExpectBarcodeTypes, ale nie jest wymagana do rozpoczęcia.

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 Kodów Kreskowych: Pojedyncze wywołanie BarcodeReader.Read wykrywa wszystkie kody kreskowe obecne w dokumencie, w tym formaty mieszane na tej samej stronie, używając opcji ExpectMultipleBarcodes.
  • Odczyt Kodów Kreskowych z MAUI: W aplikacjach MAUI, używających modelu capture-and-process,IronBarcode obsługuje krok przetwarzania po uchwyceniu zdjęcia, używając MediaPicker.
  • Wejście Strumienia i Tablicy Bajtów: Oprócz ścieżek do plików, BarcodeReader.Read akceptuje wejścia Stream oraz byte[], umożliwiając integrację z obsługiwaczami przesyłania, buforami pamięci i strumieniami sieciowymi bez tworzenia tymczasowych plików.

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

IronBarcode obsługuje .NET Framework 4.6.2 i nowsze, .NET Standard 2.0 oraz współczesne wersje .NET, w tym .NET 6, .NET 8, .NET 9 i .NET 10. Biblioteka regularnie otrzymuje aktualizacje, aby utrzymywać kompatybilność z obecnymi wydaniami .NET. Jego bezpaństwowy design API pasuje do modelu programowania async-first używanego w nowoczesnych .NET, a wsparcie dla Linuxa i wdrożeń kontenerowych pasuje do obciążeń w chmurze. 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. Jego opublikowane ceny, dostęp do funkcji z jednego pakietu i API bezpośredniego odczytywania plików są zaprojektowane dla tych scenariuszy, w których model kamery Scandit i cennik oparty na kontakt-sprzedaż są zorientowane na inne kształty wdrożenia.

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().

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie