Zum Fußzeileninhalt springen
VIDEOS

Wie man einen Barcode-Scanner in Blazor verwendet | IronBarcode

Migrating from Spire.Barcode to IronBarcode

Spire.Barcode's BarcodeScanner.Scan() erfordert ein BarCodeType Argument bei jedem Aufruf. Mit zunehmender Komplexität der Codebasis, die diverse Dokumentenquellen, neue Lieferantenetiketten und neue Barcode-Formate verarbeiten muss, entstehen bei diesem Design Typerkennungsschleifen, die im Laufe der Zeit zu hohen Wartungskosten führen. Dieser Leitfaden beschreibt den kompletten Übergang von Spire.Barcode zu IronBarcode: die Gründe für diesen Wechsel, die notwendigen Schritte und die Codebeispiele vor und nach der Umstellung für alle gängigen Operationen.

Warum von Spire.Barcode migrieren?

Format-Spezifikation Overhead: Jeder Aufruf von BarcodeScanner.Scan() in Spire.Barcode erfordert einen BarCodeType enum-Wert, der vom aufrufenden Code bereitgestellt werden muss. Anwendungen, die Barcodes aus unbekannten oder gemischtformatigen Quellen verarbeiten, müssen eine Liste möglicher Typen führen und diese durchlaufen, bis eine Übereinstimmung gefunden wird. Jedes dem Workflow hinzugefügte Format erfordert eine Aktualisierung des Kandidaten-Arrays, ein erneutes Testen der Erkennungslogik und die Bestätigung, dass die Iterationsreihenfolge nicht dazu führt, dass ein Format ein anderes überlagert. Dieser Mehraufwand wächst proportional zur Formatvielfalt.

Einschränkungen bei der Evaluierung der kostenlosen Version: FreeSpire.Barcode reduziert absichtlich die Leseleistung und schränkt den verfügbaren Symbologiesatz im Vergleich zum kommerziellen Produkt ein. Die im Rahmen einer FreeSpire.Barcode-Evaluierung durchgeführten Benchmarks und Formatabdeckungstests stellen kein repräsentatives Verhalten der kommerziellen Spire.Barcode-Version dar. Teams, die sich aufgrund einer kostenlosen Evaluierung für einen Kauf entscheiden, stellen möglicherweise nach dem Kauf fest, dass sich das Produkt im Produktivbetrieb anders verhält – insbesondere in Bezug auf Durchsatz und unterstützte Symbologien.

PDF benötigt zwei Bibliotheken: Spire.Barcode kann Barcodes nicht direkt aus PDF-Dateien lesen. PDF-basierte Workflows erfordern das separate Spire.PDF Paket mit eigener Lizenz, zusätzlich müssen Entwickler Code schreiben, um Seiten zu durchlaufen, Bilder von jeder Seite zu extrahieren und diese Bilder dem Barcodescanner zuzuführen. Eine Aufgabe, die konzeptionell zur Barcode-Lesung gehört, ist auf zwei Produkte, zwei Lizenzvereinbarungen und einen erheblichen Teil des Infrastrukturcodes aufgeteilt.

Rückgabewert-Komplexität: BarcodeScanner.Scan() gibt string[] zurück, welches nur dekodierte Werte enthält. Das erkannte Barcode-Format wird nicht in die Rücksendung einbezogen. Anwendungen, die Ergebnisse nach Format weiterleiten müssen – beispielsweise QR-Code-Werte an einen Prozessor und Code128-Werte an einen anderen senden – müssen eine separate Typvariable verwalten, die von dem Iterationsschritt abgeleitet ist, der das Ergebnis erzeugt hat. Dies führt zu einer zusätzlichen Zustandsverwaltung über den Scanvorgang selbst hinaus.

Das grundsätzliche Problem

Die Artenbestimmungsschleife ist das sichtbarste Symptom der obligatorischen BarCodeType Einschränkung. In einer Spire.Barcode-Codebasis, die Dokumente aus mehreren Quellen verarbeitet, tritt dieses Muster wiederholt auf:

// Spire.Barcode: growing candidate loop with silent misses
BarcodeScanner scanner = new BarcodeScanner();
var candidates = new[] { BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417 };

string foundValue = null;
foreach (var type in candidates)
{
    string[] found = scanner.Scan("barcode.png", type);
    if (found.Length > 0)
    {
        foundValue = found[0];
        break;
    }
}
// Spire.Barcode: growing candidate loop with silent misses
BarcodeScanner scanner = new BarcodeScanner();
var candidates = new[] { BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417 };

string foundValue = null;
foreach (var type in candidates)
{
    string[] found = scanner.Scan("barcode.png", type);
    if (found.Length > 0)
    {
        foundValue = found[0];
        break;
    }
}
Imports Spire.Barcode

Dim scanner As New BarcodeScanner()
Dim candidates = {BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417}

Dim foundValue As String = Nothing
For Each type In candidates
    Dim found As String() = scanner.Scan("barcode.png", type)
    If found.Length > 0 Then
        foundValue = found(0)
        Exit For
    End If
Next
$vbLabelText   $csharpLabel

IronBarcode beseitigt die Schleife vollständig. Die Formaterkennung ist in die Bibliothek integriert:

// IronBarcode: single call, all formats, type included in result
var results = BarcodeReader.Read("barcode.png");

foreach (var result in results)
{
    Console.WriteLine($"{result.Format}: {result.Value}");
}
// IronBarcode: single call, all formats, type included in result
var results = BarcodeReader.Read("barcode.png");

foreach (var result in results)
{
    Console.WriteLine($"{result.Format}: {result.Value}");
}
Imports IronBarcode

' IronBarcode: single call, all formats, type included in result
Dim results = BarcodeReader.Read("barcode.png")

For Each result In results
    Console.WriteLine($"{result.Format}: {result.Value}")
Next
$vbLabelText   $csharpLabel

IronBarcode vs. Spire.Barcode: Funktionsvergleich

Feature Spire.Barcode IronBarcode
Automatische Formaterkennung Nein Ja
Der Parameter "BarCodeType" ist erforderlich. Ja Nein
Metadaten im Ergebnis formatieren Nein Ja
Native PDF-Lesung Nein (erfordert Spire.PDF) Ja
Zusätzliche Bibliothek für PDF Spire.PDF (separate Lizenz) None
Leseleistung im kostenlosen Tarif absichtlich herabgesetzt Volle Geschwindigkeit
Wasserzeichen der kostenlosen Version Groß, deckt Barcode ab Klein, nur Rand
Kostenlose Tier-Symbole ~20 Arten Mehr als 50 Arten
Registrierung für die kostenlose Stufe Ja Nein
API-Generierungsmodell Einstellungsobjekt + Generator Statische Fabrik mit fließender Kette
QR-Code mit individuellem Logo Nur für gewerbliche Kunden Alle Stufen
Rückgabetyp von read string[] BarcodeResults (mit Typ-Metadaten)
Symbolik zählen 39+ (gewerblich) 50+
Lizenzmodell Dauerlizenz pro Sitzplatz + Abonnement Dauerlizenz mit optionaler Verlängerung

Schnellstart

Schritt 1: Ersetzen des NuGet-Pakets

Entfernen Sie das oder die aktuell verwendeten Spire-Pakete:

# Remove whichever variant is installed
dotnet remove package FreeSpire.Barcode
# or
dotnet remove package Spire.Barcode

# If Spire.PDF was installed only for barcode extraction, remove it as well
dotnet remove package Spire.PDF
# Remove whichever variant is installed
dotnet remove package FreeSpire.Barcode
# or
dotnet remove package Spire.Barcode

# If Spire.PDF was installed only for barcode extraction, remove it as well
dotnet remove package Spire.PDF
SHELL

Wenn Spire.PDF für andere Dokumentoperationen jenseits der Barcode-Extraktion verwendet wird, behalten Sie es und entfernen Sie nur die Barcode-bezogenen Codepfade daraus.

IronBarcode installieren:

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

Schritt 2: Namespaces aktualisieren

Ersetzen Sie alle Spire-Namespace-Importe durch den IronBarcode-Namespace:

// Remove:
using Spire.Barcode;
using Spire.Pdf;

// Add:
using IronBarCode;
// Remove:
using Spire.Barcode;
using Spire.Pdf;

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

Schritt 3: Lizenz initialisieren

Ersetzen Sie die Spire-Lizenzinitialisierung durch eine einzelne IronBarcode Eigenschaftszuweisung beim Anwendungsstart. Informationen zu Schlüsselformaten und Bereitstellungsoptionen finden Sie auf derIronBarcode -Lizenzierungsseite .

// Remove (FreeSpire registration):
Spire.Barcode.BarcodeSettings.ApplyKey("your-free-key");

// Remove (commercial Spire license):
Spire.License.LicenseProvider.SetLicenseKey("your-commercial-key");

// Add (IronBarcode):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Remove (FreeSpire registration):
Spire.Barcode.BarcodeSettings.ApplyKey("your-free-key");

// Remove (commercial Spire license):
Spire.License.LicenseProvider.SetLicenseKey("your-commercial-key");

// Add (IronBarcode):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' Remove (FreeSpire registration):
Spire.Barcode.BarcodeSettings.ApplyKey("your-free-key")

' Remove (commercial Spire license):
Spire.License.LicenseProvider.SetLicenseKey("your-commercial-key")

' Add (IronBarcode):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Für Docker- und CI-Umgebungen kann der Lizenzschlüssel über eine Umgebungsvariable bereitgestellt werden:

IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
Imports System

IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
$vbLabelText   $csharpLabel

Beispiele für die Code-Migration

Lesen eines Barcodes im bekannten Format

Ein Einzelformat-Lesen in Spire.Barcode gibt den Typ explizit weiter und erhält ein string[].

Spire.Barcode-Ansatz:

using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("shipping-label.png", BarCodeType.Code128);

if (results.Length > 0)
{
    ProcessShipment(results[0]);
}
using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("shipping-label.png", BarCodeType.Code128);

if (results.Length > 0)
{
    ProcessShipment(results[0]);
}
Imports Spire.Barcode

Dim scanner As New BarcodeScanner()
Dim results As String() = scanner.Scan("shipping-label.png", BarCodeType.Code128)

If results.Length > 0 Then
    ProcessShipment(results(0))
End If
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;

var results = BarcodeReader.Read("shipping-label.png");

if (results.Any())
{
    ProcessShipment(results.First().Value);
}
using IronBarCode;

var results = BarcodeReader.Read("shipping-label.png");

if (results.Any())
{
    ProcessShipment(results.First().Value);
}
Imports IronBarCode

Dim results = BarcodeReader.Read("shipping-label.png")

If results.Any() Then
    ProcessShipment(results.First().Value)
End If
$vbLabelText   $csharpLabel

Der BarCodeType Parameter wird entfernt. Wenn die nachgelagerte Logik das erkannte Format bestätigen muss, liefert results.First().Format dies, ohne eine separate Zustandsvariable zu benötigen.

Zusammenfassen einer Schleife vom Typ gemischtes Format

Wenn eine Spire.Barcode-Codebasis Dokumente verarbeitet, die verschiedene Formate enthalten können, häuft sich die Typerkennungsschleife mit der Zeit an, da immer wieder neue Formate in den Workflow gelangen.

Spire.Barcode-Ansatz:

using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
BarCodeType[] candidates = new[]
{
    BarCodeType.Code128,
    BarCodeType.QRCode,
    BarCodeType.DataMatrix,
    BarCodeType.EAN13,
    BarCodeType.PDF417
};

List<string> allValues = new List<string>();
foreach (BarCodeType type in candidates)
{
    string[] found = scanner.Scan("document-scan.png", type);
    allValues.AddRange(found);
}
using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
BarCodeType[] candidates = new[]
{
    BarCodeType.Code128,
    BarCodeType.QRCode,
    BarCodeType.DataMatrix,
    BarCodeType.EAN13,
    BarCodeType.PDF417
};

List<string> allValues = new List<string>();
foreach (BarCodeType type in candidates)
{
    string[] found = scanner.Scan("document-scan.png", type);
    allValues.AddRange(found);
}
Imports Spire.Barcode

Dim scanner As New BarcodeScanner()
Dim candidates As BarCodeType() = {
    BarCodeType.Code128,
    BarCodeType.QRCode,
    BarCodeType.DataMatrix,
    BarCodeType.EAN13,
    BarCodeType.PDF417
}

Dim allValues As New List(Of String)()
For Each type As BarCodeType In candidates
    Dim found As String() = scanner.Scan("document-scan.png", type)
    allValues.AddRange(found)
Next
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;

// The entire loop is replaced by a single call
var results = BarcodeReader.Read("document-scan.png");
List<string> allValues = results.Select(r => r.Value).ToList();
using IronBarCode;

// The entire loop is replaced by a single call
var results = BarcodeReader.Read("document-scan.png");
List<string> allValues = results.Select(r => r.Value).ToList();
Imports IronBarCode

' The entire loop is replaced by a single call
Dim results = BarcodeReader.Read("document-scan.png")
Dim allValues As List(Of String) = results.Select(Function(r) r.Value).ToList()
$vbLabelText   $csharpLabel

Die Bildlesefunktion von IronBarcode verarbeitet alle über 50 Symbologien in einem einzigen Durchgang. Wenn die Lesegeschwindigkeit für die Verarbeitung großer Chargen abgestimmt werden muss, bietet BarcodeReaderOptions diese Kontrolle ohne format-spezifische Verzweigungen:

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("document-scan.png", options);
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("document-scan.png", options);
Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True
}
Dim results = BarcodeReader.Read("document-scan.png", options)
$vbLabelText   $csharpLabel

Für Anleitungen zur Auswahl des geeigneten ReadingSpeed Wertes, siehe die Dokumentation zu Lesegeschwindigkeitsoptionen.

Barcode generieren

Die Spire.Barcode-Erzeugung erfordert die Instanziierung eines BarcodeSettings Objekts, jede Eigenschaft individuell zuzuweisen, die Einstellungen einem BarCodeGenerator zu übergeben und dann GenerateImage() aufzurufen, bevor irgendeine Datei geschrieben wird.

Spire.Barcode-Ansatz:

using Spire.Barcode;

BarcodeSettings settings = new BarcodeSettings();
settings.Type = BarCodeType.Code128;
settings.Data = "SHIP-9842-XZ";
settings.ShowText = true;
settings.TextMargin = 5;
settings.BarHeight = 60;
settings.Unit = GraphicsUnit.Pixel;

BarCodeGenerator generator = new BarCodeGenerator(settings);
Image barcodeImage = generator.GenerateImage();
barcodeImage.Save("shipping-label.png", ImageFormat.Png);
using Spire.Barcode;

BarcodeSettings settings = new BarcodeSettings();
settings.Type = BarCodeType.Code128;
settings.Data = "SHIP-9842-XZ";
settings.ShowText = true;
settings.TextMargin = 5;
settings.BarHeight = 60;
settings.Unit = GraphicsUnit.Pixel;

BarCodeGenerator generator = new BarCodeGenerator(settings);
Image barcodeImage = generator.GenerateImage();
barcodeImage.Save("shipping-label.png", ImageFormat.Png);
Imports Spire.Barcode
Imports System.Drawing
Imports System.Drawing.Imaging

Dim settings As New BarcodeSettings()
settings.Type = BarCodeType.Code128
settings.Data = "SHIP-9842-XZ"
settings.ShowText = True
settings.TextMargin = 5
settings.BarHeight = 60
settings.Unit = GraphicsUnit.Pixel

Dim generator As New BarCodeGenerator(settings)
Dim barcodeImage As Image = generator.GenerateImage()
barcodeImage.Save("shipping-label.png", ImageFormat.Png)
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-9842-XZ", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("shipping-label.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-9842-XZ", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("shipping-label.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("SHIP-9842-XZ", BarcodeEncoding.Code128) _
    .ResizeTo(400, 100) _
    .SaveAsPng("shipping-label.png")
$vbLabelText   $csharpLabel

Das veränderbare BarcodeSettings Objekt und die separate BarCodeGenerator Instanz werden durch einen einzigen statischen Fabrikaufruf mit einer fließenden Kette ersetzt. Es besteht kein Risiko, dass Einstellungen versehentlich über gleichzeitige Aufrufe hinweg geteilt werden, da jede CreateBarcode() Ausführung unabhängig ist.

Barcodes aus einem PDF-Dokument lesen

Spire.Barcode kann PDFs nicht direkt lesen. Der auf Spire basierende Ansatz erfordert das separate Spire.PDF Paket, um die Datei zu öffnen, ihre Seiten zu durchlaufen, Rasterbilder von jeder Seite zu extrahieren und diese Bilder dann nacheinander dem Barcodescanner zuzuführen.

Spire.Barcode-Ansatz:

using Spire.Pdf;
using Spire.Barcode;

var pdf = new PdfDocument();
pdf.LoadFromFile("invoices.pdf");

var scanner = new BarcodeScanner();
var extractedValues = new List<string>();

foreach (PdfPageBase page in pdf.Pages)
{
    Image[] images = page.ExtractImages();
    foreach (Image image in images)
    {
        string[] found = scanner.Scan(image, BarCodeType.QRCode);
        extractedValues.AddRange(found);
    }
}
using Spire.Pdf;
using Spire.Barcode;

var pdf = new PdfDocument();
pdf.LoadFromFile("invoices.pdf");

var scanner = new BarcodeScanner();
var extractedValues = new List<string>();

foreach (PdfPageBase page in pdf.Pages)
{
    Image[] images = page.ExtractImages();
    foreach (Image image in images)
    {
        string[] found = scanner.Scan(image, BarCodeType.QRCode);
        extractedValues.AddRange(found);
    }
}
Imports Spire.Pdf
Imports Spire.Barcode

Dim pdf As New PdfDocument()
pdf.LoadFromFile("invoices.pdf")

Dim scanner As New BarcodeScanner()
Dim extractedValues As New List(Of String)()

For Each page As PdfPageBase In pdf.Pages
    Dim images() As Image = page.ExtractImages()
    For Each image As Image In images
        Dim found() As String = scanner.Scan(image, BarCodeType.QRCode)
        extractedValues.AddRange(found)
    Next
Next
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;

var results = BarcodeReader.Read("invoices.pdf");

foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} = {barcode.Value}");
}
using IronBarCode;

var results = BarcodeReader.Read("invoices.pdf");

foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} = {barcode.Value}");
}
Imports IronBarCode

Dim results = BarcodeReader.Read("invoices.pdf")

For Each barcode In results
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} = {barcode.Value}")
Next
$vbLabelText   $csharpLabel

IronBarcode liest PDF-Dokumente direkt, ohne dass Spire.PDF oder irgendeine manuelle Seitenverwaltung erforderlich ist. Die Seitenzahl, von der jeder Barcode extrahiert wurde, ist im Ergebnisobjekt verfügbar. Sobald der PDF Lese-Code ersetzt ist, können die Spire.PDF Paketreferenz und alle using Spire.Pdf; Importe aus dem Projekt entfernt werden.

Spire.Barcode API zu IronBarcode Mapping-Referenz

Spire.Barcode IronBarcode Notizen
new BarcodeScanner() BarcodeReader.Read() (statisch) Es wird keine Scannerinstanz benötigt.
scanner.Scan(path, BarCodeType.X) BarcodeReader.Read(path) Typparameter entfernt
BarCodeType.Code128 (erforderlich) Automatisch erkannt Keine gleichwertige Qualifikation erforderlich
BarCodeType.QRCode (erforderlich) Automatisch erkannt Keine gleichwertige Qualifikation erforderlich
string[] results von Scan() BarcodeResults Sammlung Zugriffswerte über .Value
results[0] (String) results[0].Value
Format des Ergebnisses unbekannt result.Format Im Ergebnisobjekt enthaltener Typ
new BarcodeSettings() Parameter auf CreateBarcode() Kein Einstellungsobjekt erforderlich
settings.Type = BarCodeType.X BarcodeEncoding.X als zweiter Parameter
settings.Data = "value" Erster Parameter von CreateBarcode()
new BarCodeGenerator(settings) Nicht erforderlich Die statische Fabrik ersetzt sie.
generator.GenerateImage() .SaveAsPng() / .SaveAsJpeg() Formatspezifische Ausgabemethoden
BarcodeSettings.ApplyKey("key") IronBarCode.License.LicenseKey = "key" Einmal beim Start einstellen
Spire.License.LicenseProvider.SetLicenseKey("key") IronBarCode.License.LicenseKey = "key" Gleicher Ersatz für eine einzelne Leitung
Spire.PDF (für PDF-Lesen) Nicht erforderlich Native PDF-Unterstützung integriert

Gängige Migrationsprobleme und Lösungen

Problem 1: Entfernung des Parameters "BarCodeType"

Spire.Barcode: scanner.Scan(path, BarCodeType.Code128) — der Typ-Argument ist durch die Methodensignatur erforderlich. Das Entfernen dieser Zeile führt zu einem Kompilierungsfehler.

Lösung: Ersetzen Sie den gesamten Aufruf durch BarcodeReader.Read(path). Durchsuchen Sie den Codebase nach BarCodeType., um jeden Vorkommen zu finden. Typvermutungsschleifen (foreach-Blöcke, die über ein BarCodeType[] Kandidaten-Array iterieren) können vollständig gelöscht werden; ein einzelner BarcodeReader.Read() Aufruf ersetzt die Schleife.

Problem 2: Rückgabetyp string[]

Spire.Barcode: Scan() gibt string[] zurück. Der nachgelagerte Code, der dies einer string[] Variablen zuweist oder es an eine Methode übergibt, die string[] erwartet, wird nach der Migration nicht mehr kompiliert.

Lösung: Aktualisieren Sie die Aufrufstellen, um mit BarcodeResults zu arbeiten. Um ein einfaches Zeichenfolgen-Array zu erhalten, verwenden Sie .Select(r => r.Value).ToArray(). Um auf das erste Ergebnis zuzugreifen, verwenden Sie .First()?.Value. Wenn das erkannte Format nachgelagert benötigt wird, ist es im Ergebnisobjekt über .Format verfügbar — keine separate Zustandsvariable erforderlich.

// If a plain string array is needed:
string[] texts = BarcodeReader.Read("barcode.png")
    .Select(r => r.Value)
    .ToArray();

// If only the first value is needed:
string first = BarcodeReader.Read("barcode.png").First()?.Value;
// If a plain string array is needed:
string[] texts = BarcodeReader.Read("barcode.png")
    .Select(r => r.Value)
    .ToArray();

// If only the first value is needed:
string first = BarcodeReader.Read("barcode.png").First()?.Value;
Imports System.Linq

' If a plain string array is needed:
Dim texts As String() = BarcodeReader.Read("barcode.png") _
    .Select(Function(r) r.Value) _
    .ToArray()

' If only the first value is needed:
Dim first As String = BarcodeReader.Read("barcode.png").FirstOrDefault()?.Value
$vbLabelText   $csharpLabel

Problem 3: Bereinigung des Spire.PDF-Pakets

Spire.Barcode: PDF-Leseworkflows sind von Spire.PDF für Seitenzugriff und Bildextraktion abhängig. Das Projekt referenziert das Paket und enthält using Spire.Pdf; Importe und PdfDocument / PdfPageBase Verwendung, die über mehrere Dateien verteilt sind.

Lösung: Nachdem Sie den gesamten PDF Barcode-Extraktionscode mit BarcodeReader.Read("file.pdf") ersetzt haben, führen Sie ein grep-Audit durch, um sicherzustellen, dass keine restlichen Spire.Pdf Referenzen existieren, bevor Sie das Paket entfernen:

grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "Spire\.Pdf\|PdfPageBase\|ExtractImages" --include="*.cs" .
grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "Spire\.Pdf\|PdfPageBase\|ExtractImages" --include="*.cs" .
SHELL

Entfernen Sie das Paket erst, wenn alle Verweise gelöscht sind:

dotnet remove package Spire.PDF
dotnet remove package Spire.PDF
SHELL

Ausgabe 4: Namensraumänderungen

Spire.Barcode: Der Spire.Barcode Namensraum enthält BarcodeScanner, BarcodeSettings, BarCodeGenerator, und BarCodeType. Der IronBarCode Namensraum enthält BarcodeReader, BarcodeWriter, BarcodeEncoding, und BarcodeReaderOptions.

Lösung: Ersetzen Sie using Spire.Barcode; global durch using IronBarCode;. Das BarCodeType enum, das bei der Erzeugung verwendet wird, wird durch BarcodeEncoding ersetzt. Das BarCodeType enum, das beim Lesen verwendet wird, hat kein IronBarcode-Äquivalent — es wird einfach entfernt, da die Formaterkennung automatisch erfolgt.

Spire.Barcode-Migrationscheckliste

Vor der Migration anfallende Aufgaben

Prüfen Sie den Quellcode, um alle Verwendungen von Spire.Barcode zu identifizieren, bevor Sie Änderungen vornehmen:

grep -r "using Spire.Barcode" --include="*.cs" .
grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "BarcodeScanner\|BarcodeSettings\|BarCodeGenerator\|BarCodeType\." --include="*.cs" .
grep -r "ApplyKey\|SetLicenseKey" --include="*.cs" .
grep -r "ExtractImages\|PdfPageBase" --include="*.cs" .
grep -r "using Spire.Barcode" --include="*.cs" .
grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "BarcodeScanner\|BarcodeSettings\|BarCodeGenerator\|BarCodeType\." --include="*.cs" .
grep -r "ApplyKey\|SetLicenseKey" --include="*.cs" .
grep -r "ExtractImages\|PdfPageBase" --include="*.cs" .
SHELL
  • Dokumentieren Sie alle Dateien, die BarCodeType Kandidaten-Arrays enthalten (Typvermutungsschleifen, die entfernt werden sollen)
  • Identifizieren Sie alle string[] Variablen, die Ergebnisse von Scan() erhalten und typaktualisiert werden müssen
  • Bestätigen Sie, ob Spire.PDF für andere Operationen als Barcode-Extraktion verwendet wird

Aufgaben der Code-Aktualisierung

  1. Entfernen Sie FreeSpire.Barcode oder Spire.Barcode NuGet-Paket
  2. Entfernen Sie Spire.PDF NuGet-Paket, wenn die Barcode-Extraktion der einzige Einsatz war
  3. Installieren Sie IronBarcode NuGet-Paket
  4. Ersetzen Sie alle using Spire.Barcode; durch using IronBarCode;
  5. Entfernen Sie alle using Spire.Pdf; Importe, wo sie nicht mehr benötigt werden
  6. Ersetzen Sie die Lizenzinitialisierung: ApplyKey() oder SetLicenseKey() durch IronBarCode.License.LicenseKey = "key"
  7. Entfernen Sie alle new BarcodeScanner() Instanziierungen
  8. Ersetzen Sie alle scanner.Scan(path, BarCodeType.X) Aufrufe durch BarcodeReader.Read(path)
  9. Löschen Sie die foreach-Schleifen, die den Datentyp erraten müssen; ersetzen Sie jeden mit einem einzelnen BarcodeReader.Read() Aufruf
  10. Entfernen Sie die Blöcke für die PDF-Seiteniteration und die Bildextraktion; ersetzen mit BarcodeReader.Read("file.pdf")
  11. Aktualisieren Sie string[] Ergebniszuweisungen, um .Value oder .Select(r => r.Value).ToArray() zu verwenden
  12. Ersetzen Sie new BarcodeSettings() Blöcke durch BarcodeWriter.CreateBarcode(data, encoding) Ketten
  13. Entfernen Sie new BarCodeGenerator(settings) Instanziierungen
  14. Ersetzen Sie .GenerateImage() + image.Save() durch .SaveAsPng() oder .SaveAsJpeg()
  15. Ersetzen Sie BarCodeType.X Enum-Werte bei der Erzeugung durch BarcodeEncoding.X

Post-Migrationstests

  • Bestätigen Sie, dass alle Formate, die zuvor über die Kandidatenschleife gescannt wurden, korrekt von BarcodeReader.Read() erkannt werden
  • Messen Sie den Durchsatz der Chargenverarbeitung und stellen Sie sicher, dass er den Produktionsanforderungen entspricht.
  • Überprüfen Sie, ob die PDF-Barcodeextraktion korrekte Werte und Seitenzahlen liefert.
  • Überprüfen Sie die Qualität und Lesbarkeit des generierten Barcodes mit einem physischen oder Software-Scanner.
  • Prüfen Sie, ob der Lizenzschlüssel in allen Bereitstellungsumgebungen (lokal, Staging, Produktion, CI/CD) korrekt geladen ist.
  • Führen Sie die grep-Audit-Befehle aus den Vorbereitungsaufgaben für die Migration aus, um zu bestätigen, dass keine Spire-Referenzen mehr vorhanden sind.

Wichtigste Vorteile der Migration zu IronBarcode

Wegfall des Aufwands für die Formatpflege: Nach der Migration muss keine Kandidatentypenliste mehr gepflegt werden und es muss keine Typerkennungsschleife mehr aktualisiert werden, wenn ein neues Barcode-Format in den Workflow gelangt. BarcodeReader.Read() behandelt automatisch das gesamte Symbol-Set, und das erkannte Format ist in jedem Ergebnisobjekt für die nachgelagerte Weiterleitung enthalten.

Genaue Evaluierung vor der endgültigen Entscheidung: Die IronBarcode Testversion läuft mit der gleichen Binärdatei wie das lizenzierte Produkt bei voller Lesegeschwindigkeit und mit dem kompletten Symboliksatz. Die während der Testphase durchgeführten Leistungsbenchmarks und Formatabdeckungstests werden direkt in die Produktion übernommen. Teams können eine Kaufentscheidung mit der Gewissheit treffen, dass das evaluierte Verhalten dem implementierten Verhalten entspricht.

Einzelpaket-PDF-Unterstützung: Barcode-Extraktion aus PDF-Dateien wird durch denselben BarcodeReader.Read() Aufruf durchgeführt, der für Bilder verwendet wird. Es werden keine zusätzliche Bibliothek, keine zusätzliche Lizenz und kein Code zur Iteration von Handbuchseiten benötigt. Teams, die zuvor sowohl Spire.Barcode als auch Spire.PDF warteten, reduzieren sich auf eine einzige Abhängigkeit für den gesamten Barcode-Workflow.

Ergebnisobjekte mit Format-Metadaten: Jeder Eintrag in einer BarcodeResults Sammlung trägt den dekodierten Wert, die erkannte Symbologie, die Quellseitennummer für PDF-Eingaben und den Begrenzungsbereich innerhalb des Quellbildes. Anwendungen, die nach Format routen, filtern oder protokollieren müssen, haben diese Informationen im Ergebnis ohne zusätzliche Zustandsverwaltung zur Verfügung.

Vereinfachte Erzeugungs-API: Das statische Fabrikmuster in BarcodeWriter.CreateBarcode() eliminiert das veränderbare BarcodeSettings Objekt und die separate BarCodeGenerator Instanz. Jeder Generationsaufruf ist in sich abgeschlossen, wodurch das Risiko eines Konfigurationsüberlaufs zwischen gleichzeitig ablaufenden Operationen verringert wird.

Vorwärtskompatibilität: IronBarcode erhält regelmäßige Updates, die mit den .NET Runtime-Releases abgestimmt sind. Mit zunehmender Verbreitung von .NET 10 bis zum Jahr 2026 stellen Kompatibilitätsupdates sicher, dass migrierte Codebasen weiterhin erstellt und ausgeführt werden können, ohne dass bei jeder neuen .NET Version Bibliotheksänderungen erforderlich sind.

Hinweis:Spire ist ein eingetragenes Warenzeichen seines jeweiligen Eigentümers. Diese Seite ist nicht mit e-iceblue verbunden, genehmigt 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 Spire.Barcode 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 Spire.Barcode 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 Spire.Barcode 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 Spire.Barcode 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 Spire.BarCode?

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 Spire.Barcode 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 Spire.Barcode 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