Wie man Barcodes aus Streams in C# liest
Migrating frombarKoder SDKto IronBarcode
Barkoder liefert offizielle .NET-Pakete — Plugin.Maui.Barkoder und Barkoder.Xamarin — aber beide sind strikt mobile Kamera-Scan-Komponenten. Wenn Sie barKoder für seinen MatrixSight-Algorithmus, den DeBlur-Modus, die Multi-Barcode-Erkennung oder den DPM-Support evaluiert haben und dann festgestellt haben, dass Sie Dateieingabe, PDF-Verarbeitung, serverseitige Bereitstellung oder Barcode-Generierung benötigen, ist davon nichts von barKoder auf .NET verfügbar. Dieser Leitfaden zeigt, wie IronBarcode jedes dieser Anforderungen abdeckt, mit funktionierendem Code für jedes Szenario.
Warum vonbarKoder SDKmigrieren
Teams, die von einer barKoder-Evaluierung zu IronBarcode wechseln, berichten durchweg die gleichen Auslöser:
Nur mobile Kameraoberfläche: Barkoders .NET-Fußabdruck ist Plugin.Maui.Barkoder (v1.6.8, März 2026) und Barkoder.Xamarin (v1.3.0). Beide umschließen die nativen iOS / Android SDKs und bieten eine BarkoderView Kamera-Steuerung. Es gibt keine allgemeine Barkoder.NET Bibliothek, kein ASP.NET Core-Ziel, kein Konsolen- / Worker- / Desktop-Ziel und kein Linux-Server-Ziel.
Nur-Lese-Architektur: Barkoder ist ein SDK, das nur zum Scannen geeignet ist. Wenn Ihre Anwendung Barcodes generieren muss – Versandetiketten drucken, QR-Codes für Verpackungen erstellen, Codes in Dokumente einbetten –, bietet Barkoder nichts. Teams, die mitten im Projekt eine Generierungsanforderung entdecken, benötigen eine Bibliothek, die beide Seiten des Workflows abdeckt.
Keine PDF-Verarbeitung: In .NET Enterprise kommen Barcodes häufig in PDF-Dokumenten vor – Rechnungen, Versandmanifeste, Krankenakten, Compliance-Dokumente. Barkoder hat keine Ahnung von diesem Arbeitsablauf. Es ist für die Live-Kameraeingabe auf einem Mobilgerät konzipiert und kann keine PDF-Dateien verarbeiten.
Keine serverseitige Bereitstellung: Barkoders Verarbeitungsmodell basiert auf dem Scannen von Mobilgeräten direkt auf dem Gerät. Es kann nicht in ASP.NET Core, Azure Functions, Docker-Containern oder AWS Lambda ausgeführt werden. Teams, die serverseitige Barcode-APIs, Dokumentenverarbeitungspipelines oder Cloud-Funktionen entwickeln, haben keine Möglichkeit, Barkoder einzusetzen.
Keine Datei- / Stream-Eingabe: Selbst innerhalb einer MAUI-App verwendet BarkoderView nur Live-Kameraframes. Es gibt keine Pfad-, Byte-Array- oder Stream Überlastung, daher erfordert die Verarbeitung eines hochgeladenen Bildes oder eines Galerie-Fotos eine andere Bibliothek.
Die Grundgrenze
Barkoders MAUI-Oberfläche ist kameragebunden. Ein .NET-Entwickler, der Plugin.Maui.Barkoder verwendet, schreibt Code, der so aussieht:
// dotnet add package Plugin.Maui.Barkoder
using Barkoder.Maui;
public partial class ScanPage : ContentPage, IBarkoderDelegate
{
public ScanPage()
{
InitializeComponent();
BarkoderView.SetFlashEnabled(false);
BarkoderView.StartScanning(this);
}
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}");
}
}
// dotnet add package Plugin.Maui.Barkoder
using Barkoder.Maui;
public partial class ScanPage : ContentPage, IBarkoderDelegate
{
public ScanPage()
{
InitializeComponent();
BarkoderView.SetFlashEnabled(false);
BarkoderView.StartScanning(this);
}
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}");
}
}
Imports Barkoder.Maui
Public Partial Class ScanPage
Inherits ContentPage
Implements IBarkoderDelegate
Public Sub New()
InitializeComponent()
BarkoderView.SetFlashEnabled(False)
BarkoderView.StartScanning(Me)
End Sub
Public Sub DidFinishScanning(result As BarcodeResult()) Implements IBarkoderDelegate.DidFinishScanning
For Each r In result
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}")
Next
End Sub
End Class
IronBarcode bietet eine Datei- / Stream- / PDF-API für dieselben Daten:
// dotnet add package BarCode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
var results = BarcodeReader.Read("scanned-label.png", options);
foreach (var result in results)
{
Console.WriteLine($"Format: {result.Format} | Value: {result.Value}");
}
// dotnet add package BarCode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
var results = BarcodeReader.Read("scanned-label.png", options);
foreach (var result in results)
{
Console.WriteLine($"Format: {result.Format} | Value: {result.Value}");
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.ExtremeDetail,
.ExpectMultipleBarcodes = False
}
Dim results = BarcodeReader.Read("scanned-label.png", options)
For Each result In results
Console.WriteLine($"Format: {result.Format} | Value: {result.Value}")
Next
IronBarcode vs barKoder SDK: Funktionsvergleich
| Feature | barKoder SDK | IronBarcode |
|---|---|---|
| .NET / C# API | Nur MAUI / Xamarin Kamera UI | Vollständige .NET-Oberfläche |
| NuGet-Paket | Plugin.Maui.Barkoder, Barkoder.Xamarin |
BarCode |
| Wiederherstellung beschädigter Barcodes | MatrixSight / Entschärfung | ReadingSpeed.ExtremeDetail + ML |
| Erkennung mehrerer Barcodes | Ja | ExpectMultipleBarcodes = true |
| DataMatrix / DPM | Ja (nur lesbar) | Ja – lesen und generieren |
| QR-Code | Ja (nur lesbar) | Ja – lesen und generieren |
| PDF417 | Ja | Ja |
| aztekisch | Ja | Ja |
| Code128, Code39, EAN | Ja | Ja – mehr als 50 Formate |
| Barcode-Generierung | None | Vollständig – alle Formate |
| PDF-Verarbeitung | None | Native |
| Datei / Stream / byte[] Eingabe | Keine — nur Kamera-Frames | Ja |
| ASP.NET Core | None | Voll |
| Docker / Linux | None | Voll |
| Azure Functions | None | Voll |
| AWS Lambda | None | Voll |
| Offline / Luftgekühlt | Auf dem Gerät | Vollständig lokal |
| Async / Await | Rückrufbasiert | Voll |
| Abhängigkeitsinjektion | None | Vollständige .NET DI |
| iOS über MAUI | Plugin.Maui.Barkoder (Kamera-UI) |
Programmgesteuert (Datei / Stream) |
| Android über MAUI | Plugin.Maui.Barkoder (Kamera-UI) |
Programmgesteuert (Datei / Stream) |
| Preisgestaltung | Jahresabonnement | Ab 749 $ (dauerhaft) |
Schnellstart: Migration vonbarKoder SDKzu IronBarcode
Schritt 1: Ersetzen des NuGet-Pakets
IronBarcode installieren:
dotnet add package BarCode
Wenn Ihr Projekt Plugin.Maui.Barkoder oder Barkoder.Xamarin nur für nicht-kamera Workflows verwendet (oder Sie vollständig zu Datei- / PDF-Verarbeitung wechseln), entfernen Sie es:
dotnet remove package Plugin.Maui.Barkoder
dotnet remove package Plugin.Maui.Barkoder
Falls die App weiterhin eine Live-Kamera-UI benötigt, behalten Sie Plugin.Maui.Barkoder und fügen Sie IronBarcode für die Datei- / PDF- / Generierungsarbeit hinzu.
Schritt 2: Namespaces aktualisieren
Entfernen Sie den barKoder Namespace, wo er nicht mehr benötigt wird, und fügen Sie den IronBarcode Namespace hinzu:
// Remove (if no longer needed)
// using Barkoder.Maui;
// Add
using IronBarCode;
// Remove (if no longer needed)
// using Barkoder.Maui;
// Add
using IronBarCode;
Imports IronBarCode
Schritt 3: Lizenz initialisieren
Fügen Sie die Lizenzinitialisierung beim Anwendungsstart hinzu — in Program.cs für ASP.NET Core oder vor jedem Barcode-Vorgang in Konsolen- oder Desktop-Apps:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Beispiele für die Code-Migration
Barcodes aus Bildern lesen
Das Kernleseszenario wird von barKoders Live-Kamera-Frames zu IronBarcodes Datei- / Stream- / byte[] API abgebildet.
barKoder MAUI-Ansatz:
// dotnet add package Plugin.Maui.Barkoder
using Barkoder.Maui;
public partial class ScanPage : ContentPage, IBarkoderDelegate
{
public ScanPage()
{
InitializeComponent();
BarkoderView.StartScanning(this);
}
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
{
Console.WriteLine($"Barcode: {r.TextualData}");
Console.WriteLine($"Type: {r.BarcodeTypeName}");
}
}
}
// dotnet add package Plugin.Maui.Barkoder
using Barkoder.Maui;
public partial class ScanPage : ContentPage, IBarkoderDelegate
{
public ScanPage()
{
InitializeComponent();
BarkoderView.StartScanning(this);
}
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
{
Console.WriteLine($"Barcode: {r.TextualData}");
Console.WriteLine($"Type: {r.BarcodeTypeName}");
}
}
}
Imports Barkoder.Maui
Public Partial Class ScanPage
Inherits ContentPage
Implements IBarkoderDelegate
Public Sub New()
InitializeComponent()
BarkoderView.StartScanning(Me)
End Sub
Public Sub DidFinishScanning(result As BarcodeResult()) Implements IBarkoderDelegate.DidFinishScanning
For Each r In result
Console.WriteLine($"Barcode: {r.TextualData}")
Console.WriteLine($"Type: {r.BarcodeTypeName}")
Next
End Sub
End Class
IronBarcode -Ansatz:
// dotnet add package BarCode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var results = BarcodeReader.Read("scan.png");
foreach (var result in results)
{
Console.WriteLine($"Format: {result.Format}");
Console.WriteLine($"Value: {result.Value}");
}
// dotnet add package BarCode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var results = BarcodeReader.Read("scan.png");
foreach (var result in results)
{
Console.WriteLine($"Format: {result.Format}");
Console.WriteLine($"Value: {result.Value}");
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim results = BarcodeReader.Read("scan.png")
For Each result In results
Console.WriteLine($"Format: {result.Format}")
Console.WriteLine($"Value: {result.Value}")
Next
IronBarcodes BarcodeReader.Read() erkennt das Barcode-Format automatisch, ohne dass ein Format im Voraus spezifiziert werden muss. Der gleiche Aufruf funktioniert für Bilder, die mit einem Mobilgerät aufgenommen und auf einen Server hochgeladen wurden, für Bilder, die aus einem Dateisystem geladen wurden, oder für Bilder, die als Byte-Arrays aus einem Datenstrom empfangen wurden. Eine ausführliche Leseanleitung finden Sie im IronBarcode Leseleitfaden .
Wiederherstellung beschädigter Barcodes (entspricht dem Entschärfungsmodus)
Der DeBlur-Modus von Barkoder ist eine seiner am häufigsten genannten Funktionen. IronBarcode bietet das Äquivalent für Dateieingaben über ReadingSpeed.ExtremeDetail.
barKoder MAUI-Ansatz:
// Live camera scanning with DeBlur enabled via configuration
using Barkoder.Maui;
BarkoderView.SetEnabledBarcodeTypes(/* configure formats */);
BarkoderView.StartScanning(this);
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"Recovered: {r.TextualData}");
}
// Live camera scanning with DeBlur enabled via configuration
using Barkoder.Maui;
BarkoderView.SetEnabledBarcodeTypes(/* configure formats */);
BarkoderView.StartScanning(this);
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"Recovered: {r.TextualData}");
}
Imports Barkoder.Maui
' Live camera scanning with DeBlur enabled via configuration
BarkoderView.SetEnabledBarcodeTypes() ' configure formats
BarkoderView.StartScanning(Me)
Public Sub DidFinishScanning(result As BarcodeResult())
For Each r In result
Console.WriteLine($"Recovered: {r.TextualData}")
Next
End Sub
IronBarcode -Ansatz:
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
var results = BarcodeReader.Read("worn-shipping-label.png", options);
if (results.Any())
{
Console.WriteLine($"Recovered barcode: {results.First().Value}");
}
else
{
Console.WriteLine("Could not decode — image quality too low");
}
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
var results = BarcodeReader.Read("worn-shipping-label.png", options);
if (results.Any())
{
Console.WriteLine($"Recovered barcode: {results.First().Value}");
}
else
{
Console.WriteLine("Could not decode — image quality too low");
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.ExtremeDetail,
.ExpectMultipleBarcodes = False
}
Dim results = BarcodeReader.Read("worn-shipping-label.png", options)
If results.Any() Then
Console.WriteLine($"Recovered barcode: {results.First().Value}")
Else
Console.WriteLine("Could not decode — image quality too low")
End If
ReadingSpeed.ExtremeDetail führt eine mehrstufige ML-basierte Bildanalyse-Pipeline durch, die Kontrastverbesserung, Schärfung, Rotationskorrektur und Schadenswiederherstellung anwendet, bevor der Dekodierungsversuch unternommen wird. Für Batch-Workflows verwenden Sie ReadingSpeed.Balanced als Standard und greifen nur auf ExtremeDetail zurück für Bilder, die Balanced nicht dekodieren konnten.
Erkennung mehrerer Barcodes
Barkoders Multi-Barcode-Frame-Scanning korrespondiert mit IronBarcodes ExpectMultipleBarcodes Option, die sowohl mit Bildern als auch mit PDFs funktioniert.
barKoder MAUI-Ansatz:
// Live camera frame returns BarcodeResult[]; multi-scan configured on the view
using Barkoder.Maui;
BarkoderView.StartScanning(this);
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}");
}
// Live camera frame returns BarcodeResult[]; multi-scan configured on the view
using Barkoder.Maui;
BarkoderView.StartScanning(this);
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}");
}
Imports Barkoder.Maui
BarkoderView.StartScanning(Me)
Public Sub DidFinishScanning(result As BarcodeResult())
For Each r In result
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}")
Next
End Sub
IronBarcode -Ansatz:
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
};
// Works identically on images and PDFs
var results = BarcodeReader.Read("shipping-manifest.pdf", options);
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber} | {barcode.Format} | {barcode.Value}");
}
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
};
// Works identically on images and PDFs
var results = BarcodeReader.Read("shipping-manifest.pdf", options);
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber} | {barcode.Format} | {barcode.Value}");
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
' Works identically on images and PDFs
Dim results = BarcodeReader.Read("shipping-manifest.pdf", options)
For Each barcode In results
Console.WriteLine($"Page {barcode.PageNumber} | {barcode.Format} | {barcode.Value}")
Next
Dies ist ein einzelner Methodenaufruf. Keine Seitenextraktion, keine Mehrfachanfragen, kein Verarbeitungsaufwand pro Barcode. Das PDF wird nativ gelesen.
DataMatrix-Generierung und -Lesen
Barkoder liest DataMatrix, kann sie aber nicht generieren. IronBarcode deckt beide Seiten des Arbeitsablaufs ab, was eine gängige Anforderung bei industriellen Trackingsystemen ist.
barKoder MAUI-Ansatz:
// Camera-only DataMatrix scanning; no generation available
using Barkoder.Maui;
BarkoderView.StartScanning(this);
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"Part ID: {r.TextualData}");
}
// Camera-only DataMatrix scanning; no generation available
using Barkoder.Maui;
BarkoderView.StartScanning(this);
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"Part ID: {r.TextualData}");
}
Imports Barkoder.Maui
' Camera-only DataMatrix scanning; no generation available
BarkoderView.StartScanning(Me)
Public Sub DidFinishScanning(result As BarcodeResult())
For Each r In result
Console.WriteLine($"Part ID: {r.TextualData}")
Next
End Sub
IronBarcode -Ansatz:
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Generate a DataMatrix barcode for a part label
BarcodeWriter.CreateBarcode("PART-SN-20240315-A42291", BarcodeEncoding.DataMatrix)
.SaveAsPng("part-label.png");
// Read DataMatrix from a scanned industrial part image
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
var results = BarcodeReader.Read("etched-part-photo.png", options);
foreach (var result in results)
{
Console.WriteLine($"Part Serial: {result.Value}");
Console.WriteLine($"Barcode Type: {result.Format}");
}
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Generate a DataMatrix barcode for a part label
BarcodeWriter.CreateBarcode("PART-SN-20240315-A42291", BarcodeEncoding.DataMatrix)
.SaveAsPng("part-label.png");
// Read DataMatrix from a scanned industrial part image
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
var results = BarcodeReader.Read("etched-part-photo.png", options);
foreach (var result in results)
{
Console.WriteLine($"Part Serial: {result.Value}");
Console.WriteLine($"Barcode Type: {result.Format}");
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
' Generate a DataMatrix barcode for a part label
BarcodeWriter.CreateBarcode("PART-SN-20240315-A42291", BarcodeEncoding.DataMatrix) _
.SaveAsPng("part-label.png")
' Read DataMatrix from a scanned industrial part image
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.ExtremeDetail,
.ExpectMultipleBarcodes = False
}
Dim results = BarcodeReader.Read("etched-part-photo.png", options)
For Each result In results
Console.WriteLine($"Part Serial: {result.Value}")
Console.WriteLine($"Barcode Type: {result.Format}")
Next
Eine vollständige Liste der unterstützten Kodierungsformate und Generierungsoptionen finden Sie in der IronBarcode -Barcode-Generierungsdokumentation .
QR-Code-Generierung mit Branding
Barkoder generiert keine Barcodes. IronBarcode generiert QR-Codes mit eingebetteten Logos, was eine gängige Anforderung für Marketing-, Verpackungs- und Produktidentifizierungsprozesse ist.
barKoder MAUI-Ansatz:
Not available — Plugin.Maui.Barkoder is a reader-only SDK with no
generation API on any platform.
IronBarcode -Ansatz:
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// QR code with brand logo embedded at centre
QRCodeWriter.CreateQrCode("https://parts.example.com/product/A42", 500)
.AddBrandLogo("company-logo.png")
.SaveAsPng("branded-qr.png");
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// QR code with brand logo embedded at centre
QRCodeWriter.CreateQrCode("https://parts.example.com/product/A42", 500)
.AddBrandLogo("company-logo.png")
.SaveAsPng("branded-qr.png");
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
' QR code with brand logo embedded at centre
QRCodeWriter.CreateQrCode("https://parts.example.com/product/A42", 500) _
.AddBrandLogo("company-logo.png") _
.SaveAsPng("branded-qr.png")
ASP.NET Core Barcode-API-Endpunkt
Barkoder verfügt über kein serverseitiges Bereitstellungsmodell. Das Äquivalent eines mobilen Scan-Upload-Endpunkts – der ein Bild von einem beliebigen Client empfängt und Barcode-Daten zurückgibt – erfordert eine .NET Bibliothek.
barKoder-Ansatz:
Not available — Plugin.Maui.Barkoder runs only inside a MAUI app head
against a live camera. There is no ASP.NET Core integration and no
server-side execution model.
IronBarcode -Ansatz:
// In Program.cs
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
app.MapPost("/api/scan", async (IFormFile file) =>
{
using var stream = file.OpenReadStream();
var imageBytes = new byte[stream.Length];
await stream.ReadAsync(imageBytes);
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
};
var results = BarcodeReader.Read(imageBytes, options);
return Results.Ok(results.Select(r => new
{
Value = r.Value,
Format = r.Format.ToString(),
}));
});
// In Program.cs
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
app.MapPost("/api/scan", async (IFormFile file) =>
{
using var stream = file.OpenReadStream();
var imageBytes = new byte[stream.Length];
await stream.ReadAsync(imageBytes);
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
};
var results = BarcodeReader.Read(imageBytes, options);
return Results.Ok(results.Select(r => new
{
Value = r.Value,
Format = r.Format.ToString(),
}));
});
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
app.MapPost("/api/scan", Async Function(file As IFormFile) As Task(Of IResult)
Using stream = file.OpenReadStream()
Dim imageBytes(CInt(stream.Length) - 1) As Byte
Await stream.ReadAsync(imageBytes, 0, imageBytes.Length)
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
Dim results = BarcodeReader.Read(imageBytes, options)
Return Results.Ok(results.Select(Function(r) New With {
.Value = r.Value,
.Format = r.Format.ToString()
}))
End Using
End Function)
barKoder SDKAPI zu IronBarcode Zuordnungsreferenz
Diese Tabelle ordnet die barKoder MAUI / Xamarin-Oberfläche dem entsprechenden IronBarcode-Aufruf zu:
| barKoder API | IronBarcode Äquivalent |
|---|---|
| Lizenz über das barKoder Portal / Konfig festgelegt | IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY" |
DeBlur-Konfiguration auf BarkoderView |
Speed = ReadingSpeed.ExtremeDetail |
Multi-Scan-Konfiguration auf BarkoderView |
ExpectMultipleBarcodes = true |
SetEnabledBarcodeTypes(...) |
BarcodeEncoding.<Format> (automatisch erkannt beim Lesen) |
BarkoderView.StartScanning(IBarkoderDelegate) |
BarcodeReader.Read("image.png") — synchron |
BarcodeResult.TextualData |
result.Value |
BarcodeResult.BarcodeTypeName |
result.Format |
| MatrixSight-Schadenswiederherstellung | ReadingSpeed.ExtremeDetail mit ML-Vorverarbeitung |
| Eingabe von Live-Kamera-Frames | Dateipfad / Stream / byte[] Eingabe |
| Verarbeitung auf dem Gerät | Vollständig lokal – keine Netzwerkanrufe |
| Keine Unterstützung für Generationen | BarcodeWriter.CreateBarcode() / QRCodeWriter.CreateQrCode() |
| Keine PDF-Unterstützung | BarcodeReader.Read("document.pdf") — nativ |
| Keine Serverbereitstellung | Funktioniert in ASP.NET Core, Docker, Azure Functions und Lambda. |
| Keine Seitenindex (N/V) | result.PageNumber — verfügbar bei PDF-Lesen |
Gängige Migrationsprobleme und Lösungen
Problem 1: NuGet-Paketnamen
barKoder SDK: Die offiziellen .NET-Pakete sind Plugin.Maui.Barkoder und Barkoder.Xamarin. Keines deckt nicht-mobile Szenarien ab.
Lösung: Installieren Sie IronBarcode:
dotnet add package BarCode
Falls Plugin.Maui.Barkoder nicht mehr benötigt wird (Sie wechseln vollständig zu Datei- / PDF- / Serververarbeitung), entfernen Sie es:
dotnet remove package Plugin.Maui.Barkoder
dotnet add package BarCode
dotnet remove package Plugin.Maui.Barkoder
dotnet add package BarCode
Problem 2: Kamera-Frame-Eingabe vs. Dateieingabe
barKoder SDK: Alle Eingaben erfolgen als Live-Kamera-Frame — ein kontinuierlicher Video-Feed wird auf dem Gerät verarbeitet. Es gibt keinen Dateipfadeingabemodus.
Lösung: IronBarcode akzeptiert Dateien, Datenströme, Byte-Arrays und System.Drawing.Image-Objekte. Bei Bildern, die von einem mobilen Client hochgeladen wurden, lesen Sie den Anfragestrom direkt:
using var stream = file.OpenReadStream();
var imageBytes = new byte[stream.Length];
await stream.ReadAsync(imageBytes);
var results = BarcodeReader.Read(imageBytes, options);
using var stream = file.OpenReadStream();
var imageBytes = new byte[stream.Length];
await stream.ReadAsync(imageBytes);
var results = BarcodeReader.Read(imageBytes, options);
Imports System.IO
Using stream = file.OpenReadStream()
Dim imageBytes = New Byte(stream.Length - 1) {}
Await stream.ReadAsync(imageBytes, 0, imageBytes.Length)
Dim results = BarcodeReader.Read(imageBytes, options)
End Using
Problem 3: Callback-basierte API vs. synchrones Ergebnis
barKoder SDK: BarkoderView.StartScanning(IBarkoderDelegate) verwendet ein Delegat- / Callback-Muster — DidFinishScanning(BarcodeResult[]) löst asynchron aus, wenn Barcodes im Kamerafeed erkannt werden.
Lösung: IronBarcode's BarcodeReader.Read() ist synchron und gibt ein IEnumerable<BarcodeResult> direkt zurück. In ASP.NET Core-Kontexten, in denen Asynchronität erforderlich ist, wickeln Sie es in Task.Run() ein:
var results = await Task.Run(() => BarcodeReader.Read(imageBytes, options));
var results = await Task.Run(() => BarcodeReader.Read(imageBytes, options));
Dim results = Await Task.Run(Function() BarcodeReader.Read(imageBytes, options))
Ausgabe 4: Konfiguration des Entschärfungsmodus
barKoder SDK: DeBlur ist in der BarkoderView Konfiguration aktiviert, bevor das Scannen beginnt, und gilt für alle nachfolgenden Scans.
Lösung: In IronBarcode ist das Äquivalent ReadingSpeed.ExtremeDetail pro Lesung über BarcodeReaderOptions gesetzt. Erstellen Sie das Optionsobjekt einmal und verwenden Sie es wieder:
var deepOptions = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
// Reuse across multiple reads
var results = BarcodeReader.Read("image.png", deepOptions);
var deepOptions = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
// Reuse across multiple reads
var results = BarcodeReader.Read("image.png", deepOptions);
Imports System
Dim deepOptions As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.ExtremeDetail,
.ExpectMultipleBarcodes = False
}
' Reuse across multiple reads
Dim results = BarcodeReader.Read("image.png", deepOptions)
Problem 5: Fehlende Erzeugungskapazität
barKoder SDK: Barkoder ist schreibgeschützt. Es gibt keine API zur Generierung von Barcodes oder QR-Codes.
Lösung: IronBarcode deckt sowohl das Lesen als auch das Generieren ab. Verwenden Sie BarcodeWriter für Standardformate und QRCodeWriter für QR-Codes:
// Standard barcode generation
BarcodeWriter.CreateBarcode("SHIP-20240315-00428", BarcodeEncoding.Code128)
.SaveAsPng("shipping-label.png");
// QR code generation
QRCodeWriter.CreateQrCode("https://example.com/product/A42", 500)
.SaveAsPng("product-qr.png");
// Get as bytes for embedding in API response or PDF
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("INV-100291", BarcodeEncoding.Code128)
.ToPngBinaryData();
// Standard barcode generation
BarcodeWriter.CreateBarcode("SHIP-20240315-00428", BarcodeEncoding.Code128)
.SaveAsPng("shipping-label.png");
// QR code generation
QRCodeWriter.CreateQrCode("https://example.com/product/A42", 500)
.SaveAsPng("product-qr.png");
// Get as bytes for embedding in API response or PDF
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("INV-100291", BarcodeEncoding.Code128)
.ToPngBinaryData();
Imports System
' Standard barcode generation
BarcodeWriter.CreateBarcode("SHIP-20240315-00428", BarcodeEncoding.Code128) _
.SaveAsPng("shipping-label.png")
' QR code generation
QRCodeWriter.CreateQrCode("https://example.com/product/A42", 500) _
.SaveAsPng("product-qr.png")
' Get as bytes for embedding in API response or PDF
Dim barcodeBytes As Byte() = BarcodeWriter.CreateBarcode("INV-100291", BarcodeEncoding.Code128) _
.ToPngBinaryData()
barKoder SDKMigration Checklist
Vor der Migration anfallende Aufgaben
Überprüfen Sie Ihren Code für barKoder-Referenzen:
grep -r "Barkoder\|BarkoderView\|IBarkoderDelegate\|BarcodeResult" --include="*.cs" .
grep -r "Plugin.Maui.Barkoder\|Barkoder.Xamarin" --include="*.csproj" .
grep -r "Barkoder" --include="*.xaml" .
grep -r "Barkoder\|BarkoderView\|IBarkoderDelegate\|BarcodeResult" --include="*.cs" .
grep -r "Plugin.Maui.Barkoder\|Barkoder.Xamarin" --include="*.csproj" .
grep -r "Barkoder" --include="*.xaml" .
Dokumentieren Sie die aktuell implementierten oder geplanten Barcode-Szenarien:
- Welche Barcode-Formate müssen gelesen werden (Code128, DataMatrix, QR, PDF417 usw.)?
- Ob beschädigte Barcode-Wiederherstellung erforderlich ist (
ReadingSpeed.ExtremeDetail) - Ob Multi-Barcode-Erkennung erforderlich ist (
ExpectMultipleBarcodes = true) - Ob Barcode-Erstellung erforderlich ist (
BarcodeWriter,QRCodeWriter) - Ob PDF-Verarbeitung erforderlich ist (
BarcodeReader.Read("doc.pdf")) - Bereitstellungsziele (ASP.NET Core, Azure Functions, Docker, Lambda, Desktop, MAUI)
Aufgaben der Code-Aktualisierung
- Entfernen Sie
Plugin.Maui.BarkoderoderBarkoder.Xamarinaus.csproj, wo es nicht mehr benötigt wird - Installieren Sie das
BarCodeNuGet-Paket - Entfernen Sie
using Barkoder.Maui;(oder das entsprechende Xamarin), wo es nicht mehr benötigt wird - Fügen Sie
using IronBarCode;zu allen Barcode-Verarbeitungsdateien hinzu - Fügen Sie
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";beim Anwendungsstart hinzu - Ersetzen Sie
BarkoderView.StartScanning/DidFinishScanningRückrufe mitBarcodeReader.Read(filePath, options) - Zuordnung von
BarcodeResult.TextualDatazuresult.Value - Zuordnung von
BarcodeResult.BarcodeTypeNamezuresult.Format - Zuordnung der DeBlur-Konfiguration zu
Speed = ReadingSpeed.ExtremeDetailinBarcodeReaderOptions - Zuordnung der Multi-Scan-Konfiguration zu
ExpectMultipleBarcodes = trueinBarcodeReaderOptions - Fügen Sie
BarcodeWriter.CreateBarcode()Aufrufe für alle Erstellungserfordernisse hinzu - Fügen Sie
QRCodeWriter.CreateQrCode()Aufrufe für QR-Code-Erstellungserfordernisse hinzu - Ersetzen Sie jeglichen PDF-Vorverarbeitungscode mit
BarcodeReader.Read("document.pdf") - Wickeln Sie synchronisierte
BarcodeReader.Read()Aufrufe inTask.Run()für asynchrone ASP.NET Core-Endpunkte ein
Post-Migrationstests
Nach Abschluss der Code-Aktualisierungen überprüfen Sie bitte Folgendes:
- Bestätigen Sie, dass
BarcodeReader.Read()Ergebnisse für alle verwendeten Bildformate zurückgibt (PNG, JPEG, TIFF, BMP) - Verifizieren Sie, dass
ReadingSpeed.ExtremeDetailBarcodes von den qualitativ schwächsten Proben in Ihrem Testset wiederherstellt - Bestätigen Sie, dass
ExpectMultipleBarcodes = truedie richtige Anzahl von Barcodes aus Multi-Barcode-Dokumenten zurückgibt - PDF-Lesetest für alle in den Produktionsdokumenten-Workflows verwendeten PDF-Versionen
- Verifizieren Sie, dass
BarcodeWriter.CreateBarcode()Ausgabe durch Ihre Ziel-Scanner scannbar ist - Verifizieren Sie, dass
QRCodeWriter.CreateQrCode()Ausgabe durch mobile QR-Leser scannbar ist - Testen Sie den ASP.NET Core Endpunkt (falls zutreffend) mit Datei-Uploads von mobilen Clients.
- Korrekte Funktion in Docker-, Azure- oder Lambda-Bereitstellungszielen bestätigen
- Führen Sie gegebenenfalls End-to-End-Tests durch, die den gesamten Lese-, Verarbeitungs- und Generierungszyklus abdecken.
Wichtigste Vorteile der Migration zu IronBarcode
Eine Plattform, die Nicht-Kamera .NET umfasst: IronBarcode wird von NuGet installiert und läuft in jedem .NET-Projekt — ASP.NET Core, Azure Functions, Lambda, Docker, Konsole, Worker, WPF, WinForms, Avalonia, Blazor und MAUI gleichermaßen. Barkoder's Plugin.Maui.Barkoder deckt nur die Kamera-UI innerhalb eines MAUI-Mobile-App-Headers ab; IronBarcode deckt alles andere ab.
Schadenstolerantes Lesen ohne Kamera: Die Fähigkeiten, die Barkoder überzeugend machten — DeBlur, MatrixSight, Schadenswiederherstellung — sind in IronBarcode durch ReadingSpeed.ExtremeDetail und ML-basierte Bildvorverarbeitung vorhanden. Die gleichen Genauigkeitsverbesserungen, die Barkoder bei Live-Kameraeingaben erzielt, erzielt IronBarcode bei Dateien, gescannten Dokumenten und hochgeladenen Bildern.
Vollständiger Lese- und Generierungs-Workflow: Barkoder ist schreibgeschützt. IronBarcode deckt sowohl das Lesen als auch das Generieren von Barcodes in über 50 Formaten mit einem einzigen Paket ab. Teams, die Versandetiketten generieren, QR-Codes für Verpackungen erstellen oder Barcodes in Dokumente einbetten müssen, benötigen keine zweite Bibliothek.
Native PDF-Unterstützung: Das Lesen von Barcodes aus PDF-Dokumenten – Rechnungen, Frachtpapieren, Krankenakten, Konformitätsdokumenten – ist eine erstklassige Funktion von IronBarcode . Keine Zwischenspeicherung bei der Bildextraktion, keine API-Aufrufe pro Seite und keine zusätzlichen Abhängigkeiten. Ein mehrseitiges PDF wird in einem einzigen BarcodeReader.Read() Aufruf verarbeitet.
Vollständige serverseitige Bereitstellung: IronBarcode läuft in ASP.NET Core, Azure Functions, AWS Lambda, Docker-Containern und jeder anderen .NET Hostingumgebung. Es verarbeitet Barcodes lokal ohne Netzwerkaufrufe, ohne API-Schlüsselverwaltung und ohne Verzögerungen durch einen externen Dienst. Die Verarbeitung eines oder einer Million Barcodes kostet gleich viel – es fallen keine Gebühren pro Anfrage an.
Vorhersehbare, dauerhafte Preisgestaltung: IronBarcode ist als einmalige, unbefristete Lizenz ab 749 US-Dollar für einen einzelnen Entwickler erhältlich, ohne Gebühren pro Anfrage, ohne Volumenbeschränkungen und ohne Abonnementverlängerungen. Für Teams, die Produktionsanwendungen entwickeln, welche Barcodes in großem Umfang verarbeiten, ist das Kostenmodell einfach und vorhersehbar.
Häufig gestellte Fragen
Warum sollte ich von Barkoder SDK auf IronBarcode umsteigen?
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 Barkoder 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 Barkoder SDK 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.
Müssen sowohl Barkoder SDK als auch IronBarcode während der Migration installiert bleiben?
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 zum Barkoder SDK?
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 alle Barcode-Formate automatisch nach der Migration von Barkoder?
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 Barkoder SDK 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.

