Zum Fußzeileninhalt springen
VIDEOS

Wie man Barcodes in C# anpasst und gestaltet

Migrieren von OnBarcodezu IronBarcode

Dieser Leitfaden beschreibt den kompletten Migrationsprozess von OnBarcodezu IronBarcode . Es behandelt die dreistufige Umstellung, bietet Vorher-Nachher-Codebeispiele für jedes gängige Muster, ordnet die OnBarcode-API ihren IronBarcode Äquivalenten zu, dokumentiert Probleme, die während der Migration auftreten, und stellt eine Checkliste mit Suchbegriffen zur Verfügung, mit der Sie Ihre Codebasis überprüfen können, bevor Sie die Migration als abgeschlossen betrachten.

Warum von OnBarcodemigrieren?

Zwei-SKU-Beschaffungsaufwand: OnBarcodeveröffentlicht die ewigen Preisinformationen für das Generator SDK (nur Linear und Linear + 2D Ebenen) und listet das Reader SDK als separat bepreistes Produkt auf. Eine Organisation, die beide Fähigkeiten benötigt, muss zwei Beschaffungsprozesse für zwei SKUs abschließen — die richtige Generatorstufe für die verwendeten Symbologien auswählen, dann den Reader separat erwerben — bevor die Gesamtkosten festgelegt sind. Der Reibungspunkt liegt in der Duplizierung über zwei Käufe statt eines einzelnen Linieeintrags.

Overhead durch Aufteilung des Produkts: Generierung und Lesen sind separate Produkte mit separaten NuGet Paketen, separaten Lizenz-Namespaces, separaten Lizenzschlüsseln und separaten Versionszeitplänen. Ein Projekt, das beide Produkte verwendet, muss beim Start zwei Lizenzschlüssel konfigurieren, zwei Paketversionen bei Aktualisierungen verfolgen und zwei unabhängige Releasezyklen berücksichtigen. Wird die Leseanforderung zu einem Projekt hinzugefügt, das ursprünglich nur auf die Produktgenerierung ausgelegt war, muss der gesamte Beschaffungs- und Integrationsprozess für das zweite Produkt wiederholt werden.

Lücken im PDF-Workflow: OnBarcodebietet keine native Unterstützung für das Lesen von Barcodes aus PDF-Dokumenten. Projekte, die in Rechnungen, Lieferscheinen, Bestellungen oder Archivscans eingebettete Barcodes verarbeiten, benötigen eine separate PDF-zu-Bild-Bibliothek, die in die Pipeline integriert, deren Lizenz separat verwaltet und die gerenderten Seiten einzeln an das OnBarcodeReader SDK übergeben werden müssen. Dadurch entsteht eine Lösung mit zwei Abhängigkeiten, wo eine Lösung mit nur einer Abhängigkeit ausreichen würde.

API-Verbosenheit: Der OnBarcode-Generator erfordert die Instanziierung eines Barcode-Objekts, Zuweisung mehrerer Eigenschaften — einschließlich Eigenschaften mit sinnvollen Standardwerten wie Resolution, BarWidth und BarHeight — und dann das Aufrufen einer Generierungsmethode. Mit einer statischen Factory-API lässt sich die gleiche Ausgabe mit deutlich weniger Code erzielen. Bei der Stapelverarbeitung führt das Muster der Eigenschaftszuweisung zu großen Mengen an sich wiederholendem Code, der überprüft und gewartet werden muss.

Das grundsätzliche Problem

Die Konfiguration mit zwei Lizenzen stellt den größten unmittelbaren Reibungspunkt für jedes Projekt dar, das sowohl Datengenerierung als auch Datenlesung benötigt. OnBarcodebenötigt beim Start zwei separate Aufrufe an zwei separate Lizenz-Namensräume:

// OnBarcode: two products, two DLL references, no runtime key
// OnBarcodeuses pre-licensed DLLs — the purchased DLL is already activated.
// There is no runtime SetLicense() call; the license is baked into the downloaded assembly.
using OnBarcode.Barcode;
using OnBarcode.Barcode;
// OnBarcode: two products, two DLL references, no runtime key
// OnBarcodeuses pre-licensed DLLs — the purchased DLL is already activated.
// There is no runtime SetLicense() call; the license is baked into the downloaded assembly.
using OnBarcode.Barcode;
using OnBarcode.Barcode;
Imports OnBarcode.Barcode
Imports OnBarcode.Barcode
$vbLabelText   $csharpLabel

IronBarcode reduziert dies auf eine einzige Eigenschaftszuweisung, die alle Funktionen – Generierung, Lesen, PDF-Unterstützung und Stapelverarbeitung – unter einem Schlüssel abdeckt:

// IronBarcode: one package, one key, one line
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// IronBarcode: one package, one key, one line
using IronBarCode;

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

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

Alle Barcode-Operationen in der Anwendung – unabhängig davon, ob sie PDFs generieren, lesen oder verarbeiten – werden unter dieser einen Konfiguration ausgeführt.

IronBarcode vs. OnBarcode: Funktionsvergleich

Feature OnBarcode IronBarcode
Barcode-Generierung Ja Ja
Barcode-Lesung Separates Produkt, separater Kauf Enthalten
PDF-Barcode-Lesen Wird nicht nativ unterstützt Native – keine externe Bibliothek erforderlich
Automatische Formaterkennung beim Lesen Nein — explizite BarcodeType[] erforderlich Ja
Ergebnismetadaten (Format, Position, Seite) Nicht verfügbar — nur roher string[] Ja — BarcodeResults mit vollständigen Metadaten
QR-Code mit Logo-Overlay Manuelle GDI+-Codierung erforderlich Eingebaut
Veröffentlichte Preise Ja — produktbezogene Seiten (Generatorstufen + separater Leser) Ja — Eine einzige Seite deckt alle Funktionen ab
Ein einziger Lizenzschlüssel für alle Funktionen Nein – separate Schlüssel pro Produkt Ja
NuGet Distribution Verfügbar, neben Legacy-DLL-Downloads Verfügbar seit dem Start
Zugriff auf den Quellcode Nur unbegrenzte Stufe Nicht verfügbar
.NET 8/9-Unterstützung Ja Ja
Docker-/Cloud-Lizenzkonfiguration Handbuch Unterstützung für Umgebungsvariablen

Schnellstart: Migration von OnBarcodezu IronBarcode

Schritt 1: Entfernen Sie die OnBarcode-Paketverweise.

Wenn Ihr Projekt die NuGet Pakete verwendet, entfernen Sie beide:

dotnet remove package OnBarcode.Barcode.Generator
dotnet remove package OnBarcode.Barcode.Reader
dotnet remove package OnBarcode.Barcode.Generator
dotnet remove package OnBarcode.Barcode.Reader
SHELL

Wenn Ihr Projekt die ältere DLL-basierte Distribution verwendet, entfernen Sie auch den manuellen Referenzblock aus Ihrem .csproj:


<ItemGroup>
  <Reference Include="OnBarcode.Barcode">
    <HintPath>lib\OnBarcode.Barcode.dll</HintPath>
    <Private>true</Private>
  </Reference>
</ItemGroup>

<ItemGroup>
  <Reference Include="OnBarcode.Barcode">
    <HintPath>lib\OnBarcode.Barcode.dll</HintPath>
    <Private>true</Private>
  </Reference>
</ItemGroup>
XML

Löschen Sie die DLL-Dateien aus dem lib/-Verzeichnis oder wo auch immer sie gespeichert sind. Wenn die alten Assemblies neben dem neuen NuGet Paket erhalten bleiben, führt dies zu Namespace-Konflikten zur Kompilierzeit.

Schritt 2: IronBarcode hinzufügen

Ein Paket umfasst Generierung, Lesen und PDF-Unterstützung:

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

Für das Lesen wird keine zweite Verpackung benötigt. Für die PDF-Unterstützung ist kein zweites Paket erforderlich.

Schritt 3: Namensräume aktualisieren und die Dual-Lizenzkonfiguration ersetzen

Ersetzen Sie beide OnBarcodeusing-Direktiven durch den einzelnen IronBarcode -Import:

// Remove
using OnBarcode.Barcode;
using OnBarcode.Barcode;

// Add
using IronBarCode;
// Remove
using OnBarcode.Barcode;
using OnBarcode.Barcode;

// Add
using IronBarCode;
Imports IronBarCode
$vbLabelText   $csharpLabel

Ersetzen Sie die doppelten DLL-Referenzen durch eine einzelne Schlüsselzuweisung. Fügen Sie dies einmalig früh beim Start der Anwendung ein, bevor eine Barcode-Operation ausgeführt wird:

// Remove the OnBarcodeDLL references and using directives
// Add
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Remove the OnBarcodeDLL references and using directives
// Add
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' Remove the OnBarcodeDLL references and Imports statements
' Add
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Beispiele für die Code-Migration

Code-128-Barcode-Generierung

Der einfache Code-128-Fall veranschaulicht das Muster der Eigenschaftszuweisung im Vergleich zum statischen Fabrikmuster.

OnBarcode-Ansatz:

using OnBarcode.Barcode;

Linear barcode = new Linear();
barcode.Type = BarcodeType.CODE128;
barcode.Data = "SHIP-2024-001";
barcode.Resolution = 96;
barcode.X = 1;
barcode.BarcodeHeight = 80;
barcode.ShowText = true;
barcode.drawBarcode("shipping-label.png");
using OnBarcode.Barcode;

Linear barcode = new Linear();
barcode.Type = BarcodeType.CODE128;
barcode.Data = "SHIP-2024-001";
barcode.Resolution = 96;
barcode.X = 1;
barcode.BarcodeHeight = 80;
barcode.ShowText = true;
barcode.drawBarcode("shipping-label.png");
Imports OnBarcode.Barcode

Dim barcode As New Linear()
barcode.Type = BarcodeType.CODE128
barcode.Data = "SHIP-2024-001"
barcode.Resolution = 96
barcode.X = 1
barcode.BarcodeHeight = 80
barcode.ShowText = True
barcode.drawBarcode("shipping-label.png")
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-2024-001", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-2024-001", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("SHIP-2024-001", BarcodeEncoding.Code128) _
    .SaveAsPng("shipping-label.png")
$vbLabelText   $csharpLabel

Der Datentyp und der Kodierungstyp werden als Argumente an CreateBarcode übergeben. Eigenschaften wie Auflösung und Balkenhöhe sind für die Erzeugung eines scannbaren Ergebnisses nicht erforderlich; Die Standardeinstellungen sind für die meisten Anwendungsfälle geeignet. Wenn benutzerdefinierte Dimensionen benötigt werden, können diese als verkettete Aufrufe zwischen CreateBarcode und SaveAsPng hinzugefügt werden, ohne den Zustand wandelbarer Objekte einzuführen.

Logo-gebrandete QR-Codes erfordern, dass OnBarcodeauf System.Drawing für den Bild-Overlay-Schritt zurückgreift. IronBarcode bietet dies als integrierte Operation.

OnBarcode-Ansatz:

using OnBarcode.Barcode;
using System.Drawing;

QRCode qr = new QRCode();
qr.Data = "https://example.com/product/4891";
qr.QRCodeDataMode = QRCodeDataMode.Auto;
qr.QRCodeECL = QRCodeECL.H; // H-level error correction required for logo overlay

Image qrImage = qr.drawBarcode();

using (Graphics g = Graphics.FromImage(qrImage))
{
    Image logo = Image.FromFile("brand-logo.png");
    int logoSize = qrImage.Width / 5;
    int x = (qrImage.Width - logoSize) / 2;
    int y = (qrImage.Height - logoSize) / 2;
    g.DrawImage(logo, x, y, logoSize, logoSize);
}

qrImage.Save("product-qr.png");
using OnBarcode.Barcode;
using System.Drawing;

QRCode qr = new QRCode();
qr.Data = "https://example.com/product/4891";
qr.QRCodeDataMode = QRCodeDataMode.Auto;
qr.QRCodeECL = QRCodeECL.H; // H-level error correction required for logo overlay

Image qrImage = qr.drawBarcode();

using (Graphics g = Graphics.FromImage(qrImage))
{
    Image logo = Image.FromFile("brand-logo.png");
    int logoSize = qrImage.Width / 5;
    int x = (qrImage.Width - logoSize) / 2;
    int y = (qrImage.Height - logoSize) / 2;
    g.DrawImage(logo, x, y, logoSize, logoSize);
}

qrImage.Save("product-qr.png");
Imports OnBarcode.Barcode
Imports System.Drawing

Dim qr As New QRCode()
qr.Data = "https://example.com/product/4891"
qr.QRCodeDataMode = QRCodeDataMode.Auto
qr.QRCodeECL = QRCodeECL.H ' H-level error correction required for logo overlay

Dim qrImage As Image = qr.drawBarcode()

Using g As Graphics = Graphics.FromImage(qrImage)
    Dim logo As Image = Image.FromFile("brand-logo.png")
    Dim logoSize As Integer = qrImage.Width \ 5
    Dim x As Integer = (qrImage.Width - logoSize) \ 2
    Dim y As Integer = (qrImage.Height - logoSize) \ 2
    g.DrawImage(logo, x, y, logoSize, logoSize)
End Using

qrImage.Save("product-qr.png")
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;

var qr = QRCodeWriter.CreateQrCodeWithLogo("https://example.com/product/4891", "brand-logo.png", 500);
qr.SaveAsPng("product-qr.png");
using IronBarCode;

var qr = QRCodeWriter.CreateQrCodeWithLogo("https://example.com/product/4891", "brand-logo.png", 500);
qr.SaveAsPng("product-qr.png");
Imports IronBarCode

Dim qr = QRCodeWriter.CreateQrCodeWithLogo("https://example.com/product/4891", "brand-logo.png", 500)
qr.SaveAsPng("product-qr.png")
$vbLabelText   $csharpLabel

Die Fehlerkorrektur, die Berechnung der Logogröße und die Bildkomposition erfolgen intern. Keine System.Drawing-Abhängigkeit erforderlich.

Barcodes aus einem Bild lesen

Das Lesen einer Bilddatei veranschaulicht die Produktkonsolidierung am deutlichsten. Mit OnBarcodeist zum Lesen das separate Reader SDK, ein separater Lizenzaufruf und eine explizite Formatangabe erforderlich. Bei IronBarcode handelt es sich um einen einzigen statischen Aufruf, bei dem dasselbe Paket und derselbe Schlüssel verwendet werden, die bereits vorhanden sind.

OnBarcode-Ansatz:

using OnBarcode.Barcode;

// OnBarcodereader is distributed as a pre-licensed DLL — no runtime SetLicense() call.
BarcodeScanner scanner = new BarcodeScanner();
scanner.BarcodeTypes = new BarcodeType[] { BarcodeType.Code128, BarcodeType.QRCode };
string[] results = scanner.Scan("received-label.png");

foreach (string value in results)
    Console.WriteLine(value);
using OnBarcode.Barcode;

// OnBarcodereader is distributed as a pre-licensed DLL — no runtime SetLicense() call.
BarcodeScanner scanner = new BarcodeScanner();
scanner.BarcodeTypes = new BarcodeType[] { BarcodeType.Code128, BarcodeType.QRCode };
string[] results = scanner.Scan("received-label.png");

foreach (string value in results)
    Console.WriteLine(value);
Imports OnBarcode.Barcode

' OnBarcodereader is distributed as a pre-licensed DLL — no runtime SetLicense() call.
Dim scanner As New BarcodeScanner()
scanner.BarcodeTypes = New BarcodeType() {BarcodeType.Code128, BarcodeType.QRCode}
Dim results As String() = scanner.Scan("received-label.png")

For Each value As String In results
    Console.WriteLine(value)
Next
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;

var results = BarcodeReader.Read("received-label.png");
foreach (var result in results)
    Console.WriteLine($"{result.Format}: {result.Value}");
using IronBarCode;

var results = BarcodeReader.Read("received-label.png");
foreach (var result in results)
    Console.WriteLine($"{result.Format}: {result.Value}");
Imports IronBarCode

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

Keine Instanzerstellung, kein Format-Array, keine separate Lizenzkonfiguration. Das Format wird automatisch erkannt. Jedes Ergebnis enthält den dekodierten Wert und das erkannte Format. Für Details zu den Leseoptionen und den unterstützten Bildtypen siehe den Leitfaden zum Lesen von Barcodes aus Bildern .

Barcodes aus einer PDF-Datei lesen

Dieses Migrationsbeispiel gilt für Teams, die PDF-Seiten mithilfe einer Drittanbieterbibliothek in Bilder umgewandelt haben, bevor sie diese Bilder an das OnBarcodeReader SDK übergaben.

OnBarcode-Ansatz:

// OnBarcodehas no native PDF support.
// A separate PDF rendering library was required — for example PdfiumViewer or Aspose.PDF.
var pageImages = RenderPdfPagesToImages("invoices.pdf"); // external library call

using OnBarcode.Barcode;
BarcodeScanner scanner = new BarcodeScanner();
scanner.BarcodeTypes = new BarcodeType[] { BarcodeType.Code128, BarcodeType.QRCode };

foreach (var pageImage in pageImages)
{
    string[] results = scanner.Scan(pageImage);
    foreach (string value in results)
        Console.WriteLine(value);
}
// OnBarcodehas no native PDF support.
// A separate PDF rendering library was required — for example PdfiumViewer or Aspose.PDF.
var pageImages = RenderPdfPagesToImages("invoices.pdf"); // external library call

using OnBarcode.Barcode;
BarcodeScanner scanner = new BarcodeScanner();
scanner.BarcodeTypes = new BarcodeType[] { BarcodeType.Code128, BarcodeType.QRCode };

foreach (var pageImage in pageImages)
{
    string[] results = scanner.Scan(pageImage);
    foreach (string value in results)
        Console.WriteLine(value);
}
Imports OnBarcode.Barcode

' OnBarcode has no native PDF support.
' A separate PDF rendering library was required — for example PdfiumViewer or Aspose.PDF.
Dim pageImages = RenderPdfPagesToImages("invoices.pdf") ' external library call

Dim scanner As New BarcodeScanner()
scanner.BarcodeTypes = New BarcodeType() {BarcodeType.Code128, BarcodeType.QRCode}

For Each pageImage In pageImages
    Dim results As String() = scanner.Scan(pageImage)
    For Each value As String In results
        Console.WriteLine(value)
    Next
Next
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;

var results = BarcodeReader.Read("invoices.pdf");
foreach (var result in results)
    Console.WriteLine($"Page {result.PageNumber}: {result.Format} — {result.Value}");
using IronBarCode;

var results = BarcodeReader.Read("invoices.pdf");
foreach (var result in results)
    Console.WriteLine($"Page {result.PageNumber}: {result.Format} — {result.Value}");
Imports IronBarCode

Dim results = BarcodeReader.Read("invoices.pdf")
For Each result In results
    Console.WriteLine($"Page {result.PageNumber}: {result.Format} — {result.Value}")
Next
$vbLabelText   $csharpLabel

Kein Rendering-Schritt, keine externe PDF-Bibliothek, kein Format-Array. Die PDF-Barcode-Lesefunktion verarbeitet alle Seiten automatisch und gibt in jedem Ergebnis die Seitenzahl an.

Stapelgenerierung

Das Generieren von Barcodes für eine Artikelkollektion folgt dem gleichen Musterunterschied wie das Generieren einzelner Barcodes.

OnBarcode-Ansatz:

using OnBarcode.Barcode;

foreach (var item in inventoryItems)
{
    Linear barcode = new Linear();
    barcode.Type = BarcodeType.CODE128;
    barcode.Data = item.Sku;
    barcode.Resolution = 96;
    barcode.BarWidth = 1;
    barcode.BarHeight = 80;
    barcode.ShowText = true;
    barcode.drawBarcode($"labels/{item.Id}.png");
}
using OnBarcode.Barcode;

foreach (var item in inventoryItems)
{
    Linear barcode = new Linear();
    barcode.Type = BarcodeType.CODE128;
    barcode.Data = item.Sku;
    barcode.Resolution = 96;
    barcode.BarWidth = 1;
    barcode.BarHeight = 80;
    barcode.ShowText = true;
    barcode.drawBarcode($"labels/{item.Id}.png");
}
Imports OnBarcode.Barcode

For Each item In inventoryItems
    Dim barcode As New Linear()
    barcode.Type = BarcodeType.CODE128
    barcode.Data = item.Sku
    barcode.Resolution = 96
    barcode.BarWidth = 1
    barcode.BarHeight = 80
    barcode.ShowText = True
    barcode.drawBarcode($"labels/{item.Id}.png")
Next
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;

foreach (var item in inventoryItems)
{
    BarcodeWriter.CreateBarcode(item.Sku, BarcodeEncoding.Code128)
        .SaveAsPng($"labels/{item.Id}.png");
}
using IronBarCode;

foreach (var item in inventoryItems)
{
    BarcodeWriter.CreateBarcode(item.Sku, BarcodeEncoding.Code128)
        .SaveAsPng($"labels/{item.Id}.png");
}
Imports IronBarCode

For Each item In inventoryItems
    BarcodeWriter.CreateBarcode(item.Sku, BarcodeEncoding.Code128) _
        .SaveAsPng($"labels/{item.Id}.png")
Next
$vbLabelText   $csharpLabel

OnBarcodeAPI zu IronBarcode Mapping-Referenz

OnBarcode IronBarcode Notizen
Vor-lizenzierte DLL (keine Laufzeitschlüsselaufruf) IronBarCode.License.LicenseKey = "key" Eigentumsübertragung; einmal beim Start aufgerufen
Zwei DLL-Referenzen (Generator + Leser) Einzelnes NuGet-Paket Ein Paket deckt alle Funktionen ab
new Linear() BarcodeWriter.CreateBarcode(data, encoding) Statische Fabrik; keine Objektinstanz
barcode.BarcodeType = BarcodeType.CODE128 BarcodeEncoding.Code128 als Parameter Als zweites Argument an CreateBarcode übergeben
barcode.Data = "..." Erster Parameter von CreateBarcode Daten sind das erste Argument
barcode.drawBarcode("file.png") .SaveAsPng("file.png") Formatbenannte Methode
barcode.drawBarcode("file.jpg") .SaveAsJpeg("file.jpg") Formatbenannte Methode
barcode.drawBarcode("file.pdf") .SaveAsPdf("file.pdf") Native PDF-Ausgabe
BarcodeType.CODE128 BarcodeEncoding.Code128 Konstante umbenannt
BarcodeType.QRCode BarcodeEncoding.QRCode Direktes Mapping
BarcodeType.EAN13 BarcodeEncoding.EAN13 Direktes Mapping
BarcodeType.DataMatrix BarcodeEncoding.DataMatrix Direktes Mapping
BarcodeType.PDF417 BarcodeEncoding.PDF417 Direktes Mapping
new BarcodeScanner() { BarcodeTypes = [...] } BarcodeReader.Read(path) — statisch Keine Instanz, keine Formatspezifikation
scanner.Scan("file.png")string[] BarcodeReader.Read("file.png")BarcodeResults Reichhaltigerer Rückgabetyp
results[0] (Roh-String) result.Value Dekodierter Zeichenkettenwert
Nicht anwendbar result.Format Erkanntes Format – in OnBarcodenicht verfügbar
Nicht anwendbar result.PageNumber Der Quelltext der PDF-Datei lautet:
Nicht anwendbar BarcodeReader.Read("document.pdf") Native PDF-Lesung; Es gibt kein OnBarcode-Äquivalent.
Manuelle GDI+-Überlagerung für QR-Logo QRCodeWriter.CreateQrCodeWithLogo() Integrierte Logounterstützung
BarcodeType[]-Konfiguration Nicht erforderlich Automatische Erkennung ist die Standardeinstellung.

Gängige Migrationsprobleme und Lösungen

Problem 1: DLL-Referenzkonflikte

OnBarcode: Projekte in der Legacy-DLL-Distribution haben <Reference>-Elemente in .csproj, die auf lib\OnBarcode.Barcode.dll oder ähnliche Pfade verweisen. Wenn die alte DLL beim Hinzufügen von IronBarcode noch auf der Festplatte vorhanden ist, erkennt der Compiler zwei Assemblies mit demselben Namespace-Präfix und erzeugt dadurch Mehrdeutigkeitsfehler.

Lösung: Entfernen Sie den <ItemGroup>-Referenzblock aus .csproj, bevor Sie dotnet add package IronBarcode ausführen. Löschen Sie die DLL-Dateien von der Festplatte. Überprüfen Sie mit einem sauberen Build, ob keine veralteten Assembly-Referenzen mehr vorhanden sind.

# Search for lingering OnBarcodeDLL references in project files
grep -r "OnBarcode" --include="*.csproj" .
grep -r "OnBarcode" --include="*.props" .
# Search for lingering OnBarcodeDLL references in project files
grep -r "OnBarcode" --include="*.csproj" .
grep -r "OnBarcode" --include="*.props" .
SHELL

Problem 2: Typnamen-Konflikte während der phasenweisen Migration

OnBarcode: Der Reader-Namespace exportiert eine Klasse namens BarcodeScanner. IronBarcode hat eine statische Klasse namens BarcodeReader. Diese Namen stehen nicht direkt im Konflikt, aber jede Datei, die sowohl OnBarcode.Barcode.Reader als auch IronBarCode gleichzeitig importiert, kann BarcodeType-Enum-Ambiguität sehen — OnBarcodedefiniert BarcodeType für seine Formatauswahl, und IronBarcode verwendet BarcodeEncoding. Wenn beide Namespaces während der Migration aktiv bleiben, wird es zu Kompilierungsfehlern bei jeder BarcodeType-Referenz kommen.

Lösung: Schließen Sie die Migration jeder Datei atomar ab — entfernen Sie die using OnBarcode.Barcode.Reader-Direktive und fügen Sie using IronBarCode in derselben Bearbeitung hinzu. Lassen Sie nicht beide using-Direktiven in irgendeiner Datei vorhanden. Falls ein schrittweises Vorgehen erforderlich ist, verwenden Sie vorübergehend vollqualifizierte Namen:

// Temporary disambiguation during phased migration
var results = IronBarCode.BarcodeReader.Read("file.png");
// Temporary disambiguation during phased migration
var results = IronBarCode.BarcodeReader.Read("file.png");
' Temporary disambiguation during phased migration
Dim results = IronBarCode.BarcodeReader.Read("file.png")
$vbLabelText   $csharpLabel

Problem 3: Entfernung des BarcodeType-Arrays

OnBarcode: Der Leser benötigt reader.BarcodeTypes = new BarcodeType[] { ... } zur Funktion. Entwickler, die den Reader-Code migrieren, haben manchmal die Angewohnheit, Formate explizit anzugeben und suchen dann in IronBarcode nach einer entsprechenden Konfiguration.

Lösung: Die Formatvorgabe vollständig entfernen. BarcodeReader.Read führt eine automatische Erkennung über alle unterstützten Formate durch. Keine Konfiguration erforderlich, und es gibt kein Äquivalent zu BarcodeType[] in IronBarcode, da es nicht erforderlich ist.

// No format configuration required
var results = BarcodeReader.Read("label.png");
// No format configuration required
var results = BarcodeReader.Read("label.png");
Dim results = BarcodeReader.Read("label.png")
$vbLabelText   $csharpLabel

OnBarcode-Migrationscheckliste

Vor der Migration anfallende Aufgaben

Prüfen Sie den Quellcode, um alle OnBarcode-Verwendungen zu finden, bevor Sie Änderungen vornehmen:

# Find all OnBarcodenamespace imports
grep -rn "using OnBarcode" --include="*.cs" .

# Find all license configuration calls
grep -rn "SetLicense" --include="*.cs" .

# Find all generator usage
grep -rn "new Linear\|new QRCode\|drawBarcode\|BarcodeType\." --include="*.cs" .

# Find all reader usage
grep -rn "BarcodeScanner\|\.Scan(\|BarcodeType\[\]" --include="*.cs" .

# Find DLL references in project files
grep -rn "OnBarcode" --include="*.csproj" .
grep -rn "OnBarcode" --include="*.sln" .
# Find all OnBarcodenamespace imports
grep -rn "using OnBarcode" --include="*.cs" .

# Find all license configuration calls
grep -rn "SetLicense" --include="*.cs" .

# Find all generator usage
grep -rn "new Linear\|new QRCode\|drawBarcode\|BarcodeType\." --include="*.cs" .

# Find all reader usage
grep -rn "BarcodeScanner\|\.Scan(\|BarcodeType\[\]" --include="*.cs" .

# Find DLL references in project files
grep -rn "OnBarcode" --include="*.csproj" .
grep -rn "OnBarcode" --include="*.sln" .
SHELL

Dokumentieren Sie, welche Dateien nur die Generierung, welche das Lesen und welche beides nutzen. Beachten Sie alle Dateien, die den manuellen <Reference>-DLL-Block statt einer NuGet-Paketreferenz enthalten.

Aufgaben der Code-Aktualisierung

  1. Entfernen Sie das OnBarcode.Barcode.Generator-NuGet-Paket
  2. Entfernen Sie das OnBarcode.Barcode.Reader-NuGet-Paket
  3. Entfernen Sie alle manuellen <Reference>-DLL-Einträge aus .csproj-Dateien
  4. Löschen Sie die OnBarcode-DLL-Dateien aus dem Repository.
  5. Führen Sie dotnet add package IronBarcode aus
  6. Ersetzen Sie using OnBarcode.Barcode durch using IronBarCode in jeder Datei
  7. Ersetzen Sie using OnBarcode.Barcode.Reader durch using IronBarCode in jeder Datei
  8. Entfernen Sie beide OnBarcode-DLL-<Reference>-Einträge (Generator und Reader) — keine Laufzeitlizenzaufrufe zum Ersetzen
  9. Fügen Sie IronBarCode.License.LicenseKey = "YOUR-KEY" einmal beim Start der Anwendung hinzu
  10. Konvertieren Sie jeden new Linear()- oder new QRCode() + Eigenschaftszuweisungsblock zu BarcodeWriter.CreateBarcode(data, encoding)
  11. Ersetzen Sie barcode.drawBarcode("file.png") durch .SaveAsPng("file.png") (oder geeignete Formatmethode)
  12. Ersetzen Sie new BarcodeScanner() { BarcodeTypes = [...] } + .Scan(path) durch BarcodeReader.Read(path)
  13. Aktualisieren Sie die Ergebnishandhabung von string[]-Indizierung zu result.Value und result.Format auf BarcodeResults
  14. Entfernen Sie jeglichen PDF-zu-Bild-Rendering-Code, der verwendet wurde, um die PDF-Beschränkung von OnBarcodezu umgehen.
  15. Ersetzen Sie mehrstufige PDF-Rendering- + Scanschleifen durch einen einzigen BarcodeReader.Read("file.pdf")-Aufruf

Post-Migrationstests

  • Überprüfen Sie, ob jeder im Projekt verwendete Barcode-Typ (Code 128, QR, EAN, Data Matrix, PDF417) einen scannbaren Ausgabecode erzeugt.
  • Scannen Sie die generierten Barcodes mit einem physischen Scanner oder einem Mobilgerät, um die Lesbarkeit zu bestätigen.
  • Überprüfen Sie, ob das Barcode-Lesen für bekannte Testbilder korrekte Werte liefert.
  • Prüfen Sie, ob beim Lesen von PDF-Dokumenten korrekte Werte und Seitenzahlen für mehrseitige Testdokumente zurückgegeben werden.
  • Führen Sie die Anwendung in einer beliebigen CI-Umgebung aus, um zu bestätigen, dass die Lizenzschlüsselkonfiguration in der Pipeline korrekt funktioniert.
  • Stellen Sie sicher, dass keine OnBarcode-Strings mehr in .cs, .csproj oder Konfigurationsdateien vorhanden sind, nachdem die Migration abgeschlossen ist

Wichtigste Vorteile der Migration zu IronBarcode

Konsolidiertes Paket und Lizenz: Nach der Migration decken ein NuGet Paket und ein Lizenzschlüssel alle Barcode-Operationen ab. Es müssen keine separaten Produkte beschafft, keine unabhängigen Versionspläne verfolgt und keine Dual-Lizenzkonfiguration bei der Inbetriebnahme verwaltet werden. Die Komplexität einer Zwei-Produkt-Lösung wird durch eine einzige Abhängigkeit ersetzt.

Transparente Beschaffung: IronBarcode veröffentlicht die verschiedenen Lizenzstufen mit Preisen auf der Produktwebsite. Unternehmen können so die Gesamtkosten ermitteln, eine Bestellung aufgeben und die Beschaffung ohne Verkaufsgespräch abschließen. DieIronBarcode Lizenzseite enthält Preisinformationen für alle Stufen sowie Details zur wichtigen Konfiguration für Docker- und Cloud-Umgebungen.

Native PDF-Unterstützung: Projekte, die bisher eine separate PDF-Rendering-Bibliothek zur Verarbeitung von PDFs mit eingebetteten Barcodes benötigten, können diese Abhängigkeit nun vollständig eliminieren. Ein einziger BarcodeReader.Read-Aufruf verarbeitet alle Seiten eines PDF-Dokuments ohne Renderschritt, und jedes Ergebnis enthält die Seitennummer, aus der es extrahiert wurde.

Reichere Leseergebnisse: Der BarcodeResults-Rückgabetyp bietet den dekodierten Wert, das erkannte Barcode-Format, Koordinaten des Begrenzungsrahmens im Quellbild und die Seitennummer für PDF-Lesungen. Anwendungen, die zuvor mit einem flachen string[] gearbeitet haben, können jetzt Formatinformationen zur Verfügung stellen, Annotations-Workflows unterstützen oder Filterung basierend auf Vertrauen ohne zusätzliche Verarbeitung implementieren.

Reduzierte API-Oberfläche: Das statische Factory-Pattern ersetzt das Property-Zuweisungsmodell. Gängige Generierungsoperationen benötigen weniger Codezeilen, und Leseoperationen erfordern weder die Erstellung einer Instanz noch eine Formatvorkonfiguration. Bei Stapelverarbeitungen kommt es zu einem geringeren Codeumfang pro Element, der im Laufe der Zeit leichter zu überprüfen und zu warten ist.

Hinweis:Aspose, OnBarcodeund PDFium sind eingetragene Warenzeichen ihrer jeweiligen Eigentümer. Diese Seite ist nicht mit Aspose Pty Ltd, dem Chromium Project, Google oder OnBarcodeverbunden, wird nicht von ihnen unterstützt oder gesponsert. Alle Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Eigentümer. Vergleiche dienen nur zu Informationszwecken und spiegeln öffentlich zugängliche Informationen zum Zeitpunkt des Schreibens wider.

Häufig gestellte Fragen

Warum sollte ich von OnBarcode zu IronBarcode migrieren?

Zu den häufigsten Gründen gehören die Vereinfachung der Lizenzierung (Beseitigung der Komplexität von SDK und Laufzeitschlüsseln), die Beseitigung von Durchsatzbeschränkungen, die Verbesserung der nativen PDF-Unterstützung, die Verbesserung der Docker/CI/CD-Bereitstellung und die Verringerung von API-Boilerplate im Produktionscode.

Wie kann ich OnBarcode API-Aufrufe durch IronBarcode ersetzen?

Ersetzen Sie Instanzerstellung und Lizenzierung durch IronBarCode.License.LicenseKey = "key". Ersetzen Sie die Leseaufrufe durch BarcodeReader.Read(path) und die Schreibaufrufe durch BarcodeWriter.CreateBarcode(data, encoding). Statische Methoden erfordern keine Instanzverwaltung.

Wie viel Code ändert sich bei der Migration von OnBarcode zu IronBarcode?

Die meisten Migrationen führen zu weniger Codezeilen. Lizenzierungs-Boilerplate, Instanzkonstruktoren und explizite Formatkonfiguration werden entfernt. Zentrale Lese-/Schreibvorgänge werden auf kürzere IronBarcode-Äquivalente mit saubereren Ergebnisobjekten abgebildet.

Muss ich während der Migration sowohl OnBarcode als auch IronBarcode installiert lassen?

Nein. Die meisten Migrationen sind direkte Ersetzungen und keine Paralleloperationen. Migrieren Sie eine Serviceklasse nach der anderen, ersetzen Sie die NuGet-Referenz und aktualisieren Sie die Instanzierungs- und API-Aufrufmuster, bevor Sie zur nächsten Klasse übergehen.

Wie lautet der NuGet-Paketname für IronBarcode?

Das Paket ist 'IronBarCode' (mit großem B und C). Installieren Sie es mit 'Install-Package IronBarCode' oder 'dotnet add package IronBarCode'. Die using-Anweisung im Code lautet 'using IronBarCode;'.

Wie vereinfacht IronBarcode die Docker-Bereitstellung im Vergleich zu OnBarcode?

IronBarcode ist ein NuGet-Paket, für das keine externen SDK-Dateien oder Lizenzkonfigurationen erforderlich sind. In Docker setzen Sie die Umgebungsvariable IRONBARCODE_LICENSE_KEY und das Paket übernimmt die Lizenzvalidierung beim Start.

Erkennt IronBarcode nach der Migration von OnBarcode alle Barcodeformate automatisch?

Ja, IronBarcode erkennt automatisch die Symbologie aller unterstützten Formate. Eine explizite Aufzählung von BarcodeTypes ist nicht erforderlich. Wenn das Format bereits bekannt ist und die Leistung eine Rolle spielt, ermöglicht BarcodeReaderOptions die Einschränkung des Suchraums als eine Optimierung.

Kann IronBarcode Barcodes aus PDFs ohne eine separate Bibliothek lesen?

Ja, BarcodeReader.Read("document.pdf") verarbeitet PDF-Dateien nativ. Die Ergebnisse enthalten PageNumber, Format, Value und Confidence für jeden gefundenen Barcode. Es ist kein externer PDF-Rendering-Schritt erforderlich.

Wie handhabt IronBarcode die parallele Verarbeitung von Barcodes?

Die statischen Methoden von IronBarcode sind zustandslos und thread-sicher. Verwenden Sie Parallel.ForEach direkt über Dateilisten ohne Instanzmanagement pro Thread. BarcodeReaderOptions.MaxParallelThreads steuert das interne Thread-Budget.

Welche Ergebniseigenschaften ändern sich bei der Migration von OnBarcode zu IronBarcode?

Übliche Umbenennungen: BarcodeValue wird zu Value, BarcodeType wird zu Format. IronBarcode-Ergebnisse fügen auch Confidence und PageNumber hinzu. Eine lösungsweite Such- und Ersetzungsfunktion übernimmt die Umbenennungen im bestehenden Ergebnisverarbeitungscode.

Wie kann ich die IronBarcode-Lizenzierung in einer CI/CD-Pipeline einrichten?

Speichern Sie IRONBARCODE_LICENSE_KEY als Pipeline-Geheimnis und weisen Sie IronBarCode.License.LicenseKey im Startup-Code der Anwendung zu. Ein Geheimnis deckt alle Umgebungen ab, einschließlich Entwicklung, Test, Staging und Produktion.

Unterstützt IronBarcode die Generierung von QR-Codes mit benutzerdefiniertem Styling?

Ja. QRCodeWriter.CreateQrCode() unterstützt benutzerdefinierte Farben über ChangeBarCodeColor(), das Einbetten von Logos über AddBrandLogo(), konfigurierbare Fehlerkorrekturstufen und mehrere Ausgabeformate einschließlich PNG, JPG, PDF und Stream.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen

Iron-Support-Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an