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

BarcodeScanning.MAUI vs IronBarcode: Porównanie bibliotek kodów kreskowych C#

DevExpress BarCode vs IronBarcode: UI Control vs Samodzielna Biblioteka

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();
// 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();
Imports DevExpress.XtraEditors
Imports DevExpress.XtraPrinting.BarCode
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 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}");
}
//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 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
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");
// 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 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
// 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-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode

IronBarCode.License.LicenseKey = "YOUR-LICENSE-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.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();
// 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();
Imports DevExpress.XtraEditors ' BarCodeControl
Imports DevExpress.XtraPrinting.BarCode ' QRCodeGenerator + QRCodeErrorCorrectionLevel
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 wymagana Tak — tylko IronBarcode
Koszt Suite Od 1 099,99 USD/rok (ASP.NET & Blazor) do 2 299,99 USD/rok (Universal) 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) Ręczne 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) .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 BarCode IronBarcode
new BarCodeControl() Statyczne — nie wymaga instancji
new Code128Generator() + barCode.Symbology = symbology BarcodeEncoding.Code128 podany 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 bitmapy .SaveAsPng(path) — automatycznie obsługuje rozmiarowanie
Ręczne BitmapMemoryStream dla odpowiedzi HTTP .ToPngBinaryData()
Brak API do odczytu BarcodeReader.Read(imagePath)
Brak wynikowego typu odczytu .Value (string), .Format (BarcodeEncoding)
W każdym projekcie wymagany jest montaż interfejsu użytkownika Dział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.

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().

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ę...

Czytaj więcej

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie