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
DataCaptureContexti 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
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.ForEachoraz 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
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
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)
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
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
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.Readwykrywa wszystkie kody kreskowe obecne w dokumencie, w tym formaty mieszane na tej samej stronie, używając opcjiExpectMultipleBarcodes. - 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.Readakceptuje wejściaStreamorazbyte[], 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().

