PORÓWNAJ Z INNYMI KOMPONENTAMI

DevExpress BarCode vs IronBarcode: UI Control vs Samodzielna Biblioteka

Curtis Chau
Curtis Chau
Updated: 26 kwietnia 2026

DevExpress to ceniony zestaw narzędzi UI dla platformy .NET. Siatka, harmonogram, wykres i kontrolki tabeli przestawnej są szeroko używane przez zespoły Enterprise. Obsługa BARCODE to jednak zupełnie inna historia. DevExpress dostarcza BarCodeControl - kontrolkę WinForms i znacznik Blazor DxBarCode - który pozwala na renderowanie kodu kreskowego na formularzu. Wsparcie DevExpress potwierdziło, że brak modlu odczytu i nie ma planów jego dodania. Jeśli BarCodes znajdują się w zadaniu w tle, interfejsie API sieci Web, dokumencie PDF lub dowolnym środowisku bez formularza interfejsu użytkownika, to ograniczenie nie ma zastosowania.

To ograniczenie zawęża ofertę kodów kreskowych DevExpress do konkretnej niszy: wizualnego renderowania kodów kreskowych w interfejsie użytkownika DevExpress WinForms lub Blazor. W tej niszy działa to dobrze. Do wszystkiego innego - generowania po stronie serwera, odczytu z obrazów lub plików PDF, przetwarzania bezinterfejsowego w Azure Functions lub kontenerach Docker - potrzebne jest inne narzędzie.

Zrozumienie kontrolek BarCode DevExpress

DevExpress BarCodeControl znajduje się w DevExpress.XtraEditors, z klasami generatora symboliki w DevExpress.XtraPrinting.BarCode. Nie jest to biblioteka samodzielna. Jest ono związane z pakietem DXperience, który zaczyna się od 1 699,99 USD rocznie (subskrypcje Universal to 2 299,99 USD). Nie ma osobnego pakietu NuGet zawierającego wyłącznie kody kreskowe, który można by zainstalować.

BarCodeControl to kontrolka WinForms. Konfiguruje się to za pomocą obiektu symbologii, ustawia właściwości, a następnie wyświetla się na ekranie. Zapisanie tego renderingu do pliku wymaga wywołania DrawToBitmap, które oczekuje wstępnie przypisanego Bitmap odpowiedniego rozmiaru:

// DevExpress WinForms: UI control, not a library
using DevExpress.XtraEditors;              // BarCodeControl
using DevExpress.XtraPrinting.BarCode;     // Code128Generator, etc.
using System.Drawing;
using System.Drawing.Imaging;

var barCode = new BarCodeControl();
var symbology = new Code128Generator();
symbology.CharacterSet = Code128CharacterSet.CharsetAuto;
barCode.Symbology = symbology;
barCode.Text = "ITEM-12345";
barCode.Module = 0.02f;  // document units, not pixels
barCode.ShowText = true;

// File output requires DrawToBitmap — you must size the Bitmap manually
barCode.Width = 400;
barCode.Height = 100;
var bitmap = new Bitmap(barCode.Width, barCode.Height);
barCode.DrawToBitmap(bitmap, new Rectangle(0, 0, barCode.Width, barCode.Height));
bitmap.Save("barcode.png", ImageFormat.Png);
bitmap.Dispose();

Zwróć uwagę na kilka punktów spornych w tym tekście. Po pierwsze, barCode.Module jest w jednostkach dokumentu, a nie w pikselach, co powoduje niezgodność, jeśli myślisz w kategoriach wymiarów pikseli. Po drugie, musisz znać ostateczny rozmiar w pikselach przed przypisaniem Bitmap. Po trzecie, kontrolka wymaga załadowania zestawów WinForms - co oznacza, że minimalny interfejs API .NET Core lub konsolowa usługa działająca w tle musi załadować infrastrukturę Windows Forms tylko po to, aby wygenerować obraz BARCODE.

Znacznik Blazor DxBarCode jest koncepcyjnie podobny, ale jest składnikiem Razor do renderowania UI, a nie API do generowania po stronie serwera.

Brak możliwości czytania

Oficjalne stanowisko firmy DevExpress jest takie, że nie zapewnia ona funkcji rozpoznawania BarCode ani skanowania. Centrum wsparcia DevExpress informuje: "Kontrolka DevExpress BarCode jest przeznaczona wyłącznie do generacji kodów kreskowych. Nie dostarczamy funkcjonalności rozpoznawania/skanowania kodów kreskowych." Obecnie nie ma planów dodania tej funkcji.

W przypadku zespołów, które zaczynają od aplikacji DevExpress WinForms, a później otrzymują wymaganie skanowania BARCODE'a z przesłanego obrazu lub odczytu kodu QR z załącznika PDF, zestaw narzędzi DevExpress nie może pomóc. Konieczne będzie wprowadzenie oddzielnej biblioteki do obsługi odczytu, co natychmiast rodzi pytanie, czy strona generująca również powinna przejść do tej biblioteki w celu zachowania spójności API.

IronBarcode obsługuje oba kierunki:

//IronBarcode reading — works on images, PDFs, and byte arrays
// NuGet: dotnet add package IronBarcode
using IronBarCode;

var results = BarcodeReader.Read("scanned-label.png");
foreach (var result in results)
{
    Console.WriteLine($"Format: {result.Format}");
    Console.WriteLine($"Value: {result.Value}");
}

Odczytywanie z pliku PDF nie wymaga żadnych dodatkowych bibliotek:

// Reading barcodes from a PDF — no PdfiumViewer or similar required
var pdfResults = BarcodeReader.Read("shipping-manifest.pdf");
foreach (var result in pdfResults)
{
    Console.WriteLine($"Page barcode: {result.Value}");
}

Problem z pakietami Suite

Komponenty BarCode DevExpress nie są sprzedawane jako samodzielny produkt. Aby używać BarCodeControl w dowolnym projekcie, Twoja ekipa potrzebuje subskrypcji DevExpress - poziom ASP.NET & Blazor zaczyna się od 1 099,99 USD rocznie, DXperience (WinForms + WPF) to 1 699,99 USD rocznie, a Universal kosztuje 2 299,99 USD rocznie. Suite zawiera kontrolki siatki, wykresów, harmonogramu, tabeli przestawnej i wiele innych - co jest uzasadnione, jeśli tworzysz pełną aplikację DevExpress WinForms lub Blazor. Jeśli potrzebujesz tylko generowania kodów kreskowych dla usługi backendowej, płacisz za cały zestaw narzędzi UI, z którego ta usługa nigdy nie skorzysta.

IronBarcode to samodzielny pakiet:

dotnet add package IronBarcode
SHELL

Cena Licencji wieczystej Lite zaczyna się od 749 USD dla jednego programisty. W pakiecie nie ma zestawu narzędzi UI. Otrzymujesz generowanie i odczyt BARCODE-ów, obsługę wielu platform i nic więcej, o co nie prosiłeś.

Ograniczenia dotyczące korzystania z trybu bezinterfejsu

Podstawowym problemem z BarCodeControl w scenariuszach po stronie serwera jest to, że jest to kontrolka WinForms. W projekcie minimalnego API .NET 6+ ASP.NET Core zestawy WinForms nie są domyślnie odwołane. Aby wystartować BarCodeControl, Twój projekt API musi albo wyraźnie celować w Windows i załadować środowisko uruchomieniowe Windows Forms, albo dodać odniesienia obejściowe, które wciągają infrastrukturę UI, którą Twoje API nigdy nie wyrenderuje.

W planie konsumpcyjnym funkcji Azure nie ma w ogóle warstwy interfejsu użytkownika. W kontenerze Docker z obrazem bazowym Linux zależności Windows Forms GDI+ mogą w ogóle nie występować. DevExpress nie wspiera oficjalnie użycia BarCodeControl w tych bezgłowych środowiskach.

IronBarcode wykorzystuje w pełni programowe, statyczne API:

// IronBarcode: works in WinForms, ASP.NET Core, Azure Function, console — same code
// NuGet: dotnet add package IronBarcode
using IronBarCode;

BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");

To konkretne wywołanie działa w aplikacji konsolowej, kontrolerze .NET Core, funkcji Azure Function uruchamianej przez komunikat Service Bus lub kontenerze Docker działającym w systemie Linux. API nie zmienia się w zależności od środowiska. Nie ma zależności od zestawu UI.

Punkt końcowy ASP.NET Core, który zwraca BARCODE jako plik PNG, wygląda następująco:

app.MapGet("/barcode/{sku}", (string sku) =>
{
    var bytes = BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128)
        .ResizeTo(400, 100)
        .ToPngBinaryData();

    return Results.File(bytes, "image/png");
});

Nie ma równoważnego wzorca z BarCodeControl bez znaczących obejść.

Zrozumienie IronBarcode

IronBarcode to samodzielna biblioteka .NET służąca do generowania i odczytywania kodów kreskowych. API jest w pełni statyczne - nie ma instancji do zarządzania, nie ma cyklu życia kontrolki, nie ma zależności od interfejsu użytkownika. Generowanie i odczyt działają w tym samym wywołaniu:

// NuGet: dotnet add package IronBarcode
using IronBarCode;

// Generate Code 128
BarcodeWriter.CreateBarcode("ORDER-9921", BarcodeEncoding.Code128)
    .ResizeTo(450, 120)
    .SaveAsPng("order-label.png");

// Generate and get bytes (for HTTP responses, blob storage, etc.)
byte[] pngBytes = BarcodeWriter.CreateBarcode("ORDER-9921", BarcodeEncoding.Code128)
    .ResizeTo(450, 120)
    .ToPngBinaryData();

// Read from an image file
var results = BarcodeReader.Read("order-label.png");
Console.WriteLine(results.First().Value); // ORDER-9921

Aktywacja licencji to pojedynczy wiersz podczas uruchamiania:

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

Brak połączenia sieciowego. Bez standardowych fraz dotyczących obsługi błędów. Walidacja lokalna.

Kod QR obok

Kody QR ilustrują lukę API między kontrolką interfejsu użytkownika a biblioteką programistyczną.

QR DevExpress - kontrolka WinForms:

// DevExpress: QR via BarCodeControl + QRCodeGenerator symbology
using DevExpress.XtraEditors;              // BarCodeControl
using DevExpress.XtraPrinting.BarCode;     // QRCodeGenerator + QRCodeErrorCorrectionLevel

var barCode = new BarCodeControl();
var symbology = new QRCodeGenerator();
symbology.ErrorCorrectionLevel = QRCodeErrorCorrectionLevel.H;
symbology.CompactionMode = QRCodeCompactionMode.AlphaNumeric;
barCode.Symbology = symbology;
barCode.Text = "https://example.com";
barCode.Width = 500;
barCode.Height = 500;

var bitmap = new Bitmap(barCode.Width, barCode.Height);
barCode.DrawToBitmap(bitmap, new Rectangle(0, 0, barCode.Width, barCode.Height));
bitmap.Save("qr.png", ImageFormat.Png);
bitmap.Dispose();

Kod QR IronBarcode - ten sam wynik, bez konieczności montażu interfejsu użytkownika:

// IronBarcode: QR in one method chain
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .SaveAsPng("qr.png");

Dodanie logo marki na środku kodu QR:

QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .AddBrandLogo("company-logo.png")
    .SaveAsPng("qr-branded.png");

DevExpress nie posiada odpowiedników dla wbudowanych logo. Kontrolka wyświetla standardowy kod QR i nic więcej.

Porównanie funkcji

FunkcjaDevExpress BarCodeIronBarcode
Generowanie BarCodeTak (kontrolka WinForms, tag Blazor)Tak (programowe API, wszystkie środowiska)
Odczytywanie/skanowanie BarCodeNie - oficjalnie potwierdzoneTak - obrazy, pliki PDF, tablice bajtów
Odczytywanie BarCodes z plików PDFNieTak - natywne, bez dodatkowej biblioteki
Samodzielny pakiet NuGetNie - Suite DXperience nie jest wymaganaTak - tylko IronBarcode
Koszt SuiteOd 1 099,99 USD/rok (ASP.NET & Blazor) do 2 299,99 USD/rok (Universal)N/A - samodzielny
Koszt licencjiTylko w ramach subskrypcjiLicencja wieczysta od 749 USD
ASP.NET Core / minimalne APIWymaga obejść dla WinFormsWsparcie native
Azure FunctionsNieobsługiwane w trybie bezinterfejsowymPełne wsparcie
Docker / LinuxProblemy z GDI+ na obrazach bazowych systemu LinuxPełne wsparcie
Aplikacje konsoloweWymaga ładowania zestawu WinFormsWsparcie native
Generowanie kodów QRTak (za pomocą symboliki QRCodeGenerator)Tak (QRCodeWriter)
QR z wbudowanym logoNieTak - .AddBrandLogo()
Poziomy korekcji błędów QRH, Q, M, LNajwyższy, Wysoki, Średni, Niski
Kod 128TakTak
Data MatrixTakTak
PDF417TakTak
AztecTakTak
Plik wyjściowyDrawToBitmap - ręczne przydzielanie bitmapy.SaveAsPng(), .SaveAsGif(), .SaveAsSvg()
Wynik binarny (odpowiedź HTTP)Ręczne Bitmap → MemoryStream.ToPngBinaryData()
Czytanie wielowątkoweN/A - brak tekstu do przeczytaniaMaxParallelThreads = 4
Odczyt wielu BarCodesN/A - brak tekstu do przeczytaniaExpectMultipleBarcodes = true
PlatformyWindows (WinForms / Blazor)Windows, Linux, macOS, Docker, Azure, AWS Lambda
Obsługa wersji .NET.NET Framework + nowoczesny .NET (Windows).NET Framework 4.6.2 do aktualnych .NET

Przewodnik po mapowaniu API

Zespoły zaznajomione z wzorcem DevExpress BarCodeControl uznają te równoważności za przydatne:

DevExpress BarCodeIronBarcode
new BarCodeControl()Statyczne - nie wymaga instancji
new Code128Generator() + barCode.Symbology = symbologyBarcodeEncoding.Code128 podany jako parametr
new QRCodeGenerator() + QRCodeErrorCorrectionLevel.HQRCodeWriter.CreateQrCode("data", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
new DataMatrixGenerator() + DataMatrixSize.Matrix26x26BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix)
new PDF417Generator()BarcodeWriter.CreateBarcode("data", BarcodeEncoding.PDF417)
new AztecGenerator()BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Aztec)
barCode.Module = 0.02f (jednostki dokumentu).ResizeTo(width, height) (piksele)
barCode.ShowText = true.AddBarcodeText()
DrawToBitmap(bitmap, rect) - ręczne przydzielanie bitmapy.SaveAsPng(path) - automatycznie obsługuje rozmiarowanie
Ręczne Bitmap → MemoryStream dla odpowiedzi HTTP.ToPngBinaryData()
Brak API do odczytuBarcodeReader.Read(imagePath)
Brak wynikowego typu odczytu.Value (string), .Format (BarcodeEncoding)
W każdym projekcie wymagany jest montaż interfejsu użytkownikaDziała w każdym typie projektu .NET
Tylko Suite (od 1 099,99 USD/rok)Wersja samodzielna (od 749 USD – licencja wieczysta)

Kiedy zespoły się zmieniają

Kilka konkretnych scenariuszy często powoduje przejście z kontrolek BARCODE DevExpress na IronBarcode.

Pojawia się zapotrzebowanie na czytanie. Najczęstszym scenariuszem jest aplikacja WinForms, która od lat generuje BARCODES, a teraz pojawia się prośba o nową funkcję: aplikacja musi teraz skanować lub weryfikować BARCODES z przesłanych obrazów lub zdjęć zrobionych aparatem. DevExpress nie posiada API do odczytu. Zespół i tak potrzebuje nowej biblioteki, więc sensowne jest skonsolidowanie generowania w tej samej bibliotece.

Potrzeba punktu końcowego API sieciowego. Zespół tworzy mikrousługę, która generuje etykiety z kodami BarCode na żądanie - wywoływane z interfejsu użytkownika, aplikacji mobilnej lub innej usługi. Projekt ASP.NET Core nie ma zależności od WinForms, a zespół nie chce jej dodawać. Statyczne API IronBarcode integruje się z punktem końcowym HTTP bez zbędnego obciążenia związanego z interfejsem użytkownika.

Wdrożenie funkcji Azure lub Lambda. Wdrożenia bezserwerowe często wykorzystują obrazy bazowe systemu Linux i minimalne środowiska uruchomieniowe. BarCodeControl nie jest zaprojektowany dla tego środowiska.IronBarcode działa na systemie Linux, w kontenerach Docker, w Azure Functions oraz w AWS Lambda bez konieczności wprowadzania zmian w konfiguracji.

Koszt odnowienia Suite dla jednej funkcji. Gdy nadchodzi czas odnowienia i zespół analizuje, co faktycznie używają z pakietu DXperience, odkrycie, że jedynym komponentem DevExpress w konkretnym serwisie jest BarCodeControl prowadzi do rozmowy o kosztach. Opłacenie pełnej subskrypcji DXperience (1 699,99 USD/rok nowa, 849,99 USD/rok przy odnowieniu) za generację kodów kreskowych, gdy samodzielna biblioteka kosztuje 749 USD na zawsze, to trudny argument.

Odczytywanie wielu kodów kreskowych z plików PDF. Procesy przetwarzania dokumentów - odczytywanie kodów kreskowych z plików PDF zawierających faktury, listy przewozowe lub zeskanowane formularze - wymagają zarówno obsługi formatu PDF, jak i możliwości odczytu.IronBarcode odczytuje dane bezpośrednio z plików PDF bez konieczności korzystania z dodatkowych bibliotek. DevExpress nie zapewnia żadnej z tych funkcji.

Wnioski

Oferta DevExpress w zakresie BarCode najlepiej rozumiana jest jako funkcja renderowania interfejsu użytkownika zawarta w zestawie narzędzi UI. Jeśli Twoja aplikacja to aplikacja WinForms lub Blazor, która już używa DevExpress do swoich kontrolek siatki i wykresu, a Twoja jedyna potrzeba kodu kreskowego to wizualne wyświetlenie kodu kreskowego na formularzu, BarCodeControl jest rozsądnym wyborem - już masz licencję.

W momencie, gdy potrzebujesz któregokolwiek z następujących, BarCodeControl przestaje być odpowiednim narzędziem: odczytywania kodów kreskowych, generowania kodów kreskowych w kontekście po stronie serwera, działania w bezgłowym środowisku, pracy na Linuxie, lub działa bez odniesienia do zestawów WinForms. Dział pomocy technicznej DevExpress potwierdził, że nie ma funkcji czytania i nie planuje jej dodawać. Ograniczenie dotyczące trybu bezinterfejsu ma charakter architektoniczny, a nie konfiguracyjny. Element interfejsu użytkownika to element interfejsu użytkownika.

IronBarcode jest stworzony do programowej obsługi kodów kreskowych - generowania i odczytu za pomocą statycznego API, w dowolnym środowisku i na dowolnej platformie. Te dwa narzędzia rozwiązują różne problemy. BarCode DevExpress służy do renderowania wewnątrz formularza.IronBarcodesłuży do przetwarzania kodów kreskowych w kodzie.

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ęczników.

Czytaj więcej

Powiązane artykuły