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

Barcode4.NET vs IronBarcode: Porównanie bibliotek kodów kreskowych C#

Barcode4NET zakończył cykl życia bez formalnego ogłoszenia. Nowe licencje przestały być sprzedawane za pośrednictwem ComponentSource, nigdy nie opublikowano pakietu NuGet, a biblioteka jest przeznaczona wyłącznie dla platformy .NET Framework. Dla zespołów, które odziedziczyły zależność od Barcode4NET, niniejszy artykuł porównuje możliwości tej biblioteki Barcode4NET z tym, co obecnie oferuje biblioteka IronBarcode — uwzględniając zasięg platformy, projekt API, możliwości odczytu kodów kreskowych oraz realia licencyjne, które sprawiają, że bezpośrednia ocena tych rozwiązań jest nieco nietypowa.

Zrozumienie Barcode4NET

BarCode4NET była komercyjną biblioteką do generowania kodów kreskowych, dystrybuowaną za pośrednictwem ComponentSource i podobnych sprzedawców oprogramowania. Został zaprojektowany dla aplikacji .NET Framework opartych na systemie Windows — głównie Windows Forms i ASP.NET Web Forms — i zapewniał czysty wydruk bitmapowy dla podstawowych symboli 1D tamtej epoki.

Biblioteka nigdy nie była dostępna jako pakiet NuGet. Był dystrybuowany jako biblioteka DLL, którą programiści dodawali do kontroli wersji lub umieszczali w wspólnej lokalizacji artefaktów. Każdy projekt, w którym było to używane, wymagał ręcznego elementu <Reference> w pliku .csproj, wskazującego na bibliotekę DLL na dysku. Była to standardowa praktyka w czasach, gdy Barcode4NET był aktywny, ale powoduje to znaczne utrudnienia we współczesnych procesach CI/CD.

Kluczowe cechy architektury Barcode4NET:

  • API ustawiające właściwości: Programiści utworzyli obiekt Barcode, przypisali mu właściwości Symbology, Data, Width oraz Height jako właściwości, a następnie wywołali GenerateBarcode(), aby otrzymać System.Drawing.Bitmap
  • Skupienie na symbolice 1D: Obsługiwane są Code128, Code39, EAN-13 i UPC-A; Obsługa kodów QR była ograniczona w zależności od wersji
  • Tylko generowanie: produkt nigdy nie posiadał funkcji odczytu ani skanowania BarCode
  • Tylko Windows i .NET Framework: brak obsługi .NET Core, .NET 5+, Linux, macOS, Docker ani środowiska uruchomieniowego w chmurze
  • Brak dystrybucji NuGet: w każdym pliku projektu i potoku kompilacji wymagańe jest ręczne odwołanie do biblioteki DLL
  • Koniec cyklu życia: brak nowych licencji, brak poprawek bezpieczeństwa, brak poprawek błędów oraz brak ścieżki migracji od dostawcy

Barcode4NET Generation API

Cały proces generowania w Barcode4NET wykorzystywał wzorzec ustawiający właściwości:

// Barcode4NET — manual DLL, .NET Framework only
// Nie Pakiet NuGet — requires ThirdParty/Barcode4NET/Barcode4NET.dll in source control
using Barcode4NET;
using System.Drawing;
using System.Drawing.Imaging;

var barcode = new Barcode4NET.Barcode();
barcode.Symbology = Symbology.Code128;
barcode.Data = "ITEM-12345";
barcode.Width = 300;
barcode.Height = 100;
Bitmap barcodeImage = barcode.GenerateBarcode();
barcodeImage.Save(outputPath, ImageFormat.Png);
// Barcode4NET — manual DLL, .NET Framework only
// Nie Pakiet NuGet — requires ThirdParty/Barcode4NET/Barcode4NET.dll in source control
using Barcode4NET;
using System.Drawing;
using System.Drawing.Imaging;

var barcode = new Barcode4NET.Barcode();
barcode.Symbology = Symbology.Code128;
barcode.Data = "ITEM-12345";
barcode.Width = 300;
barcode.Height = 100;
Bitmap barcodeImage = barcode.GenerateBarcode();
barcodeImage.Save(outputPath, ImageFormat.Png);
Imports Barcode4NET
Imports System.Drawing
Imports System.Drawing.Imaging

Dim barcode As New Barcode4NET.Barcode()
barcode.Symbology = Symbology.Code128
barcode.Data = "ITEM-12345"
barcode.Width = 300
barcode.Height = 100
Dim barcodeImage As Bitmap = barcode.GenerateBarcode()
barcodeImage.Save(outputPath, ImageFormat.Png)
$vbLabelText   $csharpLabel

To wszystko, co oferuje interfejs API Barcode4NET. Biblioteka nie oferowała płynnego łańcuchowania, funkcji odczytu, generowania plików PDF ani zaawansowanych opcji kodów QR, takich jak osadzanie logo lub kontrola korekcji błędów.

Zrozumienie IronBarcode

IronBarcode to komercyjna biblioteka kodów kreskowych .NET firmy Iron Software, która w jednym pakiecie obejmuje zarówno generowanie, jak i odczytywanie kodów kreskowych. Jest dystrybuowany wyłącznie za pośrednictwem NuGet, obsługuje platformy od .NET Framework 4.6.2 do .NET 9 i działa w systemach Windows, Linux, macOS, Docker, Azure oraz AWS Lambda.

Biblioteka opiera się na płynnym statycznym API. Generator używa BarcodeWriter.CreateBarcode() z ciągiem danych i typem kodowania, a po nim opcje łańcuchowe dotyczące rozmiaru, koloru i formatu. Funkcja Reading wykorzystuje BarcodeReader.Read(), która akceptuje ścieżki do plików graficznych, strumienie oraz dokumenty PDF bez konieczności stosowania oddzielnej biblioteki PDF.

Kluczowe cechy IronBarcode:

  • Płynny interfejs API do generowania statycznego: BarcodeWriter.CreateBarcode() łączy .ResizeTo(), .AddAnnotationTextAboveBarcode() oraz metody zapisywania w jednym wyrażeniu
  • Odczytywanie BarCodes: BarcodeReader.Read() natywnie dekoduje BarCodes z obrazów i plików PDF
  • Obsługa szerokiej gamy formatów: Code128, Code39, EAN-13, UPC-A, QR Code, Data Matrix, PDF417, Aztec i inne
  • Specjalizacja w zakresie kodów QR: QRCodeWriter.CreateQrCode() zapewnia opcje specyficzne dla kodów QR, w tym osadzanie logo i poziom korekcji błędów
  • Dystrybucja NuGet: Standardowa instalacja dotnet add package IronBarcode; dotnet restore obsługuje wszystkie zależności
  • Wielopłatformowość: Działa na platformach .NET 5, 6, 7, 8 i 9 w systemach Windows, Linux i macOS, w tym w kontenerach Docker i bezserwerowych środowiskach chmurowych
  • Aktywny produkt komercyjny: regularne aktualizacje, poprawki bezpieczeństwa, aktualizacje zgodności z Wersją .NET oraz licencje dostępne w sprzedaży po określonych cenach

Porównanie funkcji

Poniższa tabela przedstawia najważniejsze różnice między Barcode4NET a IronBarcode:

Funkcja Barcode4NET IronBarcode
Pakiet NuGet Nie — tylko ręczna biblioteka DLL Tak (IronBarcode)
Generowanie BarCode Tak Tak
Odczytywanie BarCode Nie Tak
Obsługa wielu platform Nie — tylko Windows Tak — Windows, Linux, macOS
Aktywna konserwacja Nie (koniec cyklu życia) Tak
Dostępne są nowe licencje Nie Tak

Szczegółowe porównanie funkcji

Funkcja Barcode4NET IronBarcode
Generacja
Generowanie kodu 128 Tak Tak
Generowanie kodów Code39 Tak Tak
Generowanie kodów EAN-13 / UPC-A Tak Tak
Generowanie kodów QR Ograniczone Tak — QRCodeWriter.CreateQrCode()
Kod QR z logo Nie Tak — .AddBrandLogo()
Data Matrix / PDF417 / Aztec Nie Tak
Płynny, łańcuchowy interfejs API Nie Tak
Czytanie
Odczytywanie BarCode z obrazów Nie Tak — BarcodeReader.Read()
Odczytywanie BarCode'ów z plików PDF Nie Tak — natywne, bez dodatkowej biblioteki
Wykrywanie wielu kodów BarCode Nie Tak — ExpectMultipleBarcodes
Konfiguracja prędkości czytania Nie Tak — ReadingSpeed enum
Platforma
.NET Framework Tak Tak (.NET Framework 4.6.2+)
.NET 5 / 6 / 7 / 8 / 9 Nie Tak
Linux / macOS Nie Tak
Docker Nie Tak
Azure / AWS Lambda Nie Tak
Dystrybucja
Pakiet NuGet Nie Tak
dotnet restore zgodny Nie Tak
Integracja CI/CD Ręczne kroki dotyczące bibliotek DLL Standardowe przywracanie
Konserwacja
Aktywny rozwój Nie (koniec cyklu życia) Tak
Poprawki bezpieczeństwa Nie Tak
Poprawki błędów Nie Tak
Nowe licencje Nie Tak — Lite 749 USD, Plus 1499 USD, Professional 2999 USD, Unlimited 5999 USD

Projekt API generowania

API generowania stanowi najbardziej bezpośredni punkt porównania między tymi dwiema bibliotekami, ponieważ generowanie było jedyną funkcją oferowaną przez Barcode4NET.

Podejście Barcode4NET

Barcode4NET wykorzystywał imperatywny wzorzec ustawiający właściwości. Programiści utworzyli instancję obiektu Barcode, przypisali poszczególne właściwości i wywołali GenerateBarcode(), aby otrzymać System.Drawing.Bitmap:

using Barcode4NET;
using System.Drawing;
using System.Drawing.Imaging;

public Bitmap GenerateLabel(string sku)
{
    var barcode = new Barcode4NET.Barcode();
    barcode.Symbology = Symbology.Code128;
    barcode.Data = sku;
    barcode.Width = 400;
    barcode.Height = 120;
    return barcode.GenerateBarcode();
}
using Barcode4NET;
using System.Drawing;
using System.Drawing.Imaging;

public Bitmap GenerateLabel(string sku)
{
    var barcode = new Barcode4NET.Barcode();
    barcode.Symbology = Symbology.Code128;
    barcode.Data = sku;
    barcode.Width = 400;
    barcode.Height = 120;
    return barcode.GenerateBarcode();
}
Imports Barcode4NET
Imports System.Drawing
Imports System.Drawing.Imaging

Public Function GenerateLabel(sku As String) As Bitmap
    Dim barcode As New Barcode4NET.Barcode()
    barcode.Symbology = Symbology.Code128
    barcode.Data = sku
    barcode.Width = 400
    barcode.Height = 120
    Return barcode.GenerateBarcode()
End Function
$vbLabelText   $csharpLabel

Typ zwracanej wartości — System.Drawing.Bitmap — oznaczał, że kod wywołujący był odpowiedziąlny za zapisanie, wyświetlenie lub strumieniowe przesyłanie obrazu. Było to odpowiednie dla aplikacji WinForms, w których Bitmap można było przypisać bezpośrednio do PictureBox, ale wymagało dodatkowych kroków konwersji dla każdego innego celu wyjściowego.

Podejście IronBarcode

IronBarcode wykorzystuje płynny statyczny interfejs API. Pojedyncze wywołanie metody inicjuje generowanie, a metody łańcuchowe konfigurują wynik przed metodą końcowego zapisania lub konwersji:

// NuGet: dotnet add package IronBarcode
using IronBarCode;

public byte[] GenerateLabel(string sku)
{
    return BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128)
        .ResizeTo(400, 120)
        .ToPngBinaryData();
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;

public byte[] GenerateLabel(string sku)
{
    return BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128)
        .ResizeTo(400, 120)
        .ToPngBinaryData();
}
Imports IronBarCode

Public Function GenerateLabel(sku As String) As Byte()
    Return BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128) _
        .ResizeTo(400, 120) _
        .ToPngBinaryData()
End Function
$vbLabelText   $csharpLabel

Wyliczenie BarcodeEncoding odpowiada bezpośrednio wyliczeniu Symbology. .ResizeTo() zastępuje przypisania właściwości Width i Height. Metody terminala — .SaveAsPng(), .SaveAsJpeg(), .ToPngBinaryData() — zastępują oddzielne wywołania GenerateBarcode() i bitmap-save. W przypadku bardziej zaawansowanych scenariuszy generowania kodów kreskowych zapoznaj się z dokumentacją dotyczącą generowania kodów kreskowych IronBarcode.

Możliwość odczytu BarCode

Największą różnicą między tymi dwiema bibliotekami jest poziom zaawansowania. BarCode4NET nigdy nie oferował funkcji odczytu kodów kreskowych w żadnej wersji. IronBarcode oferuje pełną funkcjonalność odczytu w tym samym pakiecie, co generowanie.

Podejście Barcode4NET

Barcode4NET nie posiadał API do odczytu. Zespoły, które musiały dekodować BARCODES z obrazów lub zeskanowanych dokumentów, musiały zintegrować całkowicie oddzielną bibliotekę — albo ZXing.Net, alternatywę open source, albo komercyjny zestaw SDK do skanowania. W rezultacie powstały dwa oddzielne łańcuchy zależności: Barcode4NET do generowania oraz druga biblioteka do odczytu.

Podejście IronBarcode

IronBarcode udostępnia BarcodeReader.Read() jako metodę statyczną, która akceptuje ścieżki do plików graficznych, obiekty strumieniowe oraz dokumenty PDF:

using IronBarCode;

// Read from an image file
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
    Console.WriteLine($"Value: {result.Value}");
    Console.WriteLine($"Format: {result.Format}");
}

// Read all barcodes from a multi-page PDF — no extra PDF library required
var pdfResults = BarcodeReader.Read("invoice-batch.pdf");
foreach (var result in pdfResults)
{
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
}
using IronBarCode;

// Read from an image file
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
    Console.WriteLine($"Value: {result.Value}");
    Console.WriteLine($"Format: {result.Format}");
}

// Read all barcodes from a multi-page PDF — no extra PDF library required
var pdfResults = BarcodeReader.Read("invoice-batch.pdf");
foreach (var result in pdfResults)
{
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
}
Imports IronBarCode

' Read from an image file
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
    Console.WriteLine($"Value: {result.Value}")
    Console.WriteLine($"Format: {result.Format}")
Next

' Read all barcodes from a multi-page PDF — no extra PDF library required
Dim pdfResults = BarcodeReader.Read("invoice-batch.pdf")
For Each result In pdfResults
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}")
Next
$vbLabelText   $csharpLabel

W przypadku scenariuszy z dużą ilością obrazów lub obrazami o wysokim poziomie szumu klasa BarcodeReaderOptions zapewnia kontrolę nad prędkością odczytu i wykrywaniem wielu BARCODE-ów. Opcje konfiguracyjne można znaleźć w dokumentacji dotyczącej odczytu kodów kreskowych BarCode.

Zakres platform i wdrożeń

Obsługa platform stanowi najbardziej znaczącą różnicę dla zespołów realizujących projekty modernizacji .NET.

Podejście Barcode4NET

Barcode4NET został skompilowany przy użyciu zestawów .NET Framework. Działało w systemie Windows, w aplikacjach .NET Framework, w projektach Web Forms i Windows Forms hostowanych przez IIS. Nie było kompilacji dla systemu Linux, kompilacji dla .NET Core ani obsługi środowiska uruchomieniowego w chmurze. Kiedy firma Microsoft wprowadziła platformę .NET Core, a następnie ujednoliciła ją jako .NET 5+, produkt Barcode4NET nie otrzymał odpowiednich aktualizacji. Żaden projekt skierowany do net5.0 lub nowszej wersji nie może w ogóle odwoływać się do tej biblioteki.

Model dystrybucji DLL pogłębił ograniczenia platformy. Każde środowisko kompilacji — stacja robocza programisty, agent kompilacji, kontener Docker — wymagało, aby biblioteka DLL znajdowała się w znanej ścieżce. W przypadku wdrożeń opartych na kontenerach oznaczało to albo wbudowanie biblioteki DLL w niestandardowy obraz bazowy, albo skopiowanie jej podczas kompilacji kontenera, a żadna z tych metod nie jest zgodna ze standardowymi dotnet restore procesami.

Podejście IronBarcode

IronBarcode obsługuje wiele frameworków z jednego pakietu NuGet: od .NET Framework 4.6.2 do .NET 9 oraz wszystkie aktualne wersje .NET na systemach Windows, Linux i macOS. Wdrażanie do kontenerów Docker wykorzystuje standardowe obrazy środowiska uruchomieniowego .NET Standard bez modyfikacji. Azure Functions, AWS Lambda i inne środowiska uruchomieniowe bezserwerowe są obsługiwane przez ten sam pakiet NuGet. Polecenie dotnet restore rozwiązuje wszystkie zależności bez konieczności ręcznego zarządzania bibliotekami DLL.

Architektura licencji i status dostawcy

Sytuacja licencyjna Barcode4NET nie jest czynnikiem konkurencyjnym — jest to praktyczne ograniczenie, które wpływa na każdą decyzję dotyczącą dalszego korzystania z biblioteki.

Podejście Barcode4NET

Barcode4NET został wycofany z produkcji. Nowe licencje nie są dostępne za pośrednictwem ComponentSource ani żadnego innego kanału. Jeśli programista dołącza do zespołu korzystającego z Barcode4NET, nie ma mechanizmu umożliwiającego zakup licencji dla niego. W zależności od struktury istniejących licencji nowy programista może nie mieć prawnego uprawnienia do uruchamiania lub debugowania kodu związanego z kodami kreskowymi podczas tworzenia oprogramowania. Nie ma systemu śledzenia błędów, kanału wsparcia ani dostawcy, z którym można skontaktować się w sprawie usterek. Luki w zabezpieczeniach wykryte po ostatniej aktualizacji pozostają na stałe nieusunięte.

Podejście IronBarcode

IronBarcode to aktywnie rozwijany produkt komercyjny z Licencją wieczystą. Ceny zaczynają się od 749 USD za Lite License dla jednego programisty, dostępne są również poziomy Plus License (1499 USD, 3 programistów), Professional License (2999 USD, 10 programistów) oraz Unlimited License (5999 USD). Wszystkie poziomy obejmują wdrożenie bez opłat licencyjnych. Poprawki bezpieczeństwa, poprawki błędów i aktualizacje zgodności z wersjami .NET są dostarczane w regularnych odstępach czasu. Dostępna jest 30-dniowa bezpłatna wersja próbna do oceny bez klucza licencyjnego.

Przewodnik po mapowaniu API

Barcode4NET IronBarcode
new Barcode4NET.Barcode() BarcodeWriter.CreateBarcode(data, encoding)
barcode.Symbology = Symbology.Code128 BarcodeEncoding.Code128 (parametr do CreateBarcode)
barcode.Data = "ITEM-12345" Pierwszy parametr CreateBarcode()
barcode.Width = 300; BARCODE.Height = 100 .ResizeTo(300, 100)
barcode.GenerateBarcode() zwraca Bitmap .SaveAsPng(path) / .ToPngBinaryData()
Symbology.QRCode BarcodeEncoding.QRCode
Symbology.Code39 BarcodeEncoding.Code39
Symbology.EAN13 BarcodeEncoding.EAN13
Symbology.UPCA BarcodeEncoding.UPCA
Ręczna biblioteka DLL <Reference Include="Barcode4NET"> <PackageReference Include="IronBarcode" />
Brak API do odczytu BarcodeReader.Read(path)
Brak obsługi plików PDF BarcodeReader.Read("doc.pdf") native
Tylko .NET Framework .NET Framework 4.6.2 do .NET 9

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

Zablokowana aktualizacja .NET

Najczęstszym czynnikiem skłaniającym do tłumaczenia jest projekt modernizacji platformy .NET. Zespół wybiera net8.0 w swoim .csproj, uruchamia kompilację i napotyka błąd kompilacji, ponieważ Barcode4NET został skompilowany przy użyciu zestawów .NET Framework, do których nie ma już odniesień. Błąd jest jednoznaczny: biblioteka nie załaduje się w nowym środowisku docelowym. W tej chwili zespół stoi przed dylematem — cofnąć zmianę frameworka docelowego i pozostać przy .NET Framework lub zastąpić Barcode4NET. Migracji nie można odłożyć bez zablokowania szerszych działań modernizacyjnych.

Awarie potoku CI/CD po zmianach infrastruktury

Model dystrybucji bibliotek DLL firmy Barcode4NET powoduje utajoną niestabilność w procesach kompilacji. W przypadku ponownego skonfigurowania agenta kompilacji, aktualizacji obrazu kontenera lub skonfigurowania nowego środowiska CI, bibliotekę DLL Barcode4NET należy ręcznie umieścić w ścieżce oczekiwanej przez plik projektu. Zespoły, które nie udokumentówały tego etapu dokładnie, odkrywają problem dopiero wtedy, gdy proces się nie powiedzie. Przejście na IronBarcode oznacza, że dotnet restore zajmuje się wszystkim — problem z lokalizacją biblioteki DLL przestaje istnieć.

Nowi członkowie zespołu nie mogą uzyskać licencji

Gdy do projektu dołącza wykonawca lub drugi programista musi pracować nad funkcjami BarCode, nie ma potrzeby zakupu licencji. Zespół musi obejść to ograniczenie — albo nowy programista całkowicie unika kodu BARCODE, albo ktoś przenosi licencję, która zgodnie z pierwotnymi warunkami może nie podlegać przeniesieniu. Żadna z tych sytuacji nie jest do utrzymania dla zespołu, który aktywnie rozwija produkt.

Audyty bezpieczeństwa i zgodności

Organizacje, które generują listy komponentów oprogramowania (SBM) lub sprawdzają zależności w bazach danych dotyczących wycofanych produktów, napotykają Barcode4NET jako wynik wyszukiwania. Jest to produkt komercyjny bez aktywnego dostawcy, bez śledzenia CVE i bez dostępności poprawek. Audytorzy bezpieczeństwa traktują komercyjne zależności, których cykl życia dobiegł końca, inaczej niż dojrzałe biblioteki open source — brak procesu reagowania ze strony dostawcy oznacza, że wszelkie luki w zabezpieczeniach pozostają trwałe nieusunięte. Zazwyczaj staje się to formalnym punktem wymagającym naprawy, a nie ryzykiem odroczonym.

Możliwość czytania dodana do istniejącego przepływu pracy

Zespoły, które początkowo używały Barcode4NET wyłącznie do generowania kodów kreskowych, później odkrywają, że muszą weryfikować kody kreskowe ze skanowanych dokumentów, przetwarzać obrazy przesłane przez użytkowników lub wyodrębniać dane z faktur w formacie PDF. W przypadku Barcode4NET wymaga to zintegrowania drugiej biblioteki. IronBarcode BarcodeReader.Read() obsługuje natywnie zarówno obrazy, jak i pliki PDF, konsolidując zależności w jednym, utrzymywanym pakiecie.

Typowe kwestie związane z migracją

Usunięcie odwołania do biblioteki DLL

Barcode4NET nigdy nie był dystrybuowany jako pakiet NuGet, więc nie ma polecenia dotnet remove package. Każdy plik .csproj odwołujący się do biblioteki zawiera element <Reference Include="Barcode4NET"> z <HintPath> wskazującym na bibliotekę DLL na dysku. Każdy z tych elementów musi zostać znaleziony i usunięty ręcznie. Wyszukiwanie w całym rozwiązaniu pozwala je zlokalizować:

grep -rl "Barcode4NET" --include="*.csproj" .
grep -rl "Barcode4NET" --include="*.csproj" .
SHELL

Katalog DLL w kontroli wersji — zazwyczaj ThirdParty/Barcode4NET/ lub lib/ — musi również zostać oznaczony do usunięcia za pomocą git rm.

Zmiana typu zwracanego z bitmapy na tablicę bajtów

Funkcja GenerateBarcode() biblioteki Barcode4NET zwraca System.Drawing.Bitmap. Łańcuch płynności IronBarcode kończy się na .ToPngBinaryData(), zwracając byte[] lub .SaveAsPng() zapisując bezpośrednio na dysk. Kod, który przypisuje wartość zwracaną do zmiennej typu Bitmap lub przekazuje ją do metody oczekującej Bitmap — na przykład WinForms PictureBox — wymaga jednolinijkowej korekty w miejscu wywołania: należy zawrzeć tablicę bajtów w MemoryStream i wywołać Image.FromStream().

Symbologia Zmiana nazwy wyliczenia

Wyliczenie Symbology w Barcode4NET odpowiada bezpośrednio wyliczeniu BarcodeEncoding w IronBarcode. Wszystkie typowe wartości — Code128, Code39, EAN13, UPCA, QRCode — zachowują swoje nazwy. Wymiana Symbology. na BarcodeEncoding. w całym rozwiązaniu obejmuje większość przypadków, jednak każda zmiana powinna zostać sprawdzona w celu potwierdzenia kontekstu.

Porządkowanie skryptów kompilacji

Należy zaktualizować skrypty kompilacji oraz pliki konfiguracyjne CI/CD, które kopiują bibliotekę DLL Barcode4NET do katalogów wyjściowych lub agentów kompilacji. Te kroki nie mają odpowiednika po migracji do NuGet — dotnet restore zastępuje całe ręczne zarządzanie bibliotekami DLL. Pozostawienie nieaktualnych kopii plików DLL po migracji nie spowoduje błędów kompilacji, ale stanowią one martwą konfigurację, która może powodować zamieszanie wśród przyszłych opiekunów projektu.

Dodatkowe możliwości IronBarcode

Funkcje dostępne w IronBarcode, które nie były częścią Barcode4NET w żadnym momencie jego cyklu życia:

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

IronBarcode obsługuje platformy od .NET Framework 4.6.2 do .NET 9 i otrzymuje aktualizacje zapewniające kompatybilność wraz z wydaniem nowych wersji .NET. Ponieważ premiera .NET 10 przewidziana jest na koniec 2026 r., firma Iron Software publikuje wersje kompatybilne z wersjami zapoznawczymi przed ogólną dostępnością. Barcode4NET nie ma wersji .NET poza .NET Framework i nie będzie otrzymywać żadnych przyszłych aktualizacji. Zespoły korzystające z platformy .NET Framework 4.x mogą przejść na IronBarcode, a następnie swobodnie aktualizować swoją platformę docelową do dowolnej obecnej lub przyszłej wersji .NET bez ograniczeń związanych z biblioteką IronBarcode.

Wnioski

Barcode4NET i IronBarcode reprezentują różne etapy w historii rozwoju kodów kreskowych w środowisku .NET. Barcode4NET była funkcjonalną biblioteką o dobrze określonym zakresie działania jak na swoje czasy — API do ustawiania właściwości, które generowało czysty wynik bitmapowy dla aplikacji Windows Forms i Web Forms w środowisku .NET Framework. IronBarcode to aktualny produkt komercyjny z płynnym statycznym API, pełną obsługą odczytu kodów kreskowych, obsługą wielu platform oraz standardową dystrybucją NuGet.

Porównanie to jest nietypowe, ponieważ Barcode4NET nie jest już aktywnym produktem. Nie otrzymuje aktualizacji, poprawek bezpieczeństwa ani nowych licencji. Zespoły oceniające, którą bibliotekę wybrać do nowego projektu, nie napotkają Barcode4NET w tej ocenie — jest ona istotna tylko dla zespołów, które już ją wykorzystują w produkcji i decydują, kiedy i jak przeprowadzić migrację.

Dla zespołów, które używają Barcode4NET w środowisku produkcyjnym, IronBarcode jest naturalnym zamiennikiem. Mapowanie API jest bezpośrednie, zmiany w kodzie są powierzchowne, a semantyka generowania jest równoważna. Korzyścią jest zależność, która jest faktycznie utrzymywana, może być zainstalowana przez nowych członków zespołu i jest kompatybilna z nowoczesnymi wersjami .NET oraz środowiskami wdrożeniowymi.

Szczera ocena jest taka, że nie jest to wybór między dwiema realnymi opcjami. Barcode4NET nie może być udostępniany nowym członkom zespołu, nie działa na nowoczesnym środowisku .NET i nie można go aktualizować w celu usunięcia luk w zabezpieczeniach. IronBarcode może to zrobić. Decyzja o migracji wynika raczej z tych praktycznych ograniczeń niż z preferencji dotyczących API lub porównania funkcji.

Często Zadawane Pytania

Czym jest Barcode4.NET?

BarCode4.NET 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 Barcode4.NET a IronBarcode?

IronBarcode wykorzystuje statyczne, bezstanowe API, które nie wymaga zarządzania instancjami, podczas gdy Barcode4.NET 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 Barcode4.NET?

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 Barcode4.NET?

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 Barcode4.NET?

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 Barcode4.NET?

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 Barcode4.NET 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 Barcode4.NET do IronBarcode jest prosta?

Migracja z Barcode4.NET do IronBarcode polega przede wszystkim na zastąpieniu wywołań API opartych na instancjach statycznymi metodami IronBarcode, usunięciu standardowych fragmentów kodu dotyczących licencji oraz aktualizacji nazw właściwości wyników. Większość migracji wiąże się raczej z redukcją kodu niż z jego dodawaniem.

Czy IronBarcode generuje kody QR z logo?

Tak. Funkcja QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") osadza obraz marki w kodzie QR w sposób natywny z konfigurowalną korekcją błędów. Kolorowe kody QR są również obsługiwane za pomocą funkcji ChangeBarCodeColor().

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

Zespol wsparcia Iron

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