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()
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
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
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
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")
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)
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
Aktywacja licencji to pojedynczy wiersz podczas uruchamiania:
IronBarCode.License.LicenseKey = "YOUR-KEY";
IronBarCode.License.LicenseKey = "YOUR-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-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.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()
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");
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")
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 Bitmap → MemoryStream 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().

