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ściSymbology,Data,WidthorazHeightjako właściwości, a następnie wywołaliGenerateBarcode(), 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)
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 restoreobsł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
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
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
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" .
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:
- Odczytywanie BarCodes z obrazów:
BarcodeReader.Read()dekoduje wszystkie główne symbole 1D i 2D z plików PNG, JPEG, TIFF i innych formatów obrazów - Odczytywanie kodów kreskowych z plików PDF: natywna obsługa plików PDF — nie jest wymagańa oddzielna biblioteka do wyodrębniania danych z plików PDF
- Osadzanie logo w kodzie QR:
QRCodeWriter.CreateQrCode()z.AddBrandLogo()dla markowych kodów QR - Generowanie formatów 2D: Data Matrix, PDF417 i Aztec oprócz kodu QR
- Wykrywanie wielu BARCODE-ów:
BarcodeReaderOptions.ExpectMultipleBarcodeswyszukuje wszystkie BARCODE-y na jednym obrazie - Dostosowanie szybkości odczytu:
ReadingSpeedenum równoważy przepustowość z dokładnością w przypadku przetwarzania dużych ilości danych - Integracja z .NET Core: zwraca
byte[]bezpośrednio z.ToPngBinaryData(), zapewniając przejrzyste odpowiedzi akcji kontrolera
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().

