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

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

DevExpress to ceniony zestaw narzędzi UI dla platformy .NET. Kontrolki siatki, harmonogramu, wykresu i tabeli przestawnej są naprawdę doskonałe i są używane przez tysiące zespołów w Enterprise. Obsługa BARCODE to jednak zupełnie inna historia. DevExpress dostarcza BarCodeControl — kontrolkę WinForms oraz tag Blazor DxBarCode — które pozwalają na renderowanie kodu kreskowego na formularzu w czasie projektowania. Gdy zespół wsparcia został zapytany o rozpoznawanie kodów kreskowych, odpowiedź była spójna: nie ma możliwości odczytu i obecnie nie ma planów, aby ją dodać. 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

Funkcjonalność BarCode DevExpress znajduje się w DevExpress.XtraBars.BarCode i powiązanych przestrzeniach nazw symbologii. Nie jest to biblioteka samodzielna. Jest on dołączony do Suite DXperience, której cena wynosi około 2499 USD rocznie. Nie ma osobnego pakietu NuGet zawierającego wyłącznie kody kreskowe, który można by zainstalować.

BarCodeControl to kontrolka WinForms dziedzicząca z hierarchii kontrolek. Konfiguruje się to za pomocą obiektu symbologii, ustawia właściwości, a następnie wyświetla się na ekranie. Zapisanie tego renderowania do pliku wymaga wywołania DrawToBitmap, które oczekuje wstępnie przydzielonego Bitmap o odpowiednim rozmiarze:

// DevExpress WinForms: UI control, not a library
using DevExpress.XtraBars.BarCode;
using DevExpress.XtraBars.BarCode.Symbologies;
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();
// DevExpress WinForms: UI control, not a library
using DevExpress.XtraBars.BarCode;
using DevExpress.XtraBars.BarCode.Symbologies;
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();
Imports DevExpress.XtraBars.BarCode
Imports DevExpress.XtraBars.BarCode.Symbologies
Imports System.Drawing
Imports System.Drawing.Imaging

Dim barCode As New BarCodeControl()
Dim symbology As 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
Dim bitmap As 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()
$vbLabelText   $csharpLabel

Zwróć uwagę na kilka punktów spornych w tym tekście. Po pierwsze, barCode.Module jest podane w jednostkach dokumentu, a nie w pikselach, co powoduje rozbieżność, jeśli myślisz w kategoriach wymiarów pikselowych. Po drugie, przed przypisaniem Bitmap musisz znać ostateczny rozmiar w pikselach. 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.

Tag Blazor DxBarCode jest koncepcyjnie podobny, ale jest to komponent Razor służący do renderowania interfejsu użytkownika, a nie API generujące po stronie serwera.

Brak możliwości czytania

Oficjalne stanowisko firmy DevExpress jest takie, że nie zapewnia ona funkcji rozpoznawania BarCode ani skanowania. Nie jest to luka, którą trzeba wypełnić w nadchodzącej wersji — od lat jest to stała odpowiedź.

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}");
}
// 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}");
}
Imports IronBarCode

' IronBarcode reading — works on images, PDFs, and byte arrays
' NuGet: dotnet add package IronBarcode

Dim results = BarcodeReader.Read("scanned-label.png")
For Each result In results
    Console.WriteLine($"Format: {result.Format}")
    Console.WriteLine($"Value: {result.Value}")
Next
$vbLabelText   $csharpLabel

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}");
}
// 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}");
}
Imports System

' Reading barcodes from a PDF — no PdfiumViewer or similar required
Dim pdfResults = BarcodeReader.Read("shipping-manifest.pdf")
For Each result In pdfResults
    Console.WriteLine($"Page barcode: {result.Value}")
Next
$vbLabelText   $csharpLabel

Problem z pakietami Suite

Komponenty BarCode DevExpress nie są sprzedawane jako samodzielny produkt. Aby korzystać z BarCodeControl w dowolnym projekcie, Twój zespół potrzebuje licencji na Suite DXperience, której koszt wynosi około 2499 USD rocznie na programistę. 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
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 związanym 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 zainicjować BarCodeControl, projekt API musi albo wyraźnie być przeznaczony dla systemu Windows i ładować środowisko uruchomieniowe Windows Forms, albo zawierać odniesienia do rozwiązań zastępczych, które pobierają infrastrukturę interfejsu użytkownika, której API nigdy nie wyświetli.

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 obsługuje oficjalnie użycia BarCodeControl w tych środowiskach bezinterfejsowych.

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");
// 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");
Imports IronBarCode

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

BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
    .SaveAsPng("barcode.png")
$vbLabelText   $csharpLabel

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");
});
app.MapGet("/barcode/{sku}", (string sku) =>
{
    var bytes = BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128)
        .ResizeTo(400, 100)
        .ToPngBinaryData();

    return Results.File(bytes, "image/png");
});
Imports Microsoft.AspNetCore.Builder
Imports Microsoft.AspNetCore.Http

app.MapGet("/barcode/{sku}", Function(sku As String)
                                Dim bytes = BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128) _
                                    .ResizeTo(400, 100) _
                                    .ToPngBinaryData()

                                Return Results.File(bytes, "image/png")
                             End Function)
$vbLabelText   $csharpLabel

Nie ma odpowiednika wzorca 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
// 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
Imports 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.)
Dim pngBytes As Byte() = BarcodeWriter.CreateBarcode("ORDER-9921", BarcodeEncoding.Code128) _
    .ResizeTo(450, 120) _
    .ToPngBinaryData()

' Read from an image file
Dim results = BarcodeReader.Read("order-label.png")
Console.WriteLine(results.First().Value) ' ORDER-9921
$vbLabelText   $csharpLabel

Aktywacja licencji to pojedynczy wiersz podczas uruchamiania:

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

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

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.XtraBars.BarCode;
using DevExpress.XtraBars.BarCode.Symbologies;

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();
// DevExpress: QR via BarCodeControl + QRCodeGenerator symbology
using DevExpress.XtraBars.BarCode;
using DevExpress.XtraBars.BarCode.Symbologies;

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();
Imports DevExpress.XtraBars.BarCode
Imports DevExpress.XtraBars.BarCode.Symbologies
Imports System.Drawing
Imports System.Drawing.Imaging

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

Dim bitmap As 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()
$vbLabelText   $csharpLabel

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");
// IronBarcode: QR in one method chain
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .SaveAsPng("qr.png");
$vbLabelText   $csharpLabel

Dodanie logo marki na środku kodu QR:

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

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

Porównanie funkcji

Funkcja DevExpress BarCode IronBarcode
Generowanie BarCode Tak (kontrolka WinForms, tag Blazor) Tak (programowe API, wszystkie środowiska)
Odczytywanie/skanowanie BarCode Nie — oficjalnie potwierdzone Tak — obrazy, pliki PDF, tablice bajtów
Odczytywanie BarCodes z plików PDF Nie Tak — natywne, bez dodatkowej biblioteki
Samodzielny pakiet NuGet Nie — Suite DXperience nie jest wymagańa Tak — IronBarcode tylko
Koszt Suite ~2499 USD+/rok (pełna Suite interfejsu użytkownika) N/A — samodzielny
Koszt licencji Tylko w ramach subskrypcji Licencja wieczysta od 749 USD
ASP.NET Core / minimalne API Wymaga obejść dla WinForms Wsparcie native
Azure Functions Nieobsługiwane w trybie bezinterfejsowym Pełne wsparcie
Docker / Linux Problemy z GDI+ na obrazach bazowych systemu Linux Pełne wsparcie
Aplikacje konsolowe Wymaga ładowania zestawu WinForms Wsparcie native
Generowanie kodów QR Tak (za pomocą symboliki QRCodeGenerator) Tak (QRCodeWriter)
QR z wbudowanym logo Nie Tak — .AddBrandLogo()
Poziomy korekcji błędów QR H, Q, M, L Najwyższy, Wysoki, Średni, Niski
Kod 128 Tak Tak
Data Matrix Tak Tak
PDF417 Tak Tak
Aztec Tak Tak
Plik wyjściowy DrawToBitmap — ręczne przydzielanie bitmapy .SaveAsPng(), .SaveAsGif(), .SaveAsSvg()
Wynik binarny (odpowiedź HTTP) Manual Bitmap → MemoryStream .ToPngBinaryData()
Czytanie wielowątkowe N/A — brak tekstu do przeczytania MaxParallelThreads = 4
Odczyt wielu BarCodes N/A — brak tekstu do przeczytania ExpectMultipleBarcodes = true
Platformy Windows (WinForms / Blazor) Windows, Linux, macOS, Docker, Azure, AWS Lambda
Obsługa wersji .NET .NET Framework + nowoczesny .NET (Windows) Od .NET 4.6.2 do .NET 9

Przewodnik po mapowaniu API

Zespoły zaznajomione ze wzorcem DevExpress BarCodeControl uznają poniższe odpowiedniki za przydatne:

DevExpress BarCode IronBarcode
new BarCodeControl() Statyczne — nie wymaga instancji
new Code128Generator() + barCode.Symbology = symbology BarcodeEncoding.Code128 przekazane jako parametr
new QRCodeGenerator() + QRCodeErrorCorrectionLevel.H QRCodeWriter.CreateQrCode("data", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
new DataMatrixGenerator() + DataMatrixSize.Matrix26x26 BarcodeWriter.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 bitmap .SaveAsPng(path) — automatycznie dostosowuje rozmiar
Podręcznik BitmapMemoryStream dla odpowiedzi HTTP .ToPngBinaryData()
Brak API do odczytu BarcodeReader.Read(imagePath)
TextResult typ .Value (string), .Format (BarcodeEncoding)
W każdym projekcie wymagańy jest montaż interfejsu użytkownika Działa w każdym typie projektu .NET
Tylko Suite (~2499 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 przeznaczony do 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 za pojedynczą funkcję. Kiedy nadchodzi czas odnowienia i zespół sprawdza, z czego faktycznie korzysta w Suite DXperience, odkrywając, że jedynym komponentem DevExpress w danej usłudze jest BarCodeControl, pojawia się temat kosztów. Trudno jest uzasadnić opłacanie pełnej subskrypcji Suite do generowania BarCode'ów, skoro samodzielna biblioteka kosztuje 749 USD na zawsze.

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 jest aplikacją WinForms lub Blazor, która już korzysta z DevExpress do obsługi kontrolki siatki i wykresów, a Twoja jedyna potrzeba w zakresie kodów kreskowych polega na wizualnym wyświetleniu kodu kreskowego w formularzu, BarCodeControl jest rozsądnym wyborem — masz już licencję.

W momencie, gdy potrzebujesz którejkolwiek z poniższych funkcji, BarCodeControl przestaje być odpowiednim narzędziem: odczytywanie BarCodes, generowanie BarCodes w kontekście po stronie serwera, działanie w środowisku bezinterfejsowym, praca w systemie Linux lub działanie bez odwołania do zestawu 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. IronBarcode służy do przetwarzania kodów kreskowych w kodzie.

Często Zadawane Pytania

Czym jest DevExpress Barcode?

DevExpress Barcode to biblioteka kodów kreskowych .NET do generowania i odczytywania kodów kreskowych w aplikacjach C#. Jest jedną z kilku alternatyw, które deweloperzy rozważają przy wyborze rozwiązania do kodów kreskowych dla projektów .NET.

Jakie są główne różnice między DevExpress Barcode a IronBarcode?

IronBarcode używa statycznego, bezstanowego API, które nie wymaga zarządzania instancjami, podczas gdy DevExpress Barcode zazwyczaj wymaga tworzenia i konfiguracji instancji przed użyciem. IronBarcode oferuje także natywne wsparcie dla PDF, automatyczne wykrywanie formatu i jednokluczowe licencjonowanie dla wszystkich środowisk.

Czy IronBarcode jest łatwiejszy do licencjonowania niż DevExpress Barcode?

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, które obsługuje DevExpress Barcode?

IronBarcode obsługuje ponad 30 symboli kodów kreskowych, w tym QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 i wiele innych. Automatyczne wykrywanie formatu oznacza, że nie jest wymagane jawne wyliczanie formatów.

Czy IronBarcode obsługuje natywne odczytywanie kodów kreskowych z plików PDF?

Tak. IronBarcode odczytuje kody kreskowe bezpośrednio z plików PDF za pomocą BarcodeReader.Read("document.pdf") bez konieczności korzystania z oddzielnej biblioteki do renderowania plików PDF. Wyniki dla każdej strony obejmują numer strony, format kodu kreskowego, wartość oraz wskaźnik pewności.

Jak IronBarcode obsługuje przetwarzanie wsadowe w porównaniu do DevExpress Barcode?

Metody statyczne IronBarcode są bezstanowe i z natury bezpieczne dla wątków, co umożliwia bezpośrednie użycie Parallel.ForEach bez zarządzania instancjami dla poszczególnych wątków. Nie ma ograniczeń przepustowości w żadnym przedziale cenowym.

Jakie wersje .NET obsługuje IronBarcode?

IronBarcode obsługuje .NET Framework 4.6.2+, .NET Core 3.1 oraz .NET 5, 6, 7, 8 i 9 w jednym pakiecie NuGet. Obsługiwane platformy to Windows x64/x86, Linux x64 oraz macOS x64/ARM.

Jak zainstalować IronBarcode w projekcie .NET?

Zainstaluj IronBarcode za pomocą NuGet: uruchom polecenie „Install-Package IronBarCode” w konsoli menedżera pakietów lub „dotnet add package IronBarCode” w interfejsie CLI. Nie są wymagane żadne dodatkowe instalatory SDK ani pliki uruchomieniowe.

Czy mogę ocenić IronBarcode przed zakupem, w przeciwieństwie do DevExpress?

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 DevExpress Barcode 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 DevExpress Barcode do IronBarcode jest prosta?

Migracja z DevExpress Barcode do IronBarcode sprowadza się głównie do zastąpienia wywołań API opartych na instancjach statycznymi metodami IronBarcode, usunięcia szablonowego kodu licencyjnego i aktualizacji nazw właściwości wyników. Większość migracji polega na redukcji kodu zamiast jego dodawania.

Czy IronBarcode generuje kody QR z logo?

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

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