IRONSOFTWAREHOME
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}");
}
C#

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

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta