IRONSOFTWAREHOME
FILMY

Migrating from DevExpress BarCode to IronBarcode

Curtis Chau
Curtis Chau
Updated: 20 czerwca 2026

Jeśli korzystasz z DevExpress w zakresie elementów sterujących siatki, wykresów, harmonogramów lub tabel przestawnych, zachowaj je. Ta migracja dotyczy zastąpienia BarCodeControl biblioteką, która potrafi również odczytywać kody kreskowe, działać bezgłowowo i być wdrażana poza kontekstem interfejsu użytkownika. Migracja ta nie ma wpływu na kontrolki interfejsu użytkownika DevExpress, z których korzystasz w aplikacjach WinForms lub Blazor. Zmienia się tylko kod dotyczący kodów kreskowych.

Typowy scenariusz, który skłania do tej migracji, to jedna z trzech sytuacji: pojawia się zapotrzebowanie na czytanie, a DevExpress nie jest w stanie go zaspokoić; Nowa usługa wymaga generowania BARCODE-ów w .NET Core lub funkcji chmurowej, w której nie ma zestawów WinForms; lub nadchodzi czas odnowienia Suite, a kalkulacja kosztu na funkcję przy użyciu pełnego zestawu narzędzi UI wyłącznie do generowania BarCode przestaje mieć sens.

Krok 1: Zainstaluj IronBarcode

dotnet add package BarCode

Jeśli w tym samym projekcie znajdują się inne kontrolki DevExpress, należy pozostawić pakiety DevExpress NuGet na miejscu. Zmienia się tylko kod związany z kodami BarCode w plikach źródłowych. Jeśli generowanie kodów kreskowych było jedynym powodem, dla którego DevExpress pojawił się w danym projekcie, a nie używasz tam żadnych innych kontrolek DX, możesz usunąć pakiety DevExpress z tego projektu po migracji:

# Only remove DevExpress packages if no other DX controls are used in this project
dotnet remove package DevExpress.Win.Navigation
SHELL

Krok 2: Dodaj inicjalizację licencji

Dodaj aktywację licencji IronBarcode raz przy starcie aplikacji — w Program.cs, App.xaml.cs lub w twoim host builderze:

// In Program.cs (ASP.NET Core) or application entry point
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

Brak połączenia sieciowego. Brak kodów błędów do sprawdzenia. Walidacja lokalna.

Krok 3: Zastąp kod specyficzny dla BarCode

Przeszukaj swój kod źródłowy pod kątem typów BARCODE-ów DevExpress. Wszystko inne pozostaje bez zmian:

# Find barcode-related DevExpress usage — ignore grid, chart, and other DX components
grep -r "BarCodeControl\|Code128Generator\|QRCodeGenerator\|DataMatrixGenerator\|PDF417Generator\|AztecCodeGenerator\|DevExpress.XtraPrinting.BarCode" --include="*.cs" .
grep -r "barCode\.Module\|DrawToBitmap\|BarCode\.Symbology" --include="*.cs" .
SHELL

Wyniki tego wyszukiwania są dokładnie tym, co należy zastąpić. Nic więcej.

Przykłady migracji kodu

Generowanie kodu 128

Jest to najczęstszy rodzaj migracji. BarCodeControl z Code128Generator symbologią staje się pojedynczym wywołaniem BarcodeWriter.CreateBarcode.

Przed — Kontrolka DevExpress WinForms:

using DevExpress.XtraEditors;
using DevExpress.XtraPrinting.BarCode;
using System.Drawing;
using System.Drawing.Imaging;

public void GenerateCode128(string data, string outputPath)
{
    var barCode = new BarCodeControl();
    var symbology = new Code128Generator();
    symbology.CharacterSet = Code128CharacterSet.CharsetAuto;
    barCode.Symbology = symbology;
    barCode.Text = data;
    barCode.Module = 0.02f;
    barCode.ShowText = true;

    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(outputPath, ImageFormat.Png);
    bitmap.Dispose();
}

Po — IronBarcode:

// NuGet: dotnet add package BarCode
using IronBarCode;

public void GenerateCode128(string data, string outputPath)
{
    BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .ResizeTo(400, 100)
        .SaveAsPng(outputPath);
}

Rozmiar dokumentu barCode.Module = 0.02f w jednostkach dokumentu został usunięty. .ResizeTo(400, 100) przyjmuje piksele bezpośrednio. Ręczne przypisanie Bitmap i wywołanie DrawToBitmap zostaje zamienione na .SaveAsPng(), które automatycznie obsługuje rozmiarowanie.

Generowanie kodów QR

Przed — DevExpress QR z poprawkami błędów:

using DevExpress.XtraEditors;
using DevExpress.XtraPrinting.BarCode;
using System.Drawing;
using System.Drawing.Imaging;

public void GenerateQrCode(string url, string outputPath)
{
    var barCode = new BarCodeControl();
    var symbology = new QRCodeGenerator();
    symbology.ErrorCorrectionLevel = QRCodeErrorCorrectionLevel.H;
    symbology.CompactionMode = QRCodeCompactionMode.AlphaNumeric;
    barCode.Symbology = symbology;
    barCode.Text = url;

    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(outputPath, ImageFormat.Png);
    bitmap.Dispose();
}

Po — IronBarcode:

using IronBarCode;

public void GenerateQrCode(string url, string outputPath)
{
    QRCodeWriter.CreateQrCode(url, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
        .SaveAsPng(outputPath);
}

QRCodeErrorCorrectionLevel.H mapuje się na QRCodeWriter.QrErrorCorrectionLevel.Highest. Ustawienia CompactionMode.AlphaNumeric są automatycznie obsługiwane przez IronBarcode w oparciu o zawartość.

Kod QR z logo marki (zupełnie nowa funkcja — niemożliwa do zrealizowania w DevExpress):

using IronBarCode;

public void GenerateBrandedQrCode(string url, string logoPath, string outputPath)
{
    QRCodeWriter.CreateQrCode(url, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
        .AddBrandLogo(logoPath)
        .SaveAsPng(outputPath);
}

Generowanie kodów Data Matrix

Przed — DevExpress:

using DevExpress.XtraEditors;
using DevExpress.XtraPrinting.BarCode;

var barCode = new BarCodeControl();
var symbology = new DataMatrixGenerator();
symbology.MatrixSize = DataMatrixSize.Matrix26x26;
barCode.Symbology = symbology;
barCode.Text = "PART-7734-X";
// ... DrawToBitmap pattern

Po — IronBarcode:

using IronBarCode;

BarcodeWriter.CreateBarcode("PART-7734-X", BarcodeEncoding.DataMatrix)
    .ResizeTo(260, 260)
    .SaveAsPng("datamatrix.png");

Generowanie kodów PDF417

Przed — DevExpress:

using DevExpress.XtraEditors;
using DevExpress.XtraPrinting.BarCode;

var barCode = new BarCodeControl();
barCode.Symbology = new PDF417Generator();
barCode.Text = "SHIPMENT-DATA-2026";
// ... DrawToBitmap pattern

Po — IronBarcode:

using IronBarCode;

BarcodeWriter.CreateBarcode("SHIPMENT-DATA-2026", BarcodeEncoding.PDF417)
    .ResizeTo(400, 150)
    .SaveAsPng("pdf417.png");

Dodawanie funkcji czytania (nowa funkcja)

DevExpress nie udostępnia API do odczytu. Jeśli pojawiła się potrzeba odczytu, właśnie w tym momencie IronBarcode natychmiast się zwraca:

using IronBarCode;

// Read from an image file
var results = BarcodeReader.Read("uploaded-label.png");
foreach (var result in results)
{
    Console.WriteLine($"Found {result.Format}: {result.Value}");
}

// Read with options for better accuracy on difficult images
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    MaxParallelThreads = 4
};
var detailedResults = BarcodeReader.Read("multi-barcode-sheet.png", options);

Punkt końcowy BarCode ASP.NET Core

To nie było osiągalne z BarCodeControl bez obejść WinForms. IronBarcode obsługuje to natywnie:

using IronBarCode;

// In Program.cs or a controller
app.MapGet("/label/{sku}", (string sku) =>
{
    var pngBytes = BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128)
        .ResizeTo(400, 100)
        .ToPngBinaryData();

    return Results.File(pngBytes, "image/png", $"{sku}.png");
});

app.MapGet("/qr/{data}", (string data) =>
{
    var pngBytes = QRCodeWriter.CreateQrCode(data, 300, QRCodeWriter.QrErrorCorrectionLevel.Highest)
        .ToPngBinaryData();

    return Results.File(pngBytes, "image/png");
});

Odczytywanie BarCodes z plików PDF

IronBarcode odczytuje pliki PDF w sposób natywny. Bez PdfiumViewer, bez pętli renderowania, bez dodatkowych pakietów:

using IronBarCode;

// Read all barcodes from all pages of a PDF
var results = BarcodeReader.Read("shipping-manifest.pdf");
foreach (var result in results)
{
    Console.WriteLine($"Barcode: {result.Value} | Format: {result.Format}");
}

Typowe problemy związane z migracją

BarCode.Module wykorzystuje jednostki dokumentu, a nie piksele

barCode.Module kontroluje szerokość najwęższego paska w jednostkach dokumentu (zależnych od kontekstu DPI renderowania). Nie chodzi tu o liczbę pikseli. Podczas migracji nie próbuj przeliczać wartości modułu na piksele — zamiast tego zdecyduj się, jakie wymiary w pikselach chcesz i użyj .ResizeTo(width, height) bezpośrednio.

// Before: barCode.Module = 0.02f  — document units, indirect sizing
// After:
.ResizeTo(400, 100)  // explicit pixel dimensions

DrawToBitmap wymaga wstępnie przydzielonej mapy bitowej

Stary wzór przydzielał Bitmap o określonym rozmiarze, a następnie wywoływał DrawToBitmap, aby renderować do niego. .SaveAsPng() IronBarcode obsługuje to wszystko wewnętrznie. Nie przydzielasz niczego z góry.

// Before: must know size upfront, allocate, draw, save, dispose
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(path, ImageFormat.Png);
bitmap.Dispose();

// After: size specified once, everything else handled
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng(path);

Powiązanie danych w WinForms

Jeśli BarCodeControl był powiązany z źródłem danych w projektancie WinForms, równoważny IronBarcode to wyraźnie odczytanie wartości z modelu i przekazanie jej do BarcodeWriter.CreateBarcode. IronBarcode nie uczestniczy w powiązaniu danych WinForms — jest to programowe API, a nie kontrolka interfejsu użytkownika. Jeśli potrzebujesz wyświetlić wygenerowany kod kreskowy na formularzu, wygeneruj bajty obrazu i ustaw je na PictureBox:

using IronBarCode;

// Generate and display in a WinForms PictureBox
private void UpdateBarcodeDisplay(string value)
{
    var bytes = BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128)
        .ResizeTo(400, 100)
        .ToPngBinaryData();

    using var ms = new System.IO.MemoryStream(bytes);
    pictureBox1.Image = System.Drawing.Image.FromStream(ms);
}

Zastąpienie przestrzeni nazw

Stare importy do usunięcia:

// Remove these
using DevExpress.XtraEditors;
using DevExpress.XtraPrinting.BarCode;

Nowy import do dodania:

// Add this
using IronBarCode;

Przewodnik po mapowaniu API

DevExpress BarCodeOdpowiednik IronBarcode
new BarCodeControl()Statyczne — brak instancji
new Code128Generator() + barCode.Symbology = symbologyBarcodeEncoding.Code128 parametr
new QRCodeGenerator() + QRCodeErrorCorrectionLevel.HQRCodeWriter.CreateQrCode(data, size, QRCodeWriter.QrErrorCorrectionLevel.Highest)
new DataMatrixGenerator() + DataMatrixSize.Matrix26x26BarcodeWriter.CreateBarcode(data, BarcodeEncoding.DataMatrix)
new PDF417Generator()BarcodeWriter.CreateBarcode(data, BarcodeEncoding.PDF417)
new AztecCodeGenerator()BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Aztec)
barCode.Text = valuePierwszy argument do CreateBarcode lub CreateQrCode
barCode.Module = 0.02f.ResizeTo(width, height) w pikselach
barCode.ShowText = true.AddBarcodeText()
DrawToBitmap(bitmap, rect).SaveAsPng(path)
new Bitmap(w, h) + ręczna likwidacjaNie jest potrzebne
Bitmap → MemoryStream → HTTP.ToPngBinaryData()
Brak API do odczytuBarcodeReader.Read(path)
using DevExpress.XtraEditors + using DevExpress.XtraPrinting.BarCodeusing IronBarCode

Lista kontrolna migracji

Użyj tego wzorca grep, aby znaleźć wszystkie pliki wymagające aktualizacji:

grep -r "BarCodeControl\|Code128Generator\|QRCodeGenerator\|DataMatrixGenerator\|PDF417Generator\|AztecCodeGenerator" --include="*.cs" .
grep -r "barCode\.Module\|barCode\.Symbology\|DrawToBitmap\|DevExpress\.XtraPrinting\.BarCode" --include="*.cs" .
SHELL

Przejrzyj wszystkie dopasowania:

  • Zastąp using DevExpress.XtraEditors; i using DevExpress.XtraPrinting.BarCode; przez using IronBarCode;
  • Zastąp new BarCodeControl() + konfigurację symboliki przez BarcodeWriter.CreateBarcode(data, BarcodeEncoding.X)
  • Zastąp new QRCodeGenerator() + konfigurację symboliki przez QRCodeWriter.CreateQrCode(data, size, errorLevel)
  • Zastąp barCode.Module = X przez .ResizeTo(width, height)
  • Zastąp wzory DrawToBitmap + bitmap.Save przez .SaveAsPng(path)
  • Zastąp wzory Bitmap-to-MemoryStream przez .ToPngBinaryData()
  • Dodaj IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY" przy starcie aplikacji
  • Dodaj wywołania BarcodeReader.Read() wszędzie tam, gdzie potrzebna jest możliwość odczytu

Jeśli w projekcie wykorzystuje się DevExpress wyłącznie do obsługi kodów kreskowych, a nie stosuje się innych komponentów DX, należy usunąć pakiety DevExpress NuGet po zastąpieniu wszystkich odwołań do kodów kreskowych. Jeśli w projekcie wykorzystywane są kontrolki siatki, wykresów lub inne kontrolki interfejsu użytkownika DevExpress, należy pozostawić te pakiety na miejscu — migracja dotyczy wyłącznie kodu kodu BarCode.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podręczników.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

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

Your trial license will be sent to your email address

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

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

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

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