Neodynamic Barcode Professional vs IronBarcode: Porównanie bibliotek kodów kreskowych C#
Pakiet SDK czytnika kodów kreskowych firmy Neodynamic nie obsługuje kodów QR. Możesz kupić oba zestawy SDK firmy Neodynamic i nadal nie być w stanie odczytać tych samych kodów QR, które generuje dołączony generator. Ta pojedyncza sprzeczność — generator obsługujący kody QR, DataMatrix, PDF417 i Aztec w połączeniu z czytnikiem, który nie obsługuje żadnego z tych formatów — definiuje praktyczne doświadczenia związane z pracą z narzędziami do obsługi kodów kreskowych firmy Neodynamic i stanowi punkt odniesienia dla poniższego porównania z IronBarcode.
Zrozumienie BarCoda Neodynamic
Neodynamic oferuje funkcje związane z kodami kreskowymi poprzez dwa całkowicie odrębne produkty komercyjne: Barcode Professional SDK do generowania kodów kreskowych oraz Barcode Reader SDK do odczytu kodów kreskowych. Każdy produkt jest dystrybuowany jako osobny pakiet NuGet, wymaga osobnego zakupu i posiada własny klucz licencyjny. Projekt wymagający zarówno generowania, jak i odczytu musi zintegrować oba pakiety niezależnie, utrzymywać je w oddzielnych cyklach aktualizacji oraz konfigurować je podczas uruchamiania aplikacji.
Barcode Professional SDK to komponent generujący. Obsługuje szeroki zakres symboli, w tym formaty liniowe (Code 128, Code 39, EAN-13, UPC-A, Codabar, ITF) oraz formaty 2D (QR Code, DataMatrix, PDF417, Aztec). SDK wykorzystuje API oparte na instancjach: tworzony jest obiekt BarcodeInfo, przypisywane są jego właściwości, a następnie wywoływana jest funkcja GetImage() w celu wygenerowania obiektu System.Drawing.Image, który jest zapisywany za pośrednictwem standardowego potoku System.Drawing.Imaging. SDK zawiera zależność od System.Drawing, co ogranicza wdrażanie międzyplatformowe.
BarCode Reader SDK to komponent służący do odczytu. Akceptuje System.Drawing.Bitmap i zwraca wyniki tylko dla symboli 1D. QR, DataMatrix, PDF417, Aztec i wszystkie inne formaty 2D nie są obsługiwane przez czytnik. Po przesłaniu kodu kreskowego 2D SDK nie zwraca żadnych wyników — nie generuje wyjątku, a jedynie zwraca pusty zestaw wyników. Zespoły pracujące z produktami Neodynamic, które odkrywają to ograniczenie po zbudowaniu procesu generowania, stwierdzają, że przywrócenie możliwości odczytu 2D wymaga dodania trzeciej biblioteki spoza ekosystemu Neodynamic.
Kluczowe cechy architektury Neodynamic BarCode:
- Oddzielne produkty do generowania i odczytu: Projekt wykorzystujący obie funkcje wymaga dwóch pakietów NuGet, dwóch zakupów i dwóch kluczy licencyjnych.
- Generowanie 2D bez odczytu 2D: BarCode Professional SDK generuje kody QR, DataMatrix, PDF417 i Aztec, ale towarzyszący mu BarCode Reader SDK nie potrafi odczytać żadnego z tych formatów.
- API generowania oparte na instancjach: Generowanie wymaga skonstruowania obiektu
BarcodeInfoi przypisania właściwości przed wywołaniemGetImage(). - Zależność od System.Drawing: Oba zestawy SDK są zależne od
System.Drawing, co ogranicza wdrażanie w środowiskach Linux i kontenerowych bez dodatkowej konfiguracji. - Obsługa wyłącznie kodów 1D: Pakiet SDK czytnika BARCODE obsługuje kody Code 128, EAN-13, UPC-A, Code 39, Codabar, Interleaved 2 of 5 oraz MSI/Plessey. Nie zawiera formatów 2D.
- Brak natywnej obsługi plików PDF: Żadne z SDK nie odczytuje kodów kreskowych bezpośrednio z dokumentów PDF; wymagańy jest oddzielny etap wyodrębniania obrazów.
- Brak automatycznego wykrywania formatu: czytnik wnioskuje o formacie na podstawie tego, co obsługuje, a nie na podstawie treści obrazu.
Architektura Split SDK
Projekt, który nabywa oba zestawy SDK firmy Neodynamic, musi skonfigurować dwa oddzielne bloki licencji podczas uruchamiania. Podwójne przypisania LicenseOwner i LicenseKey używają różnych przestrzeni nazw i różnych nazw klas, a żaden z bloków nie jest świadomy istnienia drugiego:
// Neodynamic: two products, two license configurations
using Neodynamic.SDK.Barcode;
using Neodynamic.SDK.BarcodeReader;
// Generation license (Barcode Professional SDK)
BarcodeInfo.LicenseOwner = "Company";
BarcodeInfo.LicenseKey = "GEN-KEY";
// Reader license — separate purchase, separate key
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Company";
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-KEY";
// Neodynamic: two products, two license configurations
using Neodynamic.SDK.Barcode;
using Neodynamic.SDK.BarcodeReader;
// Generation license (Barcode Professional SDK)
BarcodeInfo.LicenseOwner = "Company";
BarcodeInfo.LicenseKey = "GEN-KEY";
// Reader license — separate purchase, separate key
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Company";
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-KEY";
Imports Neodynamic.SDK.Barcode
Imports Neodynamic.SDK.BarcodeReader
' Neodynamic: two products, two license configurations
' Generation license (Barcode Professional SDK)
BarcodeInfo.LicenseOwner = "Company"
BarcodeInfo.LicenseKey = "GEN-KEY"
' Reader license — separate purchase, separate key
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Company"
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-KEY"
Ten schemat powtarza się w każdym środowisku — programistycznym, testowym i produkcyjnym — i musi być zachowany przy każdej aktualizacji lub odnowieniu produktu.
Zrozumienie IronBarcode
IronBarcode to komercyjna biblioteka kodów kreskowych .NET opracowana przez Iron Software, która umożliwia generowanie i odczytywanie kodów kreskowych za pośrednictwem jednego pakietu NuGet na podstawie jednej licencji. Biblioteka wykorzystuje statyczny model API: generowanie odbywa się poprzez BarcodeWriter.CreateBarcode(), a odczyt poprzez BarcodeReader.Read(). Obie metody działają we wszystkich obsługiwanych systemach symbolicznych bez konieczności stosowania ścieżek kodu specyficznych dla danego formatu.
IronBarcode został stworzony bez zależności od System.Drawing, co pozwala na wdrożenie go w systemach Linux, macOS oraz w kontenerach Docker bez konieczności konfiguracji specyficznej dla danej platformy. Biblioteka odczytuje BarCodes z plików graficznych, strumieni obrazów i dokumentów PDF w sposób natywny, bez konieczności wykonywania oddzielnego kroku wyodrębniania obrazu w przypadku źródeł PDF.
Kluczowe cechy IronBarcode:
- Jeden pakiet do generowania i odczytu: jeden pakiet NuGet, jeden klucz licencyjny i jeden blok konfiguracyjny obejmują wszystkie operacje związane z kodami kreskowymi.
- Ujednolicona obsługa kodów 1D i 2D: Ten sam interfejs API odczytuje i generuje kody Code 128, EAN-13, QR Code, DataMatrix, PDF417, Aztec oraz ponad 50 innych symboli.
- Statyczne, płynne API:
BarcodeWriter.CreateBarcode()zwraca wynik, który można łączyć;BarcodeReader.Read()akceptuje ścieżki do plików, strumienie i dokumenty PDF. - Automatyczne wykrywanie formatu: czytnik rozpoznaje symbolikę na podstawie zawartości obrazu bez konieczności określania oczekiwanego formatu przez użytkownika.
- Brak zależności od System.Drawing: Wdrożenie wielopłatformowe w systemie Linux i w kontenerach działa bez dodatkowej konfiguracji bibliotek natywnych.
- Natywny odczyt plików PDF: BarCodes osadzone w dokumentach PDF są odczytywane bezpośrednio, zwracając metadane dotyczące numeru strony wraz z wartościami BarCoda.
- Przetwarzanie asynchroniczne i wsadowe:
BarcodeReader.ReadAsync()oraz wielostronicowe operacje wsadowe obsługują obciążenia serwerowe o dużej przepustowości.
Porównanie funkcji
Poniższa tabela podsumowuje najważniejsze różnice między produktami Neodynamic a IronBarcode:
| Funkcja | Neodynamic BarCode Professional | Neodynamic BarCode Reader | IronBarcode |
|---|---|---|---|
| Generowanie BarCode | Tak | Nie | Tak |
| Odczytywanie kodów kreskowych 1D | Nie | Tak | Tak |
| Odczytywanie kodów kreskowych 2D | Nie | Nie | Tak |
| Wymagane produkty | 1 (tylko generacja) | 1 (tylko do odczytu) | 1 (oba) |
| Wymagane klucze licencyjne | 1 na każdy zakupiony produkt | 1 na każdy zakupiony produkt | Łącznie 1 |
| Natywny odczyt BARCODE-ów z plików PDF | Nie | Nie | Tak |
| Zależność od System.Drawing | Tak | Tak | Nie |
Szczegółowe porównanie funkcji
| Funkcja | Neodynamic BarCode Professional | Neodynamic BarCode Reader | IronBarcode |
|---|---|---|---|
| Generacja | |||
| Generowanie kodu 128 | Tak | Nie dotyczy | Tak |
| Generowanie kodów EAN-13 / UPC-A | Tak | Nie dotyczy | Tak |
| Generowanie kodu 39 | Tak | Nie dotyczy | Tak |
| Generowanie kodów QR | Tak | Nie dotyczy | Tak |
| Generowanie kodów DataMatrix | Tak | Nie dotyczy | Tak |
| Generowanie kodów PDF417 | Tak | Nie dotyczy | Tak |
| Generacja Aztec | Tak | Nie dotyczy | Tak |
| Czytanie | |||
| Odczyt kodu 128 | Nie dotyczy | Tak | Tak |
| Odczyt EAN-13 / UPC-A | Nie dotyczy | Tak | Tak |
| Odczyt kodu 39 | Nie dotyczy | Tak | Tak |
| Odczyt kodów Codabar | Nie dotyczy | Tak | Tak |
| Odczytywanie kodów QR | Nie dotyczy | Nie | Tak |
| Odczyt DataMatrix | Nie dotyczy | Nie | Tak |
| Odczyt PDF417 | Nie dotyczy | Nie | Tak |
| Czytanie azteckie | Nie dotyczy | Nie | Tak |
| Automatyczne wykrywanie formatu | Nie dotyczy | Nie | Tak |
| Źródła danych wejściowych | |||
| Plik graficzny | Tak | Tak | Tak |
| Wprowadzanie dokumentów PDF | Nie | Nie | Tak |
| Dane wejściowe strumienia | Tak | Tak | Tak |
| Platforma i licencjonowanie | |||
| Zależność od System.Drawing | Tak | Tak | Nie |
| Obsługa systemu Linux / Docker | Ograniczone | Ograniczone | Tak |
| .NET Standard 2.0 | Tak | Tak | Tak |
| .NET 8 / .NET 9 | Tak | Ograniczone | Tak |
| Wymagane pakiety NuGet | 1 na produkt | 1 na produkt | Łącznie 1 |
| Wymagane klucze licencyjne | 1 na produkt | 1 na produkt | Łącznie 1 |
Obsługa formatów czytania
Najważniejszą różnicą techniczną w tym porównaniu jest różnica w formatach odczytu między dwoma zestawami SDK firmy Neodynamic a IronBarcode.
Podejście Neodynamic BarCode Reader
Neodynamic BarCode Reader obsługuje wyłącznie kody kreskowe liniowe. Gdy kod kreskowy 2D zostanie przesłany do czytnika, SDK zwraca pusty lub zerowy zestaw wyników. Nie jest zgłaszany żaden wyjątek, a żaden komunikat o błędzie nie wskazuje, co się stało. Zespoły pracujące z tym SDK zazwyczaj odkrywają to ograniczenie po wdrożeniu kodu wywołującego czytnik w odniesieniu do obrazów kodów QR i zauważeniu, że zbiór wyników jest zawsze pusty.
Typowym wzorcem defensywnym w kodach wykorzystujących Neodynamic Reader jest jawna kontrola, która zgłasza wyjątek, gdy oczekiwany jest format 2D:
// Neodynamic BarCode Reader SDK: QR code reading is not supported
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;
public string ReadQrCode(string imagePath)
{
using var bitmap = new Bitmap(imagePath);
var results = BarcodeReader.Read(bitmap);
// Results will be null or empty — QR codes are not recognised by this SDK
if (results == null || !results.Any())
{
throw new NotSupportedException(
"Neodynamic Barcode Reader does not support QR codes");
}
return results.First().Value;
}
// Neodynamic BarCode Reader SDK: QR code reading is not supported
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;
public string ReadQrCode(string imagePath)
{
using var bitmap = new Bitmap(imagePath);
var results = BarcodeReader.Read(bitmap);
// Results will be null or empty — QR codes are not recognised by this SDK
if (results == null || !results.Any())
{
throw new NotSupportedException(
"Neodynamic Barcode Reader does not support QR codes");
}
return results.First().Value;
}
Imports Neodynamic.SDK.BarcodeReader
Imports System.Drawing
Public Function ReadQrCode(imagePath As String) As String
Using bitmap As New Bitmap(imagePath)
Dim results = BarcodeReader.Read(bitmap)
' Results will be null or empty — QR codes are not recognised by this SDK
If results Is Nothing OrElse Not results.Any() Then
Throw New NotSupportedException("Neodynamic Barcode Reader does not support QR codes")
End If
Return results.First().Value
End Using
End Function
Metody tej nie da się zrealizować wyłącznie przy użyciu zestawu SDK Neodynamic Reader. NotSupportedException nie jest obejściem — jest to jedyna uczciwa odpowiedź, jaką czytelnik może udzielić na dane wejściowe 2D.
Podejście IronBarcode
IronBarcode odczytuje wszystkie obsługiwane symbole za pomocą tego samego wywołania BarcodeReader.Read(). Format jest wykrywany automatycznie na podstawie zawartości obrazu. QR, kod 128 i BarCode DataMatrix używają identycznego kodu wywołania:
using IronBarCode;
public string ReadQrCode(string imagePath)
{
// QR codes, DataMatrix, PDF417 — all handled automatically
var result = BarcodeReader.Read(imagePath).FirstOrDefault();
return result?.Value;
}
using IronBarCode;
public string ReadQrCode(string imagePath)
{
// QR codes, DataMatrix, PDF417 — all handled automatically
var result = BarcodeReader.Read(imagePath).FirstOrDefault();
return result?.Value;
}
Imports IronBarCode
Public Function ReadQrCode(imagePath As String) As String
' QR codes, DataMatrix, PDF417 — all handled automatically
Dim result = BarcodeReader.Read(imagePath).FirstOrDefault()
Return If(result?.Value, Nothing)
End Function
Zleceniodawca nie określa oczekiwanego formatu. IronBarcode identyfikuje symbolikę i zwraca wartość. Pełne informacje na temat opcji odczytu obrazów, w tym wykrywania wielu BARCODE'ów i wstępnego przetwarzania obrazów, można znaleźć w przewodniku dotyczącym odczytu BARCODE'ów z obrazów.
Generowanie kodów kreskowych
Zarówno Neodynamic BarCode Professional, jak i IronBarcode umożliwiają generowanie kodów kreskowych 1D i 2D. Różnica polega raczej na stylu API i śladzie zależności niż na możliwościach wyjściowych.
Professional approach to Neodynamic BarCode
API generowania firmy Neodynamic opiera się na instancjach. Obiekt BarcodeInfo jest tworzony, jego właściwości są przypisywane indywidualnie, a następnie wywoływana jest funkcja GetImage() w celu zwrócenia wartości System.Drawing.Image. Obraz jest następnie zapisywany przy użyciu wyliczenia System.Drawing.Imaging.ImageFormat:
using Neodynamic.SDK.Barcode;
// Configure license first
BarcodeInfo.LicenseOwner = "Your Company";
BarcodeInfo.LicenseKey = "YOUR-KEY";
// Build the barcode through property assignment
var barcode = new BarcodeInfo();
barcode.Value = "12345678";
barcode.Symbology = Symbology.Code128;
barcode.TextAlign = BarcodeTextAlignment.BelowCenter;
barcode.Dpi = 300;
// Get image and save via System.Drawing
System.Drawing.Image image = barcode.GetImage();
image.Save("output.png", System.Drawing.Imaging.ImageFormat.Png);
using Neodynamic.SDK.Barcode;
// Configure license first
BarcodeInfo.LicenseOwner = "Your Company";
BarcodeInfo.LicenseKey = "YOUR-KEY";
// Build the barcode through property assignment
var barcode = new BarcodeInfo();
barcode.Value = "12345678";
barcode.Symbology = Symbology.Code128;
barcode.TextAlign = BarcodeTextAlignment.BelowCenter;
barcode.Dpi = 300;
// Get image and save via System.Drawing
System.Drawing.Image image = barcode.GetImage();
image.Save("output.png", System.Drawing.Imaging.ImageFormat.Png);
Imports Neodynamic.SDK.Barcode
Imports System.Drawing
Imports System.Drawing.Imaging
' Configure license first
BarcodeInfo.LicenseOwner = "Your Company"
BarcodeInfo.LicenseKey = "YOUR-KEY"
' Build the barcode through property assignment
Dim barcode As New BarcodeInfo()
barcode.Value = "12345678"
barcode.Symbology = Symbology.Code128
barcode.TextAlign = BarcodeTextAlignment.BelowCenter
barcode.Dpi = 300
' Get image and save via System.Drawing
Dim image As Image = barcode.GetImage()
image.Save("output.png", ImageFormat.Png)
Zestaw SDK oferuje legalne opcje dostosowywania, w tym kontrolę DPI, wyrównanie tekstu, ustawienia kolorów oraz rozmiar strefy cichej. Są one przydatne w procesach PRINT, gdzie liczą się precyzyjne wymiary fizyczne. Sama funkcja generowania jest kompletna; Ograniczenia, które skłaniają do migracji, dotyczą strony odczytu, a nie generowania.
Podejście IronBarcode
IronBarcode wykorzystuje płynne podejście statyczne. Kodowanie i dane są przekazywane jako parametry do BarcodeWriter.CreateBarcode(), a format wyjściowy jest wyrażony jako nazwa metody w zwracanym obiekcie. Nie jest wymagańy import System.Drawing:
using IronBarCode;
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
.SaveAsPng("output.png");
using IronBarCode;
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
.SaveAsPng("output.png");
Imports IronBarCode
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128) _
.SaveAsPng("output.png")
W przypadku generowania barcode'ów 2D dedykowana klasa QRCodeWriter zapewnia dodatkowe opcje specyficzne dla kodów QR:
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.High)
.SaveAsPng("qrcode.png");
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.High)
.SaveAsPng("qrcode.png");
Imports IronBarCode
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.High) _
.SaveAsPng("qrcode.png")
Wskazówki dotyczące generowania symboli 1D z opcjami rozmiaru i adnotacji można znaleźć w przewodniku tworzenia BARCODE'ów 1D. Aby dowiedzieć się więcej o tworzeniu kodów kreskowych 2D, w tym DataMatrix i PDF417, zapoznaj się z przewodnikiem dotyczącym tworzenia kodów kreskowych 2D.
Licencjonowanie i struktura produktu
Model licencjonowania stanowi jedną z najbardziej praktycznych różnic między tymi dwiema opcjami dla zespołów tworzących systemy, które wymagają zarówno generowania, jak i odczytu.
Podejście Neodynamic
Funkcjonalność Neodynamic w zakresie kodów barcode jest podzielona na dwa oddzielnie licencjonowane produkty. Professional BarCode SDK obejmuje generowanie, a Barcode Reader SDK – odczyt. Każdy produkt wymaga osobnego zakupu i posiada oddzielny klucz licencyjny. Zespół, który zakupi oba produkty, musi utrzymywać dwa bloki konfiguracyjne LicenseOwner / LicenseKey, śledzić dwie oddzielne daty odnowienia oraz korzystać z dwóch oddzielnych kanałów wsparcia w przypadku pojawienia się problemów.
Cena pakietu BarCode Professional SDK wynosi około 245 USD za licencję dla jednego programisty. Pakiet BarCode Reader SDK wiąże się z dodatkowymi kosztami. Projekt wymagający zarówno generowania, jak i odczytu kodów 1D wiąże się zatem z łącznymi wydatkami sięgającymi lub przekraczającymi 500 USD na jednego programistę. Projekt wymagający odczytu 2D nie może spełnić tego wymogu przy użyciu produktów Neodynamic za żadną cenę — konieczne jest dodanie trzeciej biblioteki. Pełną listę elementów objętych jedną, ujednoliconą licencją można znaleźć na stronie poświęconej formatom BARCODE-ów obsługiwanych przez IronBarcode.
Podejście IronBarcode
IronBarcode jest sprzedawany jako pojedynczy produkt, który obejmuje wszystkie operacje związane z kodami kreskowymi — generowanie i odczyt we wszystkich obsługiwanych symbolikach — w ramach jednego klucza licencyjnego. Nie ma oddzielnej licencji dla czytnika, oddzielnej licencji dla generatora ani dodatkowych kosztów za obsługę formatu 2D. Klucz licencyjny jest ustawiany jednorazowo podczas uruchamiania aplikacji i nie wymaga dalszej konfiguracji:
IronBarCode.License.LicenseKey = "YOUR-KEY";
IronBarCode.License.LicenseKey = "YOUR-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-KEY"
Cena IronBarcode Lite wynosi 749 USD dla pojedynczego programisty i obejmuje pełen zestaw funkcji. Aby zapoznać się z aktualnymi poziomami cenowymi i opcjami ilościowymi, odwiedź stronę licencyjną IronBarcode.
Przewodnik po mapowaniu API
| Neodynamic API | Odpowiednik IronBarcode | Uwagi |
|---|---|---|
BarcodeInfo.LicenseOwner = "..." |
IronBarCode.License.LicenseKey = "key" |
Pojedynczy klucz zastępuje właściciela + parę kluczy |
BarcodeInfo.LicenseKey = "..." |
(part of single key above) | Brak oddzielnego pola właściciela |
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner |
(removed) | Nie jest wymagańe |
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey |
(removed) | Nie jest wymagańe |
new BarcodeInfo() |
BarcodeWriter.CreateBarcode(data, encoding) |
Metoda statyczna, bez instancji |
barcode.Value = data |
Pierwszy parametr CreateBarcode |
Zaliczone na etapie tworzenia |
barcode.Symbology = Symbology.Code128 |
BarcodeEncoding.Code128 |
Drugi parametr |
barcode.Symbology = Symbology.QRCode |
BarcodeEncoding.QRCode |
Pełna obsługa w obie strony |
barcode.GetImage().Save(path, ImageFormat.Png) |
.SaveAsPng(path) |
Płynny, bez wyliczenia ImageFormat |
BarcodeReader.Read(bitmap) |
BarcodeReader.Read(imagePath) |
Ścieżka pliku zastępuje obiekt Bitmap |
result.Value |
result.Value |
Ta sama nazwa właściwości |
throw new NotSupportedException(...) dla QR |
BarcodeReader.Read(imagePath) |
Zastąp standardowym wywołaniem read |
Kiedy zespoły rozważają przejście z Neodynamic BarCode na IronBarcode
Wymagania dotyczące odczytu kodów QR
Najczęstszym scenariuszem, który prowadzi zespoły z Neodynamic do IronBarcode, jest odkrycie, że kody QR wygenerowane przez Barcode Professional SDK nie mogą być odczytane przez Barcode Reader SDK. Zespoły tworzące systemy etykietowania produktów, narzędzia do zarządzania zapasami lub procesy śledzenia dokumentów często wdrażają generowanie i odczyt jako oddzielne fazy większego systemu. Gdy generowanie jest tworzone najpierw przy użyciu programu BarCode Professional, ograniczenie czytnika staje się widoczne dopiero w momencie próby uruchomienia komponentu odczytu. W tym momencie projekt został już przekazany firmie Neodynamic do realizacji, a dodanie trzeciej biblioteki do obsługi odczytu 2D wprowadza złożoność w zarządzaniu wersjami, która nie istniałaby w przypadku ujednoliconego zestawu SDK.
Zmniejszenie złożoności produktu
Niektóre zespoły decydują się na migrację nie z powodu konkretnej rozbieżności formatów, ale dlatego, że nakład pracy związany z utrzymywaniem dwóch oddzielnych produktów dla funkcji, która koncepcyjnie jest pojedynczą funkcją, staje się powracającym punktem tarcia. Dwa pakiety w pliku .csproj, dwa cykle odnawiania licencji, dwa zestawy informacji o wydaniu do przejrzenia oraz dwa potencjalne źródła niezgodności po zastosowaniu aktualizacji .NET lub Windows — żadne z tych obciążeń nie zapewnia funkcjonalności wykraczającej poza to, co oferowałby pojedynczy, ujednolicony pakiet. Zespoły przeprowadzające audyt zależności w ramach aktualizacji .NET często identyfikują układ podwójnego pakietu Neodynamic jako okazję do uproszczenia.
Przetwarzanie BarCodes w plikach PDF
Aplikacje przetwarzające dokumenty PDF zawierające kody kreskowe stanowią scenariusz, w którym oba zestawy SDK firmy Neodynamic nie spełniają wymagań jednocześnie. Ani SDK do generowania, ani SDK do odczytu nie mogą otworzyć pliku PDF i wyodrębnić wartości BARCODE z jego stron. Zespoły pracujące z listami przewozowymi, fakturami, dokumentacją medyczną lub dowolnym przepływem dokumentów, w którym BarCodes są osadzone w plikach PDF, muszą wdrożyć pośredni etap wyodrębniania obrazów, zanim będzie można przystąpić do odczytu. Ten etap ekstrakcji wymaga dodatkowej biblioteki IronBarcode, co oznacza, że projekt ma już trzecie zależności, aby obejść ograniczenie, które wyeliminowałaby pojedyncza instalacja IronBarcode.
Spójność formatowania w trybie odczytu i zapisu
Zespoły obsługujące procesy związane z BarCode na dużą skalę czasami zauważają, że niespójności w obsłudze formatów między generowaniem a odczytem powodują problemy z testowaniem i walidacją. Gdy system generuje kody QR w jednym celu, a odczytuje różne typy formatów w innym, rozbieżność między tym, co obsługuje generator, a tym, co obsługuje czytnik, powoduje luki w testach round-trip. System, w którym generowanie i odczyt korzystają z tej samej biblioteki i tej samej listy obsługiwanych formatów, jest łatwiejszy do zweryfikowania. Weryfikacja, czy wygenerowany BARCODE może zostać pomyślnie odczytany, staje się operacją wykonywaną w ramach jednej biblioteki, a nie testem integracyjnym obejmującym wiele bibliotek.
Typowe kwestie związane z migracją
Usuwanie podwójnych pakietów
Migracja z Neodynamic wymaga usunięcia obu pakietów NuGet: Neodynamic.SDK.Barcode i Neodynamic.SDK.BarcodeReader. Oba elementy należy usunąć z pliku .csproj, a obie odpowiadające im dyrektywy using należy usunąć z plików źródłowych. Wystarczy uruchomić dotnet remove package dla każdego z nich; nie ma między nimi żadnych wspólnych zależności, które wymagałyby dodatkowego porządkowania.
Porządkowanie konfiguracji podwójnej licencji
Dwa bloki konfiguracji licencji — jeden dla BarcodeInfo i jeden dla Neodynamic.SDK.BarcodeReader.BarcodeReader — zostały zastąpione pojedynczym przypisaniem IronBarCode.License.LicenseKey. Zadanie to jest wykonywane jednorazowo podczas uruchamiania aplikacji, zazwyczaj w Program.cs lub podczas bootstrapu wstrzykiwania zależności aplikacji. Wszelkie pliki konfiguracyjne lub zmienne środowiskowe, w których przechowywane są klucze licencyjne Neodynamic, można wycofać z użytku po zweryfikowaniu migracji.
Usunięcie wyjątku NotSupportedException
Kody źródłowe, które podczas tworzenia napotkały ograniczenie odczytu 2D, często zawierają metody zastępcze, które generują NotSupportedException podczas odczytu kodów QR lub DataMatrix. Metody te nie są obejściami — są one szczerym przyznaniem, że dana funkcja nie istniała. Po migracji do IronBarcode treść każdej z tych metod jest zastępowana standardowym wywołaniem BarcodeReader.Read(imagePath). Nie jest wymagańe żadne specjalne traktowanie; format jest wykrywany automatycznie.
Dodatkowe możliwości IronBarcode
Oprócz podstawowych punktów porównawczych, IronBarcode oferuje funkcje, które nie są dostępne w żadnym z produktów Neodynamic:
- Natywny odczyt kodów kreskowych z plików PDF:
BarcodeReader.Read("document.pdf")odczytuje kody kreskowe bezpośrednio z dokumentów PDF, zwracając informacje o numerze strony wraz z wartościami kodów kreskowych, bez konieczności pośredniego wyodrębniania obrazów. - Asynchroniczne przetwarzanie wsadowe:
BarcodeReader.ReadAsync()obsługuje odczyty bezblokujące, odpowiednie dla obciążeń po stronie serwera przetwarzających jednocześnie duże ilości obrazów lub dokumentów. - Korekcja błędów oparta na uczeniu maszynowym: IronBarcode stosuje korekcję błędów opartą na uczeniu maszynowym w celu odzyskania wartości z uszkodzonych, częściowo zasłoniętych lub niskiej rozdzielczości obrazów kodów kreskowych, które w przypadku standardowych dekoderów dałyby puste wyniki.
- Wykrywanie wielu barcode'ów: Pojedyncze wywołanie
BarcodeReader.Read()zwraca wszystkie barcode'y obecne na obrazie, w tym obrazy o mieszanym formacie zawierające jednocześnie symbole 1D i 2D. - Umieszczanie kodów kreskowych w plikach PDF: IronBarcode może zapisywać obrazy kodów kreskowych bezpośrednio w istniejących dokumentach PDF bez konieczności korzystania z oddzielnej biblioteki PDF.
- Opcje przetwarzania wstępnego obrazów: W czytniku można skonfigurować korekcję jasności, obrót oraz redukcję szumów, aby poprawić wskaźniki rozpoznawania na obrazach zarejestrowanych w trudnych warunkach.
Zgodność z platformą .NET i gotowość na przyszłość
IronBarcode obsługuje .NET Standard 2.0, .NET Framework 4.6.2 i nowsze wersje, .NET Core 3.1 oraz wszystkie aktualne wersje .NET, w tym .NET 8 i .NET 9. Biblioteka nie jest zależna od System.Drawing, co oznacza, że działa bez modyfikacji w systemie Linux oraz w kontenerach Docker. Zgodność Neodynamic BarCode Reader SDK z .NET 8 i .NET 9 jest ograniczona ze względu na zależność System.Drawing oraz dodatkową konfigurację biblioteki natywnej, której ta zależność wymaga w Årodowiskach innych niż Windows. IronBarcode jest regularnie aktualizowany zgodnie z harmonogramem wydawania platformy .NET, a kompatybilność z .NET 10, spodziewanym pod koniec 2026 roku, jest utrzymywana w ramach aktywnego rozwoju.
Wnioski
Neodynamic BarCode Professional SDK i Neodynamic BarCode Reader SDK stanowią razem model podzielonego produktu, w którym generowanie i odczyt są oddzielnymi ofertami komercyjnymi o odrębnych granicach możliwości. Generator obsługuje kody QR, DataMatrix, PDF417 i Aztec. Czytelnik nie. Ta asymetria nie jest drobnym zaniedbaniem — oznacza to, że te dwa produkty nie mogą stworzyć kompletnego przepływu pracy z BARCODE dla żadnej aplikacji wymagającej odczytu BARCODE 2D, a także oznacza, że formaty najczęściej używane w płatnościach mobilnych, śledzeniu produktów farmaceutycznych, logistyce wysyłkowej i przetwarzaniu dokumentów nie są obsługiwane przez ten czytnik.
Neodynamic BarCode Professional to dobry wybór, gdy wymagańe jest wyłącznie generowanie kodów. SDK zapewnia wysoką jakość wydruków w szerokiej gamie symboli, obsługuje kontrolę DPI i dostosowanie do konkretnych potrzeb drukowania oraz integruje się z szerszym ekosystemem Neodynamic ThermalLabel. Zespoły korzystające wyłącznie z systemów Windows, które potrzebują jedynie odczytu kodów 1D, mogą również korzystać z zestawu SDK BarCode Reader bez napotykania ograniczeń formatowych. W tym wąskim zakresie działania — wyłącznie generowanie lub odczyt 1D w systemie Windows — produkty Neodynamic spełniają swoje zadanie.
IronBarcode jest właściwym wyborem, gdy projekt wymaga zarówno generowania, jak i odczytu, gdy jakakolwiek część przepływu pracy obejmuje formaty 2D, gdy dokumenty PDF są źródłem danych kodów kreskowych lub gdy preferowana jest architektura jednopakietowa do zarządzania zależnościami. Ujednolicony model licencji, brak zależności od System.Drawing oraz automatyczne wykrywanie formatów we wszystkich obsługiwanych symbolikach sprawiają, że rozwiązanie to nadaje się do zastosowań wielopłatformowych, wdrożeń w chmurze oraz systemów przetwarzających różne formaty BarCode z różnych źródeł.
Wybór między tymi dwoma opcjami sprowadza się ostatecznie do pytania, czy ograniczenia formatowe w czytniku Neodynamic mają wpływ na dany projekt. W przypadku zespołów, których procesy pracy ograniczają się do generowania i odczytu BARCODE-ów 1D w systemie Windows, granica ta może nigdy nie zostać przekroczona. Dla zespołów, które potrzebują kodów QR zarówno po stronie generującej, jak i odczytującej w tym samym systemie, bariera ta jest nie do pokonania w ramach rodziny produktów Neodynamic i wymagańa jest inna biblioteka, niezależnie od tego, która zostanie wybrana.
Często Zadawane Pytania
Co to jest Neodynamic Barcode Professional?
Neodynamic Barcode Professional to biblioteka .NET do generowania i odczytywania kodów kreskowych w aplikacjach C#. Jest jedną z kilku alternatyw, które deweloperzy rozważają przy wyborze rozwiązania do kodów kreskowych dla projektów .NET.
Jakie są główne różnice między Neodynamic Barcode Professional a IronBarcode?
IronBarcode używa statycznego, bezstanowego API, które nie wymaga zarządzania instancjami, podczas gdy Neodynamic Barcode Professional zazwyczaj wymaga utworzenia i skonfigurowania instancji przed użyciem. IronBarcode zapewnia także natywne wsparcie dla PDF, automatyczne wykrywanie formatu oraz licencjonowanie na jednym kluczu we wszystkich środowiskach.
Czy IronBarcode jest łatwiejsze do licencjonowania niż Neodynamic Barcode Professional?
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 wspiera wszystkie formaty kodów kreskowych, które wspiera Neodynamic Barcode Professional?
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.
Jak IronBarcode obsługuje przetwarzanie wsadowe w porównaniu do Neodynamic Barcode Professional?
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ę ocenić IronBarcode przed zakupem, w odróżnieniu od Neodynamic?
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 cenowa między Neodynamic Barcode Professional 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 łatwo jest migrować z Neodynamic Barcode Professional do IronBarcode?
Migracja z Neodynamic Barcode Professional do IronBarcode polega głównie na zastąpieniu wywołań API opartych na instancjach statycznymi metodami IronBarcode, usunięciu licencyjnego boilerplate oraz aktualizacji nazw właściwości wyników. Większość migracji polega na zmniejszeniu ilości kodu zamiast jego dodawania.
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().

