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()
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
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 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
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")
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 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
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"
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()
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 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 Bitmap → MemoryStream 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().

