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

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

Neodynamic Barcode vs IronBarcode: Porównanie rozdzielonej architektury SDK oraz wsparcia formatu

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 używa API opartego na instancjach: tworzony jest obiekt BarcodeProfessional, przypisywane są jego właściwości Code i Symbology, a funkcja GetBarcodeImage() jest wywoływana w celu wygenerowania System.Drawing.Image, który jest zapisywany za pomocą standardowej rury produkcyjnej System.Drawing.Imaging. Edycja .NET Framework ma zależność od System.Drawing; osobna edycja .NET Standard jest dystrybuowana przez ComponentSource.

BarCode Reader SDK to komponent służący do odczytu. Akceptuje System.Drawing.Bitmap i zwraca wyniki tylko dla symbologii 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. SDK Barcode Reader oznaczono jako koniec okresu usługi 31 grudnia 2019 roku, a jego pakiet NuGet (Neodynamic.SDK.BarcodeReader 1.0.2000) nie był aktualizowany od lipca 2012 roku, przy wsparciu tylko dla .NET Framework 2.0/3.x/4.x. Odzyskanie zdolnosci odczytu 2D wymaga wiec 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: Generacja wymaga skonstruowania obiektu BarcodeProfessional i przypisania właściwości przed wywołaniem GetBarcodeImage().
  • Zależność System.Drawing w większości edycji: Edycja Barcode Professional .NET Windows i SDK Barcode Reader polegają na System.Drawing, co ogranicza wdrożenia dla Linux i kontenerów dla tych edycji. Wydanie Barcode Professional .NET Standard uzywa SkiaSharp i unika tej zaleznosci.
  • 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; wymagany 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 zakupi oba SDK Neodynamic, musi skonfigurować dwa oddzielne bloki licencyjne 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 świadom istnienia drugiego:

// Neodynamic: two products, two license configurations
using Neodynamic.SDK.Barcode;
using Neodynamic.SDK.BarcodeReader;

// Generation license (Barcode Professional SDK)
BarcodeProfessional.LicenseOwner = "Company";
BarcodeProfessional.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)
BarcodeProfessional.LicenseOwner = "Company";
BarcodeProfessional.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)
BarcodeProfessional.LicenseOwner = "Company"
BarcodeProfessional.LicenseKey = "GEN-KEY"

' Reader license — separate purchase, separate key
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Company"
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-KEY"
$vbLabelText   $csharpLabel

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 używa modelu API statycznego: generacja odbywa się przez BarcodeWriter.CreateBarcode(), a odczyt przez BarcodeReader.Read(). Obie metody działają we wszystkich obsługiwanych systemach symbolicznych bez konieczności stosowania ścieżek kodu specyficznych dla danego formatu.

IronBarcode jest zbudowany bez zależności od System.Drawing, co umożliwia jego wdrożenie na Linuxie, macOS i w kontenerach Docker bez wymogu specyficznej konfiguracji platformowej. 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 obsluga 1D i 2D: To samo API odczytuje i generuje ponad 50 symbologii, w tym Code 128, EAN-13, kod QR, DataMatrix, PDF417 i Aztec.
  • Statyczne płynne API: BarcodeWriter.CreateBarcode() zwraca wynik, który można kontynuować w łańcuchu; BarcodeReader.Read() akceptuje ścieżki 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() i operacje wsadowe wielostronicowe wspierają serwerowe zadania 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 Edycja-specyficzna 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 Edycja-specyficzna Tak Nie
Obsługa systemu Linux / Docker Tak (edycja .NET Standard) Nie Tak
.NET Standard 2.0 Tak (edycja .NET Standard) Nie Tak
.NET 8 / .NET 9 Tak (edycja .NET Standard) Nie 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:

using Neodynamic.SDK.BarcodeReader;
using System.Drawing;

public string ReadQrCode(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    var reader = new BarcodeReader();
    var results = reader.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;
}
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;

public string ReadQrCode(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    var reader = new BarcodeReader();
    var results = reader.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 reader As New BarcodeReader()
        Dim results = reader.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
$vbLabelText   $csharpLabel

Metody tej nie da się zrealizować wyłącznie przy użyciu zestawu SDK Neodynamic Reader. NotSupportedException nie jest obejściem — odzwierciedla rzeczywiste ograniczenie możliwości czytnika dla danych wejściowych 2D.

Podejście IronBarcode

IronBarcode odczytuje wszystkie obsługiwane symbologie przez jedno wywołanie 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
$vbLabelText   $csharpLabel

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. Tworzony jest obiekt BarcodeProfessional, jego właściwości są przypisywane indywidualnie, a następnie wywoływana jest funkcja GetBarcodeImage() w celu zwrócenia System.Drawing.Image. Obraz jest następnie zapisywany za pomocą wyliczenia System.Drawing.Imaging.ImageFormat:

using Neodynamic.SDK.Barcode;

// Configure license first
BarcodeProfessional.LicenseOwner = "Your Company";
BarcodeProfessional.LicenseKey = "YOUR-KEY";

// Build the barcode through property assignment
var barcode = new BarcodeProfessional();
barcode.Code = "12345678";
barcode.Symbology = Symbology.Code128;
barcode.BarcodeUnit = BarcodeUnit.Pixel;

// Get image and save via System.Drawing
System.Drawing.Image image = barcode.GetBarcodeImage();
image.Save("output.png", System.Drawing.Imaging.ImageFormat.Png);
using Neodynamic.SDK.Barcode;

// Configure license first
BarcodeProfessional.LicenseOwner = "Your Company";
BarcodeProfessional.LicenseKey = "YOUR-KEY";

// Build the barcode through property assignment
var barcode = new BarcodeProfessional();
barcode.Code = "12345678";
barcode.Symbology = Symbology.Code128;
barcode.BarcodeUnit = BarcodeUnit.Pixel;

// Get image and save via System.Drawing
System.Drawing.Image image = barcode.GetBarcodeImage();
image.Save("output.png", System.Drawing.Imaging.ImageFormat.Png);
Imports Neodynamic.SDK.Barcode
Imports System.Drawing

' Configure license first
BarcodeProfessional.LicenseOwner = "Your Company"
BarcodeProfessional.LicenseKey = "YOUR-KEY"

' Build the barcode through property assignment
Dim barcode As New BarcodeProfessional()
barcode.Code = "12345678"
barcode.Symbology = Symbology.Code128
barcode.BarcodeUnit = BarcodeUnit.Pixel

' Get image and save via System.Drawing
Dim image As Image = barcode.GetBarcodeImage()
image.Save("output.png", Imaging.ImageFormat.Png)
$vbLabelText   $csharpLabel

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żany jako nazwa metody na zwróconym obiekcie. Nie jest wymagany 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")
$vbLabelText   $csharpLabel

Do generowania kodów kreskowych 2D dedykowana klasa QRCodeWriter oferuje dodatkowe opcje specyficzne dla kodów QR:

using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .SaveAsPng("qrcode.png");
using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .SaveAsPng("qrcode.png");
Imports IronBarCode

QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest) _
    .SaveAsPng("qrcode.png")
$vbLabelText   $csharpLabel

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 konfiguracji LicenseOwner / LicenseKey, śledzić dwie oddzielne daty odnowienia i obsługiwać dwa oddzielne kanały wsparcia, gdy pojawią się problemy.

SDK Barcode Professional jest wyceniony na około $352 za jedną licencję dewelopera w edycji podstawowej oraz od około $705 w edycji Ultimate (licencje deweloperskie poprzez ComponentSource). SDK Barcode Reader ma osobny koszt i jest dostarczany według starego cennika — produkt został oznaczony jako koniec cyklu serwisowego dnia 31 grudnia 2019. Projekt, który wymaga odczytu 2D, nie może spełnić tego wymogu z produktami Neodynamic za jakąkolwiek cenę; należy dodać trzecią bibliotekę. 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-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

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

API Neodynamic Odpowiednik IronBarcode Uwagi
BarcodeProfessional.LicenseOwner = "..." IronBarCode.License.LicenseKey = "key" Pojedynczy klucz zastępuje właściciela + parę kluczy
BarcodeProfessional.LicenseKey = "..." (part of single key above) Brak oddzielnego pola właściciela
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner (removed) Nie jest wymagane
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey (removed) Nie jest wymagane
new BarcodeProfessional() BarcodeWriter.CreateBarcode(data, encoding) Metoda statyczna, bez instancji
barcode.Code = 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.GetBarcodeImage().Save(path, ImageFormat.Png) .SaveAsPng(path) Płynny, bez wyliczenia ImageFormat
new BarcodeReader().Read(bitmap) BarcodeReader.Read(imagePath) Metoda statyczna, akceptuje ścieżkę pliku
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 odnowienia licencji, dwa zestawy notatek o wydaniu do przeglądu i dwa potencjalne źródła niekompatybilności w przypadku zastosowania aktualizacji .NET lub Windows — żaden z tych narzutów nie dostarcza funkcjonalności poza tym, co zapewniłby jeden zintegrowany pakiet. Zespoły przeprowadzające audyt zależności jako część aktualizacji .NET często identyfikują układ z dwoma pakietami 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 muszą zostać usunięte z pliku .csproj, a oba odpowiadające dyrektywy using muszą zostać usunięte z plików źródłowych. Uruchomienie dotnet remove package dla każdego z nich jest wystarczające; 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 BarcodeProfessional i jeden dla Neodynamic.SDK.BarcodeReader.BarcodeReader — są oba zastąpione pojedynczym przypisaniem IronBarCode.License.LicenseKey. To przypisanie jest wykonywane raz podczas uruchamiania aplikacji, zazwyczaj w Program.cs lub w bootstrap aplikacji do wstrzykiwania zależności. Wszelkie pliki konfiguracyjne lub zmienne środowiskowe, które przechowują klucze licencyjne Neodynamic, mogą zostać wycofane po zweryfikowaniu migracji.

Usunięcie wyjątku NotSupportedException

Bazy kodów, które napotkały ograniczenie odczytu 2D podczas rozwoju, często zawierają metody zastępcze, które rzucają NotSupportedException dla odczytu kodów QR lub DataMatrix. Te metody nie są obejściami — to szczere uznanie, że możliwość nie istniała. Po migracji do IronBarcode, każda taka metoda zostaje zastąpiona standardowym wywołaniem BarcodeReader.Read(imagePath). Nie jest wymagane ż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:

  • Rodzimy odczyt kodów kreskowych z PDF: BarcodeReader.Read("document.pdf") odczytuje kody kreskowe bezpośrednio z dokumentów PDF, zwracając informacje o numerze strony obok wartości kodów kreskowych, bez potrzeby pośredniego wyodrębniania obrazów.
  • Asynchroniczne przetwarzanie wsadowe: BarcodeReader.ReadAsync() wspiera nieblokujące odczyty odpowiednie dla zadań po stronie serwera przetwarzających równocześ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 kodów kreskowych: Jedno wywołanie BarcodeReader.Read() zwraca wszystkie kody kreskowe obecne na obrazie, w tym obrazy mieszane zawierające jednocześnie symbologie 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 wspiera .NET Standard 2.0, .NET Framework 4.6.2 i nowsze, .NET Core 3.1 oraz wszystkie aktualne wydania .NET, w tym .NET 8 i .NET 9. Biblioteka nie ma zależności od System.Drawing, co oznacza, że działa bez modyfikacji na Linuxie i w kontenerach Docker. Neodynamic BarCode Reader SDK celuje tylko w .NET Framework 2.0/3.x/4.x — jego pakiet NuGet nie został zaktualizowany od lipca 2012, a produkt został oznaczony jako koniec cyklu serwisowego na dzień 31 grudnia 2019, więc nie obsługuje .NET Core, .NET 5+, Linux ani Docker. SDK Barcode Professional jest dostarczany w wielu edycjach; Edycja .NET Standard używa SkiaSharp i działa na .NET Core / .NET 5+, podczas gdy edycja .NET Windows zachowuje zależność System.Drawing.IronBarcode otrzymuje aktualizacje zgodnie z kadencją wydania .NET.

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 wymagane 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 licencyjny, brak zależności od System.Drawing oraz automatyczne wykrywanie formatu we wszystkich obsługiwanych symbologiach czynią go odpowiednim dla aplikacji międzyplatformowych, wdrożeń w chmurze oraz systemów przetwarzających miks formatów kodów kreskowych 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 wymagana 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().

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