BarcodeScanning.MAUI gegenüber IronBarcode: C# Barcode Bibliothek Vergleich
BarcodeScanning.Native.Maui ist ein Kamera-Plugin, keine Barcode-Bibliothek. Wenn Ihre App unter Windows läuft, hochgeladene Dateien verarbeitet oder Barcodes aus PDFs liest, ist sie das falsche Werkzeug – und die README-Datei macht das nicht von vornherein deutlich. Auf der Paketseite wird es als "Barcode-Scanning-Bibliothek für .NET MAUI" beschrieben, was technisch korrekt ist, aber die entscheidende Einschränkung auslässt: Es handelt sich um ein CameraView Steuerelement, das ein Ereignis auslöst, wenn ein Barcode in den Live-Kamerarahmen gelangt. Das ist der vollständige Funktionsumfang. Dieser Vergleich untersucht die architektonischen Unterschiede zwischen einer Kamerasteuerungsbibliothek und einem voll ausgestatteten Barcode-SDK und hilft Teams dabei zu verstehen, wo die jeweiligen Stärken und Schwächen liegen.
Barcode-Scanning verstehen.MAUI
BarcodeScanning.Native.Maui kapselt die nativen Kamera-Barcode-Erkennungs-APIs von iOS (Apples Vision-Framework) und Android (ML Kit) in ein MAUI CameraView Steuerelement. Ein Entwickler fügt das Steuerelement in eine XAML-Seite ein, verknüpft einen Ereignishandler, und die Bibliothek löst dieses Ereignis jedes Mal aus, wenn ein Barcode im Live-Kamerabild erkannt wird. Das gesamte Interaktionsmodell ist Kamera rein, Ereignis raus – es gibt keinen anderen Weg.
Die Bibliothek ist Open Source und unter der MIT-Lizenz kostenlos. Das Designziel ist eng gefasst und eindeutig: Bereitstellung einer Live-Kamera-Barcode-Erkennung für iOS- und Android-MAUI-Anwendungen mit einer möglichst kleinen API-Oberfläche. Dieses Ziel wird durch die Delegierung an native Plattform-APIs erreicht, anstatt eine eigene Barcode-Decodierungs-Engine zu implementieren.
Wichtigste architektonische Merkmale von BarcodeScanning.Native.Maui:
- Nur Kameraeingabe: Die Bibliothek akzeptiert nur Live-Kamerabilder. Es gibt keine Methode
ReadFromFile(), keineReadFromBytes(), keineReadFromStream()und keineReadFromPdf()in der öffentlichen API. - Nur für iOS und Android: Die Bibliothek kapselt native APIs für iOS (Vision-Framework) und Android (ML Kit). Für Windows ist in MAUI keine Implementierung vorhanden und auch keine geplant.
- Keine Generierungsfunktion: BarcodeScanning.Native.Maui liest Barcodes aus Kamerabildern. Es kann keine Barcodes in irgendeinem Format generieren.
- iOS UPC-A Ungenauigkeit: Apples Vision-Framework gibt 13 Ziffern für UPC-A-Barcodes zurück (indem eine führende Null hinzugefügt wird, um der EAN-13-Codierung zu entsprechen). Die Bibliothek gibt diesen Rohwert unkorrigiert weiter, sodass im Anwendungscode eine manuelle Korrektur erforderlich ist.
- Bekanntes Zuverlässigkeitsproblem bei PDF417: Im GitHub -Issue-Tracker der Bibliothek wird das Scannen mit PDF417 als "sehr problematisch – die meisten Scans finden gar nicht statt" dokumentiert, was ein direktes Hindernis für Versandetiketten, Führerscheine und Bordkarten darstellt.
- Minimale öffentliche Oberfläche: Die öffentliche API besteht aus
CameraView,OnDetectionFinished,OnDetectionFinishedEventArgsundBarcodeResultmitDisplayValueundBarcodeFormat. Das ist die Gesamtheit dessen, womit der Anwendungscode interagiert. - MIT-Lizenz, kostenlos: Die Bibliothek kann kostenlos und ohne Lizenzgebühren genutzt werden.
Live-Kamera-Scanmuster
Das gesamte API-Muster BarcodeScanning.Native.Maui ist ein XAML-Steuerelement in Kombination mit einem C#-Ereignishandler:
<scanner:CameraView x:Name="CameraView"
OnDetectionFinished="OnBarcodeDetected"
CameraEnabled="True"
BarcodeFormats="All" />
<scanner:CameraView x:Name="CameraView"
OnDetectionFinished="OnBarcodeDetected"
CameraEnabled="True"
BarcodeFormats="All" />
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArgs e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode != null)
ResultLabel.Text = barcode.DisplayValue;
}
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArgs e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode != null)
ResultLabel.Text = barcode.DisplayValue;
}
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArgs)
Dim barcode = e.BarcodeResults.FirstOrDefault()
If barcode IsNot Nothing Then
ResultLabel.Text = barcode.DisplayValue
End If
End Sub
Dieses Steuerelement bietet Benutzern einen in die MAUI-Seite integrierten Echtzeit-Sucher. Die Barcode-Erkennung wird kontinuierlich ausgelöst, solange das Kamerabild aktiv ist. Die Benutzerfreundlichkeit ist für Verbraucher-Apps, bei denen das Scannen per Mauszeiger die primäre Interaktionsform ist, wirklich gut. Die Einschränkung besteht darin, dass die Bibliothek nur diese eine Interaktion unterstützt – sobald die Anforderungen über die Live-Kameraerkennung auf iOS oder Android hinausgehen, hat BarcodeScanning.Native.Maui nichts zu bieten.
IronBarcode verstehen
IronBarcode ist eine kommerzielle Barcode-Lese- und Generierungsbibliothek für .NET , die mit Dateneingaben anstatt mit Kamerastreams arbeitet. Es liest Barcodes aus Bilddateien, Byte-Arrays, Datenströmen und PDF-Dokumenten. Auf MAUI integriert es sich über MediaPicker in die Systemkamera – dieselbe Standard-MAUI-API, die Anwendungen zur Fotoauswahl verwenden –, nimmt ein Foto auf und verarbeitet das resultierende Bild anschließend als statische Eingabe.
IronBarcode verwendet eine eigene Barcode-Dekodierungs-Engine, anstatt auf plattformspezifische native APIs zurückzugreifen. Dadurch verhält sich derselbe BarcodeReader.Read()-Aufruf unter iOS, Android, Windows, macOS, ASP.NET und Hintergrundserverprozessen konsistent. Die Bibliothek bietet außerdem eine vollständige Barcode-Generierungs-API über BarcodeWriter und QRCodeWriter.
Hauptmerkmale von IronBarcode:
- Statische dateibasierte API:
BarcodeReader.Read()akzeptiert einen Dateipfad, ein Byte-Array, einen Datenstrom oder ein PDF – jede statische Datenquelle. - Vollständige Plattformabdeckung: iOS, Android, Windows und macOS MAUI-Ziele werden alle unterstützt. Derselbe Code läuft auf allen vier Systemen ohne plattformspezifische Verzweigungen.
- Barcode-Generierung:
BarcodeWriter.CreateBarcode()undQRCodeWriter.CreateQrCode()generieren Code128, QR, DataMatrix und andere Formate als Bilddateien oder Byte-Arrays. - PDF-Unterstützung: In PDF-Dokumente eingebettete Barcodes werden direkt gelesen, ohne dass ein Zwischenschritt der Bildextraktion erforderlich ist.
- Genaue UPC-A-Dekodierung: Gibt den korrekten 12-stelligen UPC-A-Wert zurück, ohne dass manuelle Normalisierungsmaßnahmen erforderlich sind.
- Kommerzielle Lizenzierung: Lite 749 $, Plus 1.499 $, Professional 2.999 $, Unlimited 5.999 $ — unbefristete Lizenzen mit einjährigem Support.
- Serverseitige Bereitstellung: Läuft in ASP.NET, Azure Functions, Docker-Containern und AWS Lambda ohne Plattformabhängigkeit von einer physischen Kamera.
Funktionsvergleich
Die folgende Tabelle verdeutlicht die grundlegenden Unterschiede zwischen BarcodeScanning.Native.Maui und IronBarcode:
| Feature | BarcodeScanning.MAUI | IronBarcode |
|---|---|---|
| Primärer Zweck | Barcode-Erkennung per Live-Kamera | Barcode-Lesen und -Generieren aus beliebigen Datenquellen |
| Eingangsquellen | Nur Live-Kamerabilder | Dateien, Byte-Arrays, Datenströme, PDFs |
| Windows, Linux, macOS, Docker, Azure, AWS. | Nur für iOS und Android MAUI | iOS, Android, Windows, macOS MAUI+ serverseitig |
| Barcode-Generierung | Nein | Ja – BarcodeWriter + QRCodeWriter |
| Lizenzmodell | MIT (kostenlos, Open Source) | Gewerblich – Lite 749 $ bis Unlimited 5.999 $ |
| Serverseitig / ASP.NET | Nein | Ja |
Detaillierter Funktionsvergleich
| Feature | BarcodeScanning.MAUI | IronBarcode |
|---|---|---|
| Lektüre | ||
| Live-Kamerabildlesung | Ja – CameraView-Steuerung | Nein (verwenden Sie MediaPicker zum Aufnehmen und lesen Sie es dann). |
| In-App-Kamerasucher | Ja – kontinuierliche Echtzeit | Nein – verwendet die Systemkamera-Benutzeroberfläche über MediaPicker. |
| Aus Bilddatei lesen | Nein | Ja — BarcodeReader.Read(path) |
| Aus Byte-Array lesen | Nein | Ja — BarcodeReader.Read(bytes) |
| Aus dem Stream lesen | Nein | Ja — BarcodeReader.Read(stream) |
| Aus PDF lesen | Nein | Ja — BarcodeReader.Read(pdf) |
| Mehrfach-Barcode-Erkennung | Ja (mehrere pro Frame über e.BarcodeResults) |
Ja (ExpectMultipleBarcodes Option) |
| Lesegeschwindigkeitssteuerung | Keine | ReadingSpeed.Balanced / Faster / Slower |
| UPC-A-Genauigkeit auf iOS | Gibt 13 Stellen zurück (Fehler), erfordert manuelle Normalisierung | Gibt den korrekten 12-stelligen UPC-A-Code zurück. |
| PDF417 Zuverlässigkeit | "Die meisten Scans finden nie statt" (GitHub Probleme) | Unterstützt |
| Generation | ||
| Barcode-Generierung | Nein | Ja — BarcodeWriter.CreateBarcode() |
| QR-Code-Generierung | Nein | Ja — QRCodeWriter.CreateQrCode() |
| Ausgabe als PNG / Byte-Array | Nein | Ja |
| Plattform | ||
| iOS MAUI | Ja | Ja |
| Android MAUI | Ja | Ja |
| Windows MAUI | Nein | Ja |
| macOS MAUI | Nicht dokumentiert | Ja |
| ASP.NET / serverseitig | Nein | Ja |
| Docker / Azure / AWS Lambda | Nein | Ja |
| .NET Framework -Unterstützung | Nein (nur MAUI) | Ja – .NET Framework 4.6.2+ |
| Lizenzierung | ||
| Lizenztyp | MIT (Open Source) | Kommerziell, unbefristet |
| Kosten | Kostenlos | Lite 749 $, Plus 1.499 $, Professional 2.999 $, Unlimited 5.999 $ |
| Auswertungsmodus | Nicht anwendbar | Kostenlose Testversion verfügbar |
Architektur: Kamerasteuerung vs. Dateiverarbeitungs-API
Der grundlegendste Unterschied zwischen diesen beiden Bibliotheken liegt im Eingabemodell. BarcodeScanning.Native.Maui ist auf einen kontinuierlichen Kamerastream ausgelegt; IronBarcode ist für die Verarbeitung diskreter Dateneingaben konzipiert. Hierbei handelt es sich nicht um konkurrierende Umsetzungen derselben Idee – es sind unterschiedliche Architekturentscheidungen für unterschiedliche Anwendungsfälle.
Barcode-Scanning.MAUI-Ansatz
BarcodeScanning.Native.Maui kapselt die native Kameraerkennungspipeline auf jeder Plattform. Auf Android verarbeitet ML Kit Frames. Auf iOS verarbeitet Apples Vision-Framework die Frames. Die Bibliothek stellt dies als MAUI CameraView Steuerelement mit einem OnDetectionFinished Ereignis dar. Der Anwendungscode verarbeitet niemals direkt Bildbytes – er verarbeitet ausschließlich die erkannten Barcodewerte, die sich aus dem Ereignis ergeben.
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArgs e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode != null)
ResultLabel.Text = barcode.DisplayValue;
}
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArgs e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode != null)
ResultLabel.Text = barcode.DisplayValue;
}
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArgs)
Dim barcode = e.BarcodeResults.FirstOrDefault()
If barcode IsNot Nothing Then
ResultLabel.Text = barcode.DisplayValue
End If
End Sub
Die Konsequenz dieser Konstruktion ist, dass es keinen anderen Zugangspunkt gibt. Die Kamera ist nicht optional – sie ist die einzige Eingabe, die die Bibliothek kennt. Ein Server, eine Datei, ein PDF, ein Windows-Rechner – keines dieser Elemente verfügt über eine Kamera in dem Sinne, wie sie diese Bibliothek erwartet.
IronBarcode Ansatz
IronBarcode empfängt Bilddaten über seine statische Methode BarcodeReader.Read(). Der Aufrufer liefert die Daten – aus beliebiger Quelle – und die Bibliothek dekodiert sie. Auf MAUI stammen die Daten von MediaPicker; Auf einem Server stammt es aus einem Formular-Upload; Bei einer Desktop-Anwendung stammt es aus einem Dateidialog.
// IronBarcode in MAUI: capture a photo, then read barcodes from it
// NuGet: dotnet add package IronBarcode
using IronBarCode;
private async void ScanBarcodeButton_Clicked(object sender, EventArgs e)
{
var photo = await MediaPicker.CapturePhotoAsync();
if (photo == null) return;
using var stream = await photo.OpenReadAsync();
using var ms = new MemoryStream();
await stream.CopyToAsync(ms);
var results = BarcodeReader.Read(ms.ToArray());
foreach (var result in results)
ResultLabel.Text = result.Value;
}
// IronBarcode in MAUI: capture a photo, then read barcodes from it
// NuGet: dotnet add package IronBarcode
using IronBarCode;
private async void ScanBarcodeButton_Clicked(object sender, EventArgs e)
{
var photo = await MediaPicker.CapturePhotoAsync();
if (photo == null) return;
using var stream = await photo.OpenReadAsync();
using var ms = new MemoryStream();
await stream.CopyToAsync(ms);
var results = BarcodeReader.Read(ms.ToArray());
foreach (var result in results)
ResultLabel.Text = result.Value;
}
Imports IronBarCode
Imports System.IO
Private Async Sub ScanBarcodeButton_Clicked(sender As Object, e As EventArgs)
Dim photo = Await MediaPicker.CapturePhotoAsync()
If photo Is Nothing Then Return
Using stream = Await photo.OpenReadAsync()
Using ms As New MemoryStream()
Await stream.CopyToAsync(ms)
Dim results = BarcodeReader.Read(ms.ToArray())
For Each result In results
ResultLabel.Text = result.Value
Next
End Using
End Using
End Sub
Dieser Code läuft identisch auf iOS, Android und Windows MAUI. Für die serverseitige Verwendung akzeptiert die gleiche BarcodeReader.Read()-Methode ein Byte-Array einer hochgeladenen Datei oder einen PDF-Pfad. Die IronBarcode Dokumentation umfasst alle unterstützten Eingabetypen.
Plattformabdeckung und Windows-Unterstützung
Die Plattformabdeckung ist der Punkt, an dem die strukturelle Einschränkung von BarcodeScanning.Native.Maui für Teams, die MAUI-Anwendungen entwickeln, konkret wird.
Barcode-Scanning.MAUI-Ansatz
BarcodeScanning.Native.Maui unterstützt das Windows-Ziel in MAUI nicht. Dies ist keine vorübergehende Lücke – es ist eine strukturelle Folge der Architektur der Bibliothek. Die Bibliothek kapselt native APIs für iOS (Vision-Framework) und Android (ML Kit). Windows bietet keine dieser APIs. Teams, die eine MAUI-Anwendung entwickeln, die auf iOS, Android und Windows abzielt – ein Standard-Multi-Target-Szenario – können BarcodeScanning.Native.Maui nicht als Barcode-Lösung für alle drei Zielplattformen verwenden. Sie müssen entweder plattformspezifischen Code für Windows separat implementieren oder die Bibliothek vollständig ersetzen.
IronBarcode Ansatz
Der BarcodeReader.Read()-Aufruf von IronBarcode funktioniert auf Windows-, iOS-, Android- und macOS-MAUI-Zielen ohne plattformspezifischen Code. Es gibt keine #if WINDOWS Blöcke, kein bedingtes Laden von Abhängigkeiten und es werden keine Stub-Implementierungen benötigt. Auch bei Datei- und PDF-Eingaben ist das Muster einheitlich:
using IronBarCode;
// Read barcodes from a file the user selected
var file = await FilePicker.PickAsync();
if (file != null)
{
var results = BarcodeReader.Read(file.FullPath);
foreach (var result in results)
Console.WriteLine($"{result.Format}: {result.Value}");
}
// Read barcodes directly from a PDF — no image extraction step needed
var pdfResults = BarcodeReader.Read("shipment-manifest.pdf");
using IronBarCode;
// Read barcodes from a file the user selected
var file = await FilePicker.PickAsync();
if (file != null)
{
var results = BarcodeReader.Read(file.FullPath);
foreach (var result in results)
Console.WriteLine($"{result.Format}: {result.Value}");
}
// Read barcodes directly from a PDF — no image extraction step needed
var pdfResults = BarcodeReader.Read("shipment-manifest.pdf");
Imports IronBarCode
' Read barcodes from a file the user selected
Dim file = Await FilePicker.PickAsync()
If file IsNot Nothing Then
Dim results = BarcodeReader.Read(file.FullPath)
For Each result In results
Console.WriteLine($"{result.Format}: {result.Value}")
Next
End If
' Read barcodes directly from a PDF — no image extraction step needed
Dim pdfResults = BarcodeReader.Read("shipment-manifest.pdf")
Der IronBarcode MAUI-Integrationsleitfaden enthält vollständige Einrichtungsanweisungen für alle MAUI-Ziele. IronBarcode unterstützt auch die serverseitige Bereitstellung in ASP.NET, Docker-, Azure Functions- und AWS Lambda-Umgebungen, in denen BarcodeScanning.Native.Maui überhaupt keinen Pfad hat.
Lesegenauigkeit von Barcodes: UPC-A und PDF417
Zwei spezifische Formatgenauigkeitsprobleme in BarcodeScanning.Native.Maui haben direkte Auswirkungen auf Produktionsanwendungen.
Barcode-Scanning.MAUI-Ansatz
Auf iOS liefert die zugrundeliegende Erkennung von BarcodeScanning.Native.Maui (Apple Vision) 13 Ziffern für UPC-A-Barcodes. UPC-A ist ein 12-stelliges Format; Die zusätzliche führende Null entspricht der EAN-13-Codierung. Die Bibliothek gibt diesen Rohwert unkorrigiert weiter. Anwendungen, die UPC-A-Werte in einer Datenbank speichern, können Datensätze mit einer führenden Null ansammeln, die dort nicht hingehört.
Die dokumentierte Umgehungslösung erfordert eine Überprüfung des Formats und das Kürzen des Wertes:
// Workaround required for iOS UPC-A — strip the leading zero manually
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArgs e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode == null) return;
var value = barcode.DisplayValue;
if (barcode.BarcodeFormat == BarcodeFormat.UPC_A && value.Length == 13)
value = value.Substring(1); // strip Apple's prepended leading zero
ProcessBarcode(value);
}
// Workaround required for iOS UPC-A — strip the leading zero manually
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArgs e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode == null) return;
var value = barcode.DisplayValue;
if (barcode.BarcodeFormat == BarcodeFormat.UPC_A && value.Length == 13)
value = value.Substring(1); // strip Apple's prepended leading zero
ProcessBarcode(value);
}
' Workaround required for iOS UPC-A — strip the leading zero manually
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArgs)
Dim barcode = e.BarcodeResults.FirstOrDefault()
If barcode Is Nothing Then Return
Dim value = barcode.DisplayValue
If barcode.BarcodeFormat = BarcodeFormat.UPC_A AndAlso value.Length = 13 Then
value = value.Substring(1) ' strip Apple's prepended leading zero
End If
ProcessBarcode(value)
End Sub
Dieser Workaround führt stillschweigend dazu, dass EAN-13-Barcodes, die mit 0 beginnen, nicht mehr funktionieren, wenn die Formatprüfung weggelassen wird. PDF417 wird separat in GitHub -Issues als "sehr problematisch – die meisten Scans finden nie statt" dokumentiert und betrifft Versandetiketten, Führerscheine und Bordkarten.
IronBarcode Ansatz
IronBarcode liefert ohne manuelle Normalisierung den korrekten 12-stelligen UPC-A-Wert. PDF417 ist ein unterstütztes Format, das zuverlässig gelesen werden kann. Die Generierungsseite ist ebenfalls über die API von IronBarcode verfügbar:
using IronBarCode;
// Generate a QR code
QRCodeWriter.CreateQrCode("https://example.com", 500)
.SaveAsPng("qr.png");
// Generate a Code128 barcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
using IronBarCode;
// Generate a QR code
QRCodeWriter.CreateQrCode("https://example.com", 500)
.SaveAsPng("qr.png");
// Generate a Code128 barcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
Imports IronBarCode
' Generate a QR code
QRCodeWriter.CreateQrCode("https://example.com", 500) _
.SaveAsPng("qr.png")
' Generate a Code128 barcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.SaveAsPng("barcode.png")
Bei Anwendungen, bei denen die Genauigkeit der Barcode-Daten direkten Einfluss auf Bestandsabfragen, Kassentransaktionen oder Lieferkettenintegrationen hat, beseitigt die korrekte Formatverarbeitung von IronBarcode eine Kategorie von Produktionsfehlern, die BarcodeScanning.Native.Maui im Anwendungscode hinterlässt. Die IronBarcode Dokumentation zum Barcode-Lesen beschreibt das formatspezifische Verhalten im Detail.
API-Mapping-Referenz
| BarcodeScanning.Native.Maui | IronBarcode |
|---|---|
CameraView XAML-Steuerung |
Keine Kamerasteuerung – verwenden Sie MediaPicker.CapturePhotoAsync() zur Aufnahme. |
OnDetectionFinished Ereignis |
BarcodeReader.Read(imageBytes) |
e.BarcodeResults |
Rückgabewert von BarcodeReader.Read() (IEnumerable) |
e.BarcodeResults.FirstOrDefault() |
results.FirstOrDefault() |
barcode.DisplayValue |
result.Value |
barcode.BarcodeFormat |
result.Format |
BarcodeFormats="All" |
Automatische Erkennung – keine Konfiguration für verschiedene Formate erforderlich |
CameraEnabled="True" |
MediaPicker.CapturePhotoAsync() Anruf |
| Nur iOS + Android | iOS, Android, Windows, macOS (MAUI) + ASP.NET, Desktop |
| Nur Kamerabilder | Dateien, Byte-Arrays, Datenströme, PDFs |
| Keine Datei-/PDF-API | BarcodeReader.Read(path) — akzeptiert Bilddateien und PDFs |
| Kein Windows MAUI | Vollständige Windows MAUI-Unterstützung |
| Keine Generierungs-API | BarcodeWriter.CreateBarcode() + QRCodeWriter.CreateQrCode() |
Wenn Teams einen Wechsel von BarcodeScanning.MAUI zu IronBarcode erwägen
Windows MAUI-Ziel zum Build hinzugefügt
MAUI-Anwendungen beginnen üblicherweise mit einer iOS- und Android-Zielplattform und fügen später Windows hinzu, wenn die Anwendung ausgereifter ist oder die Anforderungen an die Enterprise steigen. Sobald das Windows-Ziel hinzugefügt wird, wird BarcodeScanning.Native.Maui sofort zum Problem – es gibt keine Windows-Implementierung und auch keine Umgehungslösung innerhalb der Bibliothek. Teams in dieser Situation müssen entweder eine separate Barcode-Implementierung für Windows mit einer anderen Bibliothek pflegen oder die gesamte Barcode-Ebene auf eine Bibliothek migrieren, die auf allen MAUI-Zielen konsistent funktioniert. Der zweite Weg ist betrieblich einfacher und eliminiert den Wartungsaufwand für plattformspezifische Verzweigungen.
Anforderungen für Datei-Upload oder PDF-Verarbeitung hinzugefügt
Mobile Anwendungen beginnen oft mit Live-Kamera-Scannen als einziger Eingabemethode und erweitern sich später um die Möglichkeit, hochgeladene Bilder oder Dokumente zu akzeptieren. Wenn ein Benutzer einen Barcode von einem Foto in seiner Galerie, von einem per E-Mail erhaltenen Bild oder von einer PDF-Datei mit Versandmanifesten oder Bordkarten scannen muss, bietet BarcodeScanning.Native.Maui keinen entsprechenden Codepfad an. Teams, die diese Anforderungsgrenze erreichen, stehen vor der Wahl: Entweder sie fügen neben BarcodeScanning.Native.Maui eine zweite Barcode-Bibliothek für Datei- und PDF-Eingaben hinzu oder sie migrieren zu einer einzigen Bibliothek, die alle Eingabetypen verarbeitet. Die Verwaltung zweier Barcode-Pakete mit unterschiedlichen APIs, Ergebnistypen und Formatunterstützungstabellen führt langfristig zu einer höheren Komplexität, die eine Lösung mit nur einem Paket vermeidet.
Einführung der serverseitigen Barcode-Verarbeitung
Anwendungen, die Barcodes auf Mobilgeräten scannen, entwickeln häufig eine serverseitige Komponente – einen ASP.NET -API-Endpunkt, der Barcodes validiert, einen Hintergrundprozess, der PDFs verarbeitet, oder eine Cloud-Funktion, die Trackingnummern aus hochgeladenen Dokumenten extrahiert. BarcodeScanning.Native.Maui ist eine UI-Steuerelementbibliothek, die von einem Kamerahardwarekontext abhängt; Es kann nicht in einem Serverprozess ausgeführt werden. Ein Team, das dieselbe Barcode-Leselogik sowohl auf Mobilgeräten als auch auf Servern benötigt, muss für die Serverseite eine andere Bibliothek verwenden. Sobald diese Serveranforderung gestellt wird, prüfen Teams häufig, ob die Konsolidierung auf eine einzige Bibliothek, die sowohl Mobilgeräte als auch Server abdeckt, der Pflege zweier separater Implementierungen vorzuziehen ist.
Die Genauigkeit der UPC-A-Daten wird zum Produktionsproblem
Das 13-stellige Verhalten des iOS UPC-A wird während der Entwicklung nicht immer erkannt. UPC-A-Barcodes, die während der Entwicklung gescannt werden, scheinen möglicherweise korrekt zu funktionieren, aber die führende Null, die vom Vision-Framework von Apple eingeführt wird, erscheint in der Datenbank. Teams, die 13-stellige UPC-A-Werte in Bestandsdatensätzen, Kassensystemen oder Lieferkettenintegrationen entdecken, stehen neben einem Codeproblem auch vor einem Datenkorrekturproblem. Der in den GitHub -Issues von BarcodeScanning.Native.Maui dokumentierte Workaround korrigiert zwar neue Scans, aber nicht die historischen Daten. Wenn das Ausmaß des Datenqualitätsproblems deutlich wird, ist die Migration zu einer Bibliothek, die korrekte UPC-A-Werte ohne Normalisierung auf Anwendungsebene zurückgibt, oft die sauberere langfristige Lösung.
PDF417 Dokumentenscannen erforderlich
PDF417 ist das Barcode-Format, das in Nordamerika für Versandetiketten, Führerscheine und Bordkarten verwendet wird. Dies sind gängige Scanziele für Logistik-, Identitätsprüfungs- und Reiseanwendungen. Der GitHub -Issue-Tracker von BarcodeScanning.Native.Maui dokumentiert PDF417 als "sehr problematisch – die meisten Scans werden gar nicht erst durchgeführt". Für jede Anwendung, bei der die Zuverlässigkeit von PDF417 eine funktionale Voraussetzung und nicht nur ein nettes Extra ist, stellt dieses bekannte Problem ein direktes Hindernis dar und zwingt zur Evaluierung alternativer Bibliotheken.
Gemeinsame Überlegungen zur Migration
Kameraereignis an MediaPicker und statisches Lesen
Die zentrale strukturelle Veränderung bei der Migration besteht darin, das kontinuierliche Kameraereignismuster durch eine MediaPicker-Aufnahme gefolgt von BarcodeReader.Read() zu ersetzen. Der Ereignishandler OnDetectionFinished, das XAML-Steuerelement CameraView und die XML-Namensraumdeklaration scanner: wurden alle entfernt. Stattdessen wird über einen Knopf MediaPicker.CapturePhotoAsync() ausgelöst, und die resultierenden Fotobytes werden an BarcodeReader.Read() weitergeleitet. Dadurch ändert sich das Benutzererlebnis von einem kontinuierlichen Live-Sucher zu einem Systemkamerabildschirm – was für die meisten Geschäftsanwendungen geeignet ist.
Änderungen am Thread-Marshalling
BarcodeScanning.Native.Maui löst OnDetectionFinished in einem Hintergrundthread aus, daher müssen alle vorhandenen Handler, die UI-Elemente aktualisieren, ihre Aktualisierungen in MainThread.BeginInvokeOnMainThread() einbetten. Bei dem von IronBarcode verwendeten MediaPicker + async-Muster kehrt die Fortsetzung nach await im aufrufenden Kontext zurück, in der Regel im Hauptthread. In den meisten Fällen können die MainThread.BeginInvokeOnMainThread() Wrapper entfernt werden, wodurch der Ereignisbehandlungscode vereinfacht wird.
UPC-A-Umgehungslösung
Jede Codebasis, die das 13-stellige Verhalten von BarcodeScanning.Native.Maui für iOS UPC-A verarbeitet, enthält Code, der BarcodeFormat.UPC_A prüft und Substring(1) aufruft, um die führende Null zu entfernen. Dieser Code muss nach der Migration gelöscht werden – IronBarcode gibt den korrekten 12-stelligen Wert zurück, und das Beibehalten des Workarounds würde fälschlicherweise die erste Ziffer von gültigen UPC-A-Lesungen entfernen.
MAUI-Berechtigungen
BarcodeScanning.Native.Maui fügt im Rahmen der Paketkonfiguration automatisch Kameraberechtigungen zu den Manifestdateien für Android und iOS hinzu. Bei Verwendung von MediaPicker durch IronBarcode sind die standardmäßigen MAUI-Kameraberechtigungen in AndroidManifest.xml und Info.plist erforderlich – dieselben Berechtigungen, die jede MAUI-App für MediaPicker.CapturePhotoAsync() benötigt. Diese Berechtigungen sind in MAUI-Projekten, die die Kamera für irgendeinen Zweck verwenden, in der Regel bereits vorhanden.
Zusätzliche IronBarcode Funktionen
Über die in diesem Vergleich behandelten Funktionen hinaus bietet IronBarcode Features, die BarcodeScanning.Native.Maui in keiner Weise abdeckt:
- Barcode-Generierung : Generierung von Code128, QR, DataMatrix, PDF417 und anderen Formaten als PNG, SVG oder Byte-Array – verwendbar in der MAUI-Benutzeroberfläche, API-Antworten oder gedruckten Etiketten.
- QR-Code-Generierung : Erstellen Sie individuell gestaltete QR-Codes mit Logoeinbettung, Farbanpassung und Kontrolle des Fehlerkorrekturgrades.
- Multi-Barcode-Lesen : Die Option
ExpectMultipleBarcodesliest alle in einem Bild vorhandenen Barcodes in einem Durchgang. - PDF-Barcode-Extraktion : Direktes Lesen von in PDF-Dokumenten eingebetteten Barcodes – keine Zwischenkonvertierung der Bilder erforderlich.
- Serverseitige Bereitstellung : Die gleiche Barcode-Lese- und Generierungslogik kann in ASP.NET, Azure Functions, Docker und AWS Lambda ohne Kameraabhängigkeit bereitgestellt werden.
- Konfiguration der Lesegeschwindigkeit : Die Einstellungen
ReadingSpeed.Faster,BalancedundSlowerermöglichen die Abstimmung des Verhältnisses von Durchsatz zu Genauigkeit in Abhängigkeit von der Bildqualität. - macOS MAUI-Unterstützung : Vollständige macOS-Unterstützung für MAUI-Desktopanwendungen, einschließlich des vierten MAUI-Ziels, das BarcodeScanning.Native.Maui nicht dokumentiert.
.NET-Kompatibilität und Zukunftsfähigkeit
IronBarcode unterstützt .NET 6, .NET 7, .NET 8 und .NET 9 sowie .NET Framework 4.6.2 und höher. Dies bedeutet, dass es sowohl auf dem gesamten MAUI-Zielsystem als auch auf älteren Serverumgebungen läuft, die noch nicht auf das moderne .NET migriert wurden. IronBarcode erhält regelmäßige Updates und ist mit .NET 10 kompatibel, da dessen Verbreitung bis 2026 zunimmt. BarcodeScanning.Native.Maui ist eine reine MAUI-Bibliothek ohne .NET Framework Unterstützung und ohne serverseitigen Bereitstellungspfad. Für Teams, deren Codebasis sowohl MAUI als auch bestehende .NET Framework oder .NET Core -Serveranwendungen umfasst, bietet IronBarcode eine konsistente API für alle Umgebungen, ohne dass für jeden Laufzeitkontext ein separates Barcode-Paket erforderlich ist.
Abschluss
BarcodeScanning.Native.Maui und IronBarcode befassen sich mit unterschiedlichen Problemen. BarcodeScanning.Native.Maui ist eine Kamerasteuerungsbibliothek, die einen Echtzeit-Sucher mit automatischer Barcode-Erkennung auf iOS und Android bietet. IronBarcode ist eine Bibliothek zum Lesen und Generieren von Barcodes, die statische Bilddaten aus beliebigen Quellen auf allen .NET Plattformen verarbeitet. Der architektonische Unterschied – kontinuierlicher Kamerastream versus diskrete Dateneingabe – bestimmt, welche Bibliothek für einen gegebenen Anforderungssatz geeignet ist.
BarcodeScanning.Native.Maui ist die richtige Wahl, wenn es sich bei der Anwendung um eine mobile Verbraucher-App handelt, die ausschließlich auf iOS und Android abzielt, wenn eine Live-Kameravorschau in der App mit kontinuierlicher Frame-Erkennung das erforderliche UX-Muster ist und wenn die Anforderungen nicht auf Windows, Datei-Uploads, PDF-Verarbeitung oder serverseitige Barcode-Verarbeitung erweitert werden. Innerhalb dieses begrenzten Rahmens ist es kostenlos, minimal und funktional.
IronBarcode ist die richtige Wahl, wenn die Plattformabdeckung Windows MAUIumfassen muss, wenn die Barcode-Eingabe zusätzlich oder anstelle einer Live-Kamera aus Dateien, PDFs oder Byte-Arrays erfolgt, wenn die serverseitige Barcode-Verarbeitung Teil der Architektur ist oder wenn die Barcode-Generierung zusammen mit dem Lesen erforderlich ist. Es ist auch dann angebracht, wenn die Genauigkeit gemäß UPC-A oder die Zuverlässigkeit gemäß PDF417 Produktionsanforderungen und nicht nur akzeptable Einschränkungen darstellen. Die Kosten für die kommerzielle Lizenz sind der Preis für diese Funktionen.
Für Teams, deren Anforderungen aktuell dem begrenzten Funktionsumfang von BarcodeScanning.Native.Maui entsprechen, ist die Bibliothek eine sinnvolle und kostengünstige Wahl. Für Teams, deren Anforderungen über das Scannen mit Live-Kameras auf zwei Plattformen hinausgewachsen sind oder voraussichtlich wachsen werden, stellt die Diskrepanz zwischen dem Funktionsumfang und BarcodeScanning.Native.Maui kein Konfigurationsproblem, sondern ein architektonisches Problem dar. Die konsistente API von IronBarcode, die alle Eingabetypen, Plattformen und Bereitstellungsziele abdeckt, ist die praktische Lösung für diese Diskrepanz.
Häufig gestellte Fragen
Was ist BarcodeScanning.MAUI?
BarcodeScanning.MAUI ist eine .NET Barcode-Bibliothek zum Erzeugen und Lesen von Barcodes in C#-Anwendungen. Sie ist eine von mehreren Alternativen, die Entwickler bei der Auswahl einer Barcode-Lösung für .NET-Projekte in Betracht ziehen.
Was sind die Hauptunterschiede zwischen BarcodeScanning.MAUI und IronBarcode?
IronBarcode verwendet eine statische, zustandslose API, die keine Instanzverwaltung erfordert, während BarcodeScanning.MAUI in der Regel eine Instanzerstellung und -konfiguration vor der Verwendung erfordert. IronBarcode bietet außerdem native PDF-Unterstützung, automatische Formaterkennung und Single-Key-Lizenzierung in allen Umgebungen.
Ist IronBarcode einfacher zu lizenzieren als BarcodeScanning.MAUI?
IronBarcode verwendet einen einzigen Lizenzschlüssel, der sowohl die Entwicklungs- als auch die Produktionsbereitstellung abdeckt. Dies vereinfacht CI/CD-Pipelines und Docker-Konfigurationen im Vergleich zu Lizenzierungssystemen, die SDK-Schlüssel von Laufzeitschlüsseln trennen.
Unterstützt IronBarcode alle Barcode-Formate, die BarcodeScanning.MAUI unterstützt?
IronBarcode unterstützt über 30 Barcode-Symbologien, darunter QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 und viele mehr. Die automatische Formaterkennung bedeutet, dass keine explizite Formataufzählung erforderlich ist.
Unterstützt IronBarcode das native Lesen von PDF-Barcodes?
Ja, IronBarcode liest Barcodes direkt aus PDF-Dateien mit BarcodeReader.Read("document.pdf"), ohne dass eine separate PDF-Rendering-Bibliothek erforderlich ist. Die seitenweisen Ergebnisse umfassen Seitenzahl, Barcodeformat, Wert und Konfidenzwert.
Wie handhabt IronBarcode die Stapelverarbeitung im Vergleich zu BarcodeScanning.MAUI?
Die statischen Methoden von IronBarcode sind zustandslos und natürlich thread-sicher, was die direkte Verwendung von Parallel.ForEach ohne Instanzverwaltung pro Thread ermöglicht. Es gibt auf keiner Preisstufe eine Obergrenze für den Durchsatz.
Welche .NET Versionen werden von IronBarcode unterstützt?
IronBarcode unterstützt .NET Framework 4.6.2+, .NET Core 3.1 und .NET 5, 6, 7, 8 und 9 in einem einzigen NuGet-Paket. Zu den Zielplattformen gehören Windows x64/x86, Linux x64 und macOS x64/ARM.
Wie installiere ich IronBarcode in einem .NET-Projekt?
Installieren Sie IronBarcode über NuGet: Führen Sie "Install-Package IronBarCode" in der Paketmanager-Konsole oder "dotnet add package IronBarCode" in der CLI aus. Es sind keine zusätzlichen SDK-Installationsprogramme oder Laufzeitdateien erforderlich.
Kann ich IronBarcode vor dem Kauf testen, im Gegensatz zu BarcodeScanning.MAUI?
Ja, der Testmodus von IronBarcode liefert vollständige dekodierte Barcodewerte - nur die erzeugten Ausgabebilder erhalten ein Wasserzeichen. Sie können die Lesegenauigkeit an Ihren eigenen Dokumenten testen, bevor Sie sich zum Kauf verpflichten.
Was ist der Preisunterschied zwischen BarcodeScanning.MAUI und IronBarcode?
Die Preise für IronBarcode beginnen bei 749 US-Dollar für eine unbefristete Einzelentwicklerlizenz für Entwicklung und Produktion. Preisdetails und Volumenoptionen sind auf der IronBarcode-Lizenzierungsseite verfügbar. Es ist keine separate Runtime-Lizenz erforderlich.
Ist es einfach, von BarcodeScanning.MAUI zu IronBarcode zu migrieren?
Die Migration von BarcodeScanning.MAUI zu IronBarcode beinhaltet in erster Linie das Ersetzen von instanzbasierten API-Aufrufen durch statische Methoden von IronBarcode, das Entfernen von Lizenzierungsvorlagen und das Aktualisieren der Namen von Ergebniseigenschaften. Bei den meisten Migrationen wird eher Code reduziert als hinzugefügt.
Kann IronBarcode QR-Codes mit Logos generieren?
Ja. QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") bettet ein Markenbild nativ in einen QR-Code mit konfigurierbarer Fehlerkorrektur ein. Farbige QR-Codes werden auch über ChangeBarCodeColor() unterstützt.

