Zum Fußzeileninhalt springen
VIDEOS

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
SHELL

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
$vbLabelText   $csharpLabel

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"
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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
SHELL

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
$vbLabelText   $csharpLabel

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))
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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()
$vbLabelText   $csharpLabel

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" .
SHELL

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

  1. Entfernen Sie Plugin.Maui.Barkoder oder Barkoder.Xamarin aus .csproj, wo es nicht mehr benötigt wird
  2. Installieren Sie das BarCode NuGet-Paket
  3. Entfernen Sie using Barkoder.Maui; (oder das entsprechende Xamarin), wo es nicht mehr benötigt wird
  4. Fügen Sie using IronBarCode; zu allen Barcode-Verarbeitungsdateien hinzu
  5. Fügen Sie IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; beim Anwendungsstart hinzu
  6. Ersetzen Sie BarkoderView.StartScanning / DidFinishScanning Rückrufe mit BarcodeReader.Read(filePath, options)
  7. Zuordnung von BarcodeResult.TextualData zu result.Value
  8. Zuordnung von BarcodeResult.BarcodeTypeName zu result.Format
  9. Zuordnung der DeBlur-Konfiguration zu Speed = ReadingSpeed.ExtremeDetail in BarcodeReaderOptions
  10. Zuordnung der Multi-Scan-Konfiguration zu ExpectMultipleBarcodes = true in BarcodeReaderOptions
  11. Fügen Sie BarcodeWriter.CreateBarcode() Aufrufe für alle Erstellungserfordernisse hinzu
  12. Fügen Sie QRCodeWriter.CreateQrCode() Aufrufe für QR-Code-Erstellungserfordernisse hinzu
  13. Ersetzen Sie jeglichen PDF-Vorverarbeitungscode mit BarcodeReader.Read("document.pdf")
  14. Wickeln Sie synchronisierte BarcodeReader.Read() Aufrufe in Task.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.ExtremeDetail Barcodes von den qualitativ schwächsten Proben in Ihrem Testset wiederherstellt
  • Bestätigen Sie, dass ExpectMultipleBarcodes = true die 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.

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