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
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
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
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
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
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"
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")
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
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
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
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()
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)
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)
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")
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
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
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
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" .
Entfernen Sie das Paket erst, wenn alle Verweise gelöscht sind:
dotnet remove package Spire.PDF
dotnet remove package Spire.PDF
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" .
- Dokumentieren Sie alle Dateien, die
BarCodeTypeKandidaten-Arrays enthalten (Typvermutungsschleifen, die entfernt werden sollen) - Identifizieren Sie alle
string[]Variablen, die Ergebnisse vonScan()erhalten und typaktualisiert werden müssen - Bestätigen Sie, ob
Spire.PDFfür andere Operationen als Barcode-Extraktion verwendet wird
Aufgaben der Code-Aktualisierung
- Entfernen Sie
FreeSpire.BarcodeoderSpire.BarcodeNuGet-Paket - Entfernen Sie
Spire.PDFNuGet-Paket, wenn die Barcode-Extraktion der einzige Einsatz war - Installieren Sie
IronBarcodeNuGet-Paket - Ersetzen Sie alle
using Spire.Barcode;durchusing IronBarCode; - Entfernen Sie alle
using Spire.Pdf;Importe, wo sie nicht mehr benötigt werden - Ersetzen Sie die Lizenzinitialisierung:
ApplyKey()oderSetLicenseKey()durchIronBarCode.License.LicenseKey = "key" - Entfernen Sie alle
new BarcodeScanner()Instanziierungen - Ersetzen Sie alle
scanner.Scan(path, BarCodeType.X)Aufrufe durchBarcodeReader.Read(path) - Löschen Sie die foreach-Schleifen, die den Datentyp erraten müssen; ersetzen Sie jeden mit einem einzelnen
BarcodeReader.Read()Aufruf - Entfernen Sie die Blöcke für die PDF-Seiteniteration und die Bildextraktion; ersetzen mit
BarcodeReader.Read("file.pdf") - Aktualisieren Sie
string[]Ergebniszuweisungen, um.Valueoder.Select(r => r.Value).ToArray()zu verwenden - Ersetzen Sie
new BarcodeSettings()Blöcke durchBarcodeWriter.CreateBarcode(data, encoding)Ketten - Entfernen Sie
new BarCodeGenerator(settings)Instanziierungen - Ersetzen Sie
.GenerateImage()+image.Save()durch.SaveAsPng()oder.SaveAsJpeg() - Ersetzen Sie
BarCodeType.XEnum-Werte bei der Erzeugung durchBarcodeEncoding.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.
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.

