Zum Fußzeileninhalt springen
MIT ANDEREN KOMPONENTEN VERGLEICHEN

Syncfusion Barcode vs IronBarcode: C# Barcode Bibliothek Vergleich

ZXing.Net vs IronBarcode: Wahl einer .NET Barcode-Bibliothek in 2026

ZXing.Net's BarcodeReader ist nicht threadsicher. Jeder gleichzeitige Leseprozess in Ihrer Anwendung — jeder parallele ForEach, jede asynchrone Controller-Aktion, die gleichzeitige Anfragen verarbeitet — erfordert eine eigene Leserinstanz. Das bedeutet, dass die Formatkonfiguration pro Instanz wiederholt wird, Bitmap beim Laden und Freigeben pro Aufruf sowie Leserallokation bei jeder Anfrage. Die statische Methode von IronBarcode erledigt die gleiche Arbeit ohne pro Anfrage Allokation. Thread-Sicherheit ist nur ein Punkt auf der Liste: fehlende native PDF-Unterstützung, Fragmentierung des Bindungspakets unter Windows und Linux sowie die Notwendigkeit, jedes Barcode-Format, das gescannt werden soll, anzugeben – dies sind die Merkmale, die dazu führen, dass sich bei ZXing .NET -Projekten im Laufe der Zeit Workarounds ansammeln.

ZXing .NET verstehen

ZXing .NET ist eine Open-Source-Portierung der Java-Bibliothek ZXing ("Zebra Crossing") von Google, die unter der Apache-2.0-Lizenz veröffentlicht und von Michael Jahn auf GitHub gepflegt wird. Es handelt sich um die am häufigsten heruntergeladene Open-Source-Barcode-Bibliothek für .NET mit einer langen Erfolgsgeschichte, die sich über mehr als ein Jahrzehnt erstreckt. Die Bibliothek deckt sowohl das Lesen als auch das Schreiben einer breiten Palette von Barcode-Formaten ab, und ihre kostenlose Lizenz macht sie für Projekte jeder Größe zugänglich, einschließlich Open-Source-Produkte, die Apache-kompatible Abhängigkeiten benötigen.

Die Architektur von ZXing.Net spiegelt seine Ursprünge als Java-Portierung wider. Die BarcodeReader-Klasse ist ein zustandsbehaftetes Objekt: Der Aufruf von Decode schreibt den internen Zustand, was die Instanzen unsicher macht, um sie über Threads hinweg zu teilen. Die korrekte gleichzeitige Nutzung erfordert entweder einen neuen Leser pro Thread oder einen ThreadLocal<BarcodeReader>-Pool — beide legen die Verantwortung für die Threadsicherheit beim Aufrufer. Das Laden von Bildern ist ebenfalls nicht im Kernpaket enthalten; Stattdessen bietet ZXing .NET plattformspezifische Binding-Pakete an, die jeweils eine andere API-Oberfläche bereitstellen.

Zu den wichtigsten architektonischen Merkmalen gehören:

  • Apache 2.0 Lizenz: Kostenlos für kommerzielle und Open-Source-Nutzung, ohne Kosten und ohne Vertriebsverpflichtung.
  • Zustandsbehafteter BarcodeReader: Die BarcodeReader-Instanz ist nicht threadsicher; Für jeden Thread bzw. jede parallele Operation muss eine neue Instanz erstellt werden.
  • Manuelle Formatspezifikation: Aufrufer müssen reader.Options.PossibleFormats vor jedem Dekodieren setzen; Nicht aufgeführte Formate werden stillschweigend ohne Fehlermeldung oder Warnung übersprungen.
  • Keine native PDF-Unterstützung: Die Bibliothek liest nur Bilder; Für die PDF-Eingabe wird eine separate PDF-Rendering-Bibliothek wie beispielsweise PdfiumViewer benötigt, um die Seiten vor der Dekodierung in Bitmaps umzuwandeln.
  • Plattformbindungsfragmentierung: Das Kernpaket bietet keine Bildladefunktion; Separate Bindungspakete (ZXing.Net.Bindings.Windows.Compatibility mit System.Drawing,ZXing.Net.Bindings.ImageSharp / .V2 / .V3mit SixLabors.ImageSharp, plus ZXing.Net.Bindings.SkiaSharp und ZXing.Net.Bindings.Magick) bieten unterschiedliche APIs für verschiedene Bereitstellungsziele.
  • Aktive Community: Probleme, Pull-Anfragen und Diskussionen finden aktiv auf GitHub statt und bieten kostenlosen Support auf Community-Ebene.
  • Breites Formatspektrum: Unterstützt QR-Code, Code 128, Code 39, EAN-13, EAN-8, UPC-A, Data Matrix, PDF 417, Aztec und andere weit verbreitete Symbologien.

Die Stateful Reader Architektur

ZXing.Net's BarcodeReader erfordert eine neue Instanz für jeden Thread oder parallele Operation. Das folgende Muster zeigt die minimale korrekte Konfiguration für die gleichzeitige Verarbeitung:

// ZXing.Net: a new reader instance is created per iteration
Parallel.ForEach(imagePaths, path =>
{
    var reader = new BarcodeReader();
    reader.Options.PossibleFormats = new List<BarcodeFormat>
    {
        BarcodeFormat.QR_CODE,
        BarcodeFormat.CODE_128,
        BarcodeFormat.EAN_13
    };

    using var bitmap = new Bitmap(path);
    var result = reader.Decode(bitmap);

    if (result != null)
        results[path] = result.Text;
});
// ZXing.Net: a new reader instance is created per iteration
Parallel.ForEach(imagePaths, path =>
{
    var reader = new BarcodeReader();
    reader.Options.PossibleFormats = new List<BarcodeFormat>
    {
        BarcodeFormat.QR_CODE,
        BarcodeFormat.CODE_128,
        BarcodeFormat.EAN_13
    };

    using var bitmap = new Bitmap(path);
    var result = reader.Decode(bitmap);

    if (result != null)
        results[path] = result.Text;
});
Imports System.Collections.Concurrent
Imports System.Drawing
Imports ZXing

Parallel.ForEach(imagePaths, Sub(path)
    Dim reader = New BarcodeReader()
    reader.Options.PossibleFormats = New List(Of BarcodeFormat) From {
        BarcodeFormat.QR_CODE,
        BarcodeFormat.CODE_128,
        BarcodeFormat.EAN_13
    }

    Using bitmap As New Bitmap(path)
        Dim result = reader.Decode(bitmap)

        If result IsNot Nothing Then
            results(path) = result.Text
        End If
    End Using
End Sub)
$vbLabelText   $csharpLabel

Das ThreadLocal<BarcodeReader>-Muster verringert die Allokation pro Aufruf, indem eine Instanz pro Thread wiederverwendet wird, fügt jedoch Komplexität bei der Freigabe hinzu. So oder so, Thread-Sicherheit ist die Verantwortung des Anrufers in ZXing.Net.

IronBarcode verstehen

IronBarcode ist eine kommerzielle .NET Barcode-Bibliothek, die von Iron Software entwickelt wurde. Es bietet Barcode-Lesen und -Erzeugung über eine zustandslose statische API: BarcodeReader.Read und BarcodeWriter.CreateBarcode sind die Haupteinstiegspunkte und erfordern keine Instanzerstellung oder Konfiguration vor der Nutzung. Die Bibliothek wird als einzelnes NuGet Paket ausgeliefert, das auf Windows, Linux, macOSund in Docker-Containern identisch läuft, ohne dass plattformspezifische Bindungspakete erforderlich sind.

Die Leseengine von IronBarcode führt eine automatische Formaterkennung für mehr als 50 Barcode-Symbologien durch. Die Anrufer geben nicht an, nach welchen Formaten gesucht werden soll; Die Engine wertet jedes Bild anhand aller unterstützten Formate aus und gibt alle gefundenen Barcodes zurück. Für Anwendungen, die Geschwindigkeit des Scannens gegen Gründlichkeit ausbalancieren müssen, bietet ein ReadingSpeed-Enum (Faster, Balanced, Detailed, ExtremeDetail) Kontrolle ohne Format-Aufzählung erfordern. Die Bibliothek beinhaltet außerdem native PDF-Unterstützung und liest Barcodes direkt aus PDF-Dokumenten auf allen Seiten, ohne dass eine separate PDF-Rendering-Bibliothek erforderlich ist.

Zu den wichtigsten Merkmalen gehören:

  • Kommerzielle Lizenz: Erfordert einen kostenpflichtigen Lizenzschlüssel; Ein Testmodus steht zur Verfügung.
  • Zustandslose statische API: BarcodeReader.Read und BarcodeWriter.CreateBarcode sind threadsichere statische Methoden; Es ist keine Instanzverwaltung erforderlich.
  • Automatische Formaterkennung: Alle über 50 unterstützten Barcode-Formate werden ohne Formatliste erkannt; der Benutzer kann die Geschwindigkeit anstatt des Formatumfangs anpassen.
  • Nativer PDF-Support: BarcodeReader.Read akzeptiert direkt PDF-Dateipfade und verarbeitet alle Seiten ohne externe PDF-Bibliothek.
  • Einzelnes plattformübergreifendes Paket: Ein NuGet Paket, das unter Windows, Linux, macOSund Docker mit derselben API-Oberfläche läuft.
  • Fluent Erzeugungs-API: BarcodeWriter.CreateBarcode gibt ein GeneratedBarcode-Objekt mit eingebauten Ausgabe-Methoden zurück, einschließlich SaveAsPng, SaveAsPdf, ToPngBinaryData und ToStream.
  • Kommerzieller Support: Bezahlte Lizenzen beinhalten den Zugang zum Support-Team von Iron Software mit Service-Level-Vereinbarungen.

Funktionsvergleich

Die folgende Tabelle verdeutlicht die grundlegenden Unterschiede zwischen ZXing .NET und IronBarcode:

Feature ZXing.Net IronBarcode
Lizenz Apache 2.0(kostenlos) Kommerziell
Thread-Sicherheit Nicht threadsicher – für jeden Thread ist eine neue Instanz erforderlich. Threadsichere statische API
Formaterkennung Manuell — PossibleFormats-Liste erforderlich Automatisch – über 50 Formate
PDF-Lesen Nein – benötigt PdfiumViewer oder ein ähnliches Programm. Native — einzelner Methodenaufruf
Windows, Linux, macOS, Docker, Azure, AWS. Separate Bindungspakete pro Plattform Einzelpaket, alle Plattformen
Barcode-Generierung Gibt Bitmap zurück, erfordert manuelles Speichern Fluent API mit integrierter Ausgabe
Preisgestaltung Kostenlos Ab $749 (Lite) / $1.499 (Plus)

Detaillierter Funktionsvergleich

Feature ZXing.Net IronBarcode
Lektüre
Thread-sicheres Lesen Nein – Instanzen pro Thread erforderlich Ja – statische, zustandslose API
Automatische Formaterkennung Nein — PossibleFormats erforderlich Ja – alle Formate wurden automatisch erkannt.
Mehrere Barcodes pro Bild Ja — DecodeMultiple Ja – Standardverhalten
PDF-Barcode-Lesen Nein – externe Bibliothek erforderlich Ja – einheimische
Wiederherstellung beschädigter Barcodes TryHarder-Flagge ML-gestützte Bildkorrektur
Geschwindigkeits-/Genauigkeitsabstimmung Formatlistenreduzierung ReadingSpeed-Enum
Generation
Code 128 / Code 39 Ja Ja
QR-Code Ja Ja
QR-Code mit Logo Nein Ja
Farbanpassung des QR-Codes Nein Ja
Ausgabe in PNG/JPEG/PDF Manuell über System.Drawing Eingebaute Ausgabemethoden
Fluent-Generationenkette Nein Ja
Plattform und Bereitstellung
Windows (System.Zeichnen) Ja — ZXing.Net.Bindings.Windows.Compatibility Ja
Linux / Docker Ja —ZXing.Net.Bindings.ImageSharp / .V2 / .V3(verschiedene API) Ja – dieselbe API.
macOS Ja — ZXing.Net.Bindings.ImageSharp / .V2 / .V3 Ja
Docker zusätzliche Abhängigkeiten Kann libgdiplus erfordern None
Einzelnes NuGet-Paket Nein – Kern + Bindung + optionales ImageSharp Ja
Lizenzierung und Support
Lizenztyp Apache 2.0 Kommerziell
Kosten Kostenlos Von $749
Unterstützung durch die Gemeinschaft GitHub Probleme, aktive Community Ja
Unterstützung für kommerzielle SLAs Nein Ja
Open-Source-freundlich Ja Nein

Thread-Sicherheit und gleichzeitige Verarbeitung

Die Thread-Sicherheit ist der wichtigste operative Unterschied zwischen den beiden Bibliotheken und betrifft mehr Projekte, als die Warnungen in der Dokumentation vermuten lassen.

ZXing .NET -Ansatz

ZXing.Net's BarcodeReader ist ein zustandsbehaftetes Objekt. Wenn Decode aufgerufen wird, wird der interne Zustand geschrieben. Wenn zwei Threads dieselbe Instanz verwenden, kommt es zu einem Wettlauf um die Schreibvorgänge. Die Ergebnisse sind nicht deterministisch: Sie können ein Ergebnis von einem anderen Bild erhalten, ein Nullwert, wo ein Barcode vorhanden ist, oder eine Ausnahme. Der korrekte Ansatz besteht darin, pro Thread einen Reader zu erstellen – das heißt, jeder parallele oder asynchrone Pfad allokiert einen Reader, konfiguriert ihn, verwendet ihn einmal und verwirft ihn anschließend:

// ZXing.Net: one reader instance per parallel operation
Parallel.ForEach(imagePaths, path =>
{
    var reader = new BarcodeReader();
    reader.Options.PossibleFormats = new List<BarcodeFormat>
    {
        BarcodeFormat.QR_CODE,
        BarcodeFormat.CODE_128,
        BarcodeFormat.EAN_13
    };

    using var bitmap = new Bitmap(path);
    var result = reader.Decode(bitmap);

    if (result != null)
        results[path] = result.Text;
});
// ZXing.Net: one reader instance per parallel operation
Parallel.ForEach(imagePaths, path =>
{
    var reader = new BarcodeReader();
    reader.Options.PossibleFormats = new List<BarcodeFormat>
    {
        BarcodeFormat.QR_CODE,
        BarcodeFormat.CODE_128,
        BarcodeFormat.EAN_13
    };

    using var bitmap = new Bitmap(path);
    var result = reader.Decode(bitmap);

    if (result != null)
        results[path] = result.Text;
});
Imports System.Collections.Concurrent
Imports System.Drawing
Imports ZXing

Parallel.ForEach(imagePaths, Sub(path)
    Dim reader As New BarcodeReader()
    reader.Options.PossibleFormats = New List(Of BarcodeFormat) From {
        BarcodeFormat.QR_CODE,
        BarcodeFormat.CODE_128,
        BarcodeFormat.EAN_13
    }

    Using bitmap As New Bitmap(path)
        Dim result = reader.Decode(bitmap)

        If result IsNot Nothing Then
            results(path) = result.Text
        End If
    End Using
End Sub)
$vbLabelText   $csharpLabel

Das ThreadLocal<BarcodeReader>-Muster verringert die Allokation pro Aufruf, indem ein Leser pro Thread wiederverwendet wird, fügt jedoch Komplexität bei der Freigabe hinzu und erfordert weiterhin die Formatkonfiguration bei jeder Instanz.

IronBarcode Ansatz

IronBarcode's BarcodeReader.Read ist eine zustandslose statische Methode. Es gibt keine Instanz zum Teilen, keine Instanz zum Isolieren und keinen Konfigurationsstatus zum Schützen. Derselbe Aufruf kann von beliebig vielen gleichzeitig laufenden Threads sicher ausgeführt werden:

// IronBarcode: static method — no instance management
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    MaxParallelThreads = 4
};

Parallel.ForEach(imagePaths, path =>
{
    var result = BarcodeReader.Read(path, options).FirstOrDefault();
    if (result != null)
        results[path] = result.Value;
});
// IronBarcode: static method — no instance management
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    MaxParallelThreads = 4
};

Parallel.ForEach(imagePaths, path =>
{
    var result = BarcodeReader.Read(path, options).FirstOrDefault();
    if (result != null)
        results[path] = result.Value;
});
Imports IronBarcode

Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True,
    .MaxParallelThreads = 4
}

Parallel.ForEach(imagePaths, Sub(path)
    Dim result = BarcodeReader.Read(path, options).FirstOrDefault()
    If result IsNot Nothing Then
        results(path) = result.Value
    End If
End Sub)
$vbLabelText   $csharpLabel

Die Dokumentation von IronBarcode zum asynchronen und multithreadfähigen Barcode-Lesen erläutert das interne Thread-Pooling-Modell. Die MaxParallelThreads-Eigenschaft steuert den Grad der Parallelisierung ohne externe Koordination.

Formaterkennung

Die Formaterkennungsrichtlinie ist der zweite wesentliche operative Unterschied zwischen den beiden Bibliotheken.

ZXing .NET -Ansatz

ZXing.Net erfordert, dass reader.Options.PossibleFormats vor jedem Dekodieren befüllt wird. Wenn ein Barcode-Format nicht aufgeführt ist, wird es nicht erkannt – ohne Fehlermeldung, Warnung oder Teilergebnis:

// ZXing.Net: PossibleFormats list controls which symbologies are decoded
var reader = new BarcodeReader();
reader.Options.PossibleFormats = new List<BarcodeFormat>
{
    BarcodeFormat.QR_CODE,
    BarcodeFormat.CODE_128,
    BarcodeFormat.CODE_39,
    BarcodeFormat.EAN_13,
    BarcodeFormat.EAN_8,
    BarcodeFormat.UPC_A,
    BarcodeFormat.DATA_MATRIX,
    BarcodeFormat.PDF_417
};
reader.Options.TryHarder = true;

using var bitmap = new Bitmap(imagePath);
var results = reader.DecodeMultiple(bitmap);
// ZXing.Net: PossibleFormats list controls which symbologies are decoded
var reader = new BarcodeReader();
reader.Options.PossibleFormats = new List<BarcodeFormat>
{
    BarcodeFormat.QR_CODE,
    BarcodeFormat.CODE_128,
    BarcodeFormat.CODE_39,
    BarcodeFormat.EAN_13,
    BarcodeFormat.EAN_8,
    BarcodeFormat.UPC_A,
    BarcodeFormat.DATA_MATRIX,
    BarcodeFormat.PDF_417
};
reader.Options.TryHarder = true;

using var bitmap = new Bitmap(imagePath);
var results = reader.DecodeMultiple(bitmap);
Imports ZXing
Imports ZXing.Common

' ZXing.Net: PossibleFormats list controls which symbologies are decoded
Dim reader As New BarcodeReader()
reader.Options.PossibleFormats = New List(Of BarcodeFormat) From {
    BarcodeFormat.QR_CODE,
    BarcodeFormat.CODE_128,
    BarcodeFormat.CODE_39,
    BarcodeFormat.EAN_13,
    BarcodeFormat.EAN_8,
    BarcodeFormat.UPC_A,
    BarcodeFormat.DATA_MATRIX,
    BarcodeFormat.PDF_417
}
reader.Options.TryHarder = True

Using bitmap As New Bitmap(imagePath)
    Dim results = reader.DecodeMultiple(bitmap)
End Using
$vbLabelText   $csharpLabel

Wenn jedes Format aufgelistet wird, um Fehler zu vermeiden, verschlechtert sich die Leistung. Werden nur die erwarteten Formate aufgeführt, besteht die Gefahr, dass Bilder aus externen Quellen unbemerkt fehlen. Für ZXing .NET gibt es keinen Mechanismus, um zu melden, dass ein Barcode in einem nicht aufgeführten Format gefunden wurde.

IronBarcode Ansatz

IronBarcode erkennt alle über 50 unterstützten Formate automatisch. Es ist keine Formatliste erforderlich oder akzeptiert:

// IronBarcode: automatic detection across all supported formats
var results = BarcodeReader.Read(imagePath);
foreach (var barcode in results)
{
    Console.WriteLine($"{barcode.Value} ({barcode.Format})");
}
// IronBarcode: automatic detection across all supported formats
var results = BarcodeReader.Read(imagePath);
foreach (var barcode in results)
{
    Console.WriteLine($"{barcode.Value} ({barcode.Format})");
}
Imports IronBarcode

' IronBarcode: automatic detection across all supported formats
Dim results = BarcodeReader.Read(imagePath)
For Each barcode In results
    Console.WriteLine($"{barcode.Value} ({barcode.Format})")
Next
$vbLabelText   $csharpLabel

Für Anwendungen, die die Lesegeschwindigkeit gegen die Erkennungsgründlichkeit anpassen, bietet IronBarcode ein ReadingSpeed-Enum — Faster, Balanced, Detailed, ExtremeDetail — ohne Format-Aufzählung. Die Geschwindigkeitsabstimmung beeinflusst, wie aggressiv die Engine jedes Bild verarbeitet, nicht, welche Formate sie berücksichtigt.

PDF-Dokumentunterstützung

Das Lesen von PDFs stellt in ZXing .NET eine strikte Grenze dar: Die Bibliothek bietet keinerlei PDF-Unterstützung.

ZXing .NET -Ansatz

Wenn ein Barcode in eine PDF-Datei eingebettet ist, benötigt ZXing .NET eine externe PDF-Rendering-Bibliothek. Die gebräuchlichste Umgehungslösung verwendet PdfiumViewer, was etwa 20 MB an nativen Binärdateien und eine Seitenrendering-Schleife hinzufügt, die Aufrufer implementieren und warten müssen:

// ZXing.Net: PDF input is handled by PdfiumViewer with a per-page render loop
using var pdfDocument = PdfDocument.Load(pdfPath);

var reader = new BarcodeReader();
reader.Options.PossibleFormats = new List<BarcodeFormat>
{
    BarcodeFormat.QR_CODE,
    BarcodeFormat.CODE_128,
    BarcodeFormat.PDF_417
};

for (int i = 0; i < pdfDocument.PageCount; i++)
{
    string tempPath = Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid()}.png");
    try
    {
        using var pageImage = pdfDocument.Render(i, 200, 200, PdfRenderFlags.CorrectFromDpi);
        pageImage.Save(tempPath, ImageFormat.Png);

        using var bitmap = new Bitmap(tempPath);
        var decoded = reader.DecodeMultiple(bitmap);
        if (decoded != null)
            results.AddRange(decoded.Select(d => d.Text));
    }
    finally
    {
        File.Delete(tempPath);
    }
}
// ZXing.Net: PDF input is handled by PdfiumViewer with a per-page render loop
using var pdfDocument = PdfDocument.Load(pdfPath);

var reader = new BarcodeReader();
reader.Options.PossibleFormats = new List<BarcodeFormat>
{
    BarcodeFormat.QR_CODE,
    BarcodeFormat.CODE_128,
    BarcodeFormat.PDF_417
};

for (int i = 0; i < pdfDocument.PageCount; i++)
{
    string tempPath = Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid()}.png");
    try
    {
        using var pageImage = pdfDocument.Render(i, 200, 200, PdfRenderFlags.CorrectFromDpi);
        pageImage.Save(tempPath, ImageFormat.Png);

        using var bitmap = new Bitmap(tempPath);
        var decoded = reader.DecodeMultiple(bitmap);
        if (decoded != null)
            results.AddRange(decoded.Select(d => d.Text));
    }
    finally
    {
        File.Delete(tempPath);
    }
}
Imports System.IO
Imports System.Drawing
Imports PdfiumViewer
Imports ZXing
Imports ZXing.Common

' ZXing.Net: PDF input is handled by PdfiumViewer with a per-page render loop
Using pdfDocument As PdfDocument = PdfDocument.Load(pdfPath)

    Dim reader As New BarcodeReader()
    reader.Options.PossibleFormats = New List(Of BarcodeFormat) From {
        BarcodeFormat.QR_CODE,
        BarcodeFormat.CODE_128,
        BarcodeFormat.PDF_417
    }

    For i As Integer = 0 To pdfDocument.PageCount - 1
        Dim tempPath As String = Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid()}.png")
        Try
            Using pageImage As Image = pdfDocument.Render(i, 200, 200, PdfRenderFlags.CorrectFromDpi)
                pageImage.Save(tempPath, Imaging.ImageFormat.Png)

                Using bitmap As New Bitmap(tempPath)
                    Dim decoded = reader.DecodeMultiple(bitmap)
                    If decoded IsNot Nothing Then
                        results.AddRange(decoded.Select(Function(d) d.Text))
                    End If
                End Using
            End Using
        Finally
            File.Delete(tempPath)
        End Try
    Next
End Using
$vbLabelText   $csharpLabel

Dieses Muster birgt echte Fehlerquellen: Fehlkonfigurationen der DPI-Ebene führen zu unbemerkten Fehlern, temporäre Dateiberechtigungen versagen in abgesicherten Umgebungen, die nativen Bibliotheken von PdfiumViewer erfordern ein separates Bereitstellungsmanagement, und die Einrichtung funktioniert unter Linux ohne zusätzliche Konfiguration nicht.

IronBarcode Ansatz

IronBarcode liest Barcodes nativ aus PDFs – alle Seiten, alle Formate, keine externen Abhängigkeiten. Der gleiche BarcodeReader.Read-Aufruf akzeptiert direkt PDF-Pfade:

// IronBarcode: one call processes every page of the PDF
var results = BarcodeReader.Read("invoice.pdf");
foreach (var barcode in results)
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value}");
// IronBarcode: one call processes every page of the PDF
var results = BarcodeReader.Read("invoice.pdf");
foreach (var barcode in results)
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value}");
Imports IronBarcode

' IronBarcode: one call processes every page of the PDF
Dim results = BarcodeReader.Read("invoice.pdf")
For Each barcode In results
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value}")
Next
$vbLabelText   $csharpLabel

Keine Seitenaufzählung, keine DPI-Konfiguration, keine temporären Dateien und keine separate Bibliothek, die zusammen mit der Anwendung bereitgestellt werden muss.

Plattformbindungen und Bereitstellung

Die Bildverarbeitung von ZXing.Net ist auf plattformspezifische Bindungspakete verteilt, von denen jedes über eine eigene API-Oberfläche verfügt.

ZXing .NET -Ansatz

Das Kernpaket ZXing.Net bietet Dekodierungslogik, aber kein Bildladen. Aufrufer müssen eine Bindung basierend auf ihrem Bereitstellungsziel auswählen:

Umfeld Paket Notizen
Windows-Desktop / WPF ZXing.Net.Bindings.Windows.Compatibility Verwendet System.Drawing — Windows-freundlich; benötigt libgdiplus auf Linux
Linux / Docker/plattformübergreifend ZXing.Net.Bindings.ImageSharp / .V2 / .V3 Unterschiedliche API-Oberfläche; fügt SixLabors.ImageSharp-Abhängigkeit hinzu (V2/V3 verfolgt wichtige ImageSharp-Versionen)
macOS ZXing.Net.Bindings.ImageSharp / .V2 / .V3 Gleicher Pfad wie unter Linux

Die praktische Konsequenz ist, dass Windows-Code, der System.Drawing.Bitmap verwendet, auf Linux nicht kompiliert oder ausgeführt wird. Die Containerisierung erfordert den Wechsel der Bindungspakete und das Umschreiben des Codes zum Laden von Bildern:

// Windows binding path — uses System.Drawing
using ZXing.Windows.Compatibility;
using System.Drawing;

var reader = new BarcodeReader();
using var bitmap = new Bitmap(imagePath);
var result = reader.Decode(bitmap);
// Windows binding path — uses System.Drawing
using ZXing.Windows.Compatibility;
using System.Drawing;

var reader = new BarcodeReader();
using var bitmap = new Bitmap(imagePath);
var result = reader.Decode(bitmap);
Imports ZXing.Windows.Compatibility
Imports System.Drawing

Dim reader As New BarcodeReader()
Using bitmap As New Bitmap(imagePath)
    Dim result = reader.Decode(bitmap)
End Using
$vbLabelText   $csharpLabel
// Cross-platform path — different package, different API
using ZXing.ImageSharp;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;

var reader = new BarcodeReader<Rgba32>();
using var image = Image.Load<Rgba32>(imagePath);
var result = reader.Decode(image);
// Cross-platform path — different package, different API
using ZXing.ImageSharp;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;

var reader = new BarcodeReader<Rgba32>();
using var image = Image.Load<Rgba32>(imagePath);
var result = reader.Decode(image);
Imports ZXing.ImageSharp
Imports SixLabors.ImageSharp
Imports SixLabors.ImageSharp.PixelFormats

Dim reader As New BarcodeReader(Of Rgba32)()
Using image As Image(Of Rgba32) = Image.Load(Of Rgba32)(imagePath)
    Dim result = reader.Decode(image)
End Using
$vbLabelText   $csharpLabel

Die Verwendung der Windows-Bindung auf einem Linux-Host erfordert auch libgdiplus im Docker-Image und fügt dem Container etwa 50 MB hinzu.

IronBarcode Ansatz

IronBarcode liefert ein Paket für alle Plattformen. Der gleiche BarcodeReader.Read(path)-Aufruf wird identisch auf Windows, Linux, macOSund in Docker-Containern kompiliert und ausgeführt. Es werden keine Bindungspakete, keine Plattformbedingungen und keine zusätzlichen Systemabhängigkeiten benötigt. Für Teams, die .NET Anwendungen containerisieren, beschreibt der IronBarcode Docker- und Linux-Setup-Leitfaden das Single-Package-Deployment-Muster detailliert.

API-Generierung

Beide Bibliotheken generieren Barcodes, aber die APIs spiegeln unterschiedliche Designansätze wider.

ZXing .NET -Ansatz

ZXing.Net's BarcodeWriter-Klasse erstellt ein Schreibobjekt, akzeptiert Kodierungsoptionen, ruft Write auf und gibt ein Bitmap zurück, das vom Aufrufer manuell mithilfe von System.Drawing.Imaging gespeichert werden muss:

// ZXing.Net: create writer, set options, call Write, save Bitmap
using ZXing;
using ZXing.Common;
using ZXing.Windows.Compatibility;
using System.Drawing.Imaging;

var writer = new BarcodeWriter
{
    Format = BarcodeFormat.CODE_128,
    Options = new EncodingOptions
    {
        Width = 300,
        Height = 100,
        Margin = 10
    }
};

using var bitmap = writer.Write("PRODUCT-001");
bitmap.Save("output.png", ImageFormat.Png);
// ZXing.Net: create writer, set options, call Write, save Bitmap
using ZXing;
using ZXing.Common;
using ZXing.Windows.Compatibility;
using System.Drawing.Imaging;

var writer = new BarcodeWriter
{
    Format = BarcodeFormat.CODE_128,
    Options = new EncodingOptions
    {
        Width = 300,
        Height = 100,
        Margin = 10
    }
};

using var bitmap = writer.Write("PRODUCT-001");
bitmap.Save("output.png", ImageFormat.Png);
Imports ZXing
Imports ZXing.Common
Imports ZXing.Windows.Compatibility
Imports System.Drawing.Imaging

Dim writer As New BarcodeWriter With {
    .Format = BarcodeFormat.CODE_128,
    .Options = New EncodingOptions With {
        .Width = 300,
        .Height = 100,
        .Margin = 10
    }
}

Using bitmap = writer.Write("PRODUCT-001")
    bitmap.Save("output.png", ImageFormat.Png)
End Using
$vbLabelText   $csharpLabel

Das Speichern in anderen Formaten als PNG oder JPEG, das Speichern in einer PDF-Datei oder das Erzeugen von binärem Ausgabe für eine HTTP-Antwort erfordert zusätzliche System.Drawing-Plumbing, das der Aufrufer implementiert.

IronBarcode Ansatz

IronBarcode's BarcodeWriter.CreateBarcode gibt ein GeneratedBarcode-Objekt zurück, das eingebaute Ausgabemethoden über eine fluente Kette bereitstellt:

// IronBarcode: create and save in one fluent chain
BarcodeWriter.CreateBarcode("PRODUCT-001", BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .SaveAsPng("output.png");
// IronBarcode: create and save in one fluent chain
BarcodeWriter.CreateBarcode("PRODUCT-001", BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .SaveAsPng("output.png");
Imports IronBarCode

' IronBarcode: create and save in one fluent chain
BarcodeWriter.CreateBarcode("PRODUCT-001", BarcodeEncoding.Code128) _
    .ResizeTo(300, 100) _
    .SaveAsPng("output.png")
$vbLabelText   $csharpLabel

Das GeneratedBarcode-Objekt bietet auch .ToPngBinaryData(), .ToJpegBinaryData(), .ToStream() und .SaveAsPdf() — Ausgabeziele, die ZXing.Net erfordert, dass Aufrufer selbst mit System.Drawing implementieren.

API-Mapping-Referenz

ZXing.Net IronBarcode Notizen
new BarcodeReader() Statisch – keine Instanz BarcodeReader.Read(...) ist ein statischer Aufruf
reader.Options.PossibleFormats = new List<BarcodeFormat> { ... } Nicht erforderlich Die automatische Erkennung deckt alle Formate ab.
reader.Options.TryHarder = true Speed = ReadingSpeed.Balanced Genauigkeitsanpassung über BarcodeReaderOptions
reader.Decode(bitmap) BarcodeReader.Read(imagePath) Pfad direkt übergeben — kein Bitmap erforderlich
reader.DecodeMultiple(bitmap) BarcodeReader.Read(imagePath) Gibt immer eine Sammlung zurück
result.Text result.Value Immobilie umbenannt
result.BarcodeFormat result.Format Immobilie umbenannt
BarcodeFormat.QR_CODE BarcodeEncoding.QRCode Änderung der Namenskonvention für Enumerationen
BarcodeFormat.CODE_128 BarcodeEncoding.Code128 Änderung der Namenskonvention für Enumerationen
BarcodeFormat.EAN_13 BarcodeEncoding.EAN13 Änderung der Namenskonvention für Enumerationen
new BarcodeWriter { Format = BarcodeFormat.CODE_128, Options = new EncodingOptions { ... } } BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) Statische Fabrikmethode
writer.Write(data) gibt Bitmap zurück .SaveAsPng(path) / .ToPngBinaryData() Eingebaute Ausgabemethoden auf GeneratedBarcode
Keine PDF-Unterstützung – PDFViewer erforderlich BarcodeReader.Read("doc.pdf") Native PDF-Unterstützung
Nicht gewindesicher Threadsichere statische API Keine Instanzverwaltung erforderlich

Wenn Teams einen Wechsel von ZXing .NET zu IronBarcode erwägen

Mehrere Szenarien veranlassen Entwicklungsteams dazu, IronBarcode als Alternative zu ZXing .NET zu evaluieren.

Gleichzeitige und hocheffiziente Verarbeitung

Eine ZXing .NET Integration, die in einer Single-Thread-Konsolenanwendung korrekt funktioniert, kann nicht-deterministisches Verhalten zeigen, wenn derselbe Code in einen ASP.NET Core Controller verschoben wird, der gleichzeitige Anfragen verarbeitet, oder in einen Hintergrundjob, der Batches parallel verarbeitet. Das von ZXing .NET geforderte Instanzmuster pro Thread bedeutet, dass jede Anfrage oder parallele Aufgabe ein vollständiges Reader-Objekt mit dem zugehörigen konfigurierten Decodersatz zuweist, es einmal verwendet und anschließend verwirft. Mit zunehmendem Anfragevolumen wird dieser Zuteilungsdruck messbar. Teams, die diesen Punkt erreichen – insbesondere solche, die Scan-Pipelines mit hohem Durchsatz in den Bereichen Logistik, Lagerhaltung oder Dokumentenverarbeitung betreiben – suchen oft nach einer Bibliothek, deren Threading-Modell diesen Overhead nicht jedem Aufrufer auferlegt.

Scannen von Dokumenten in gemischten Formaten

Anwendungen, die Dokumente von Dritten akzeptieren, stoßen häufig auf Barcode-Formate, die bei der Konfiguration der Formatliste nicht berücksichtigt wurden. Eine für Code 128 entwickelte Versandintegration empfängt Sendungen von Partnern mittels QR-Codes. Ein medizinisches Dokumentationssystem, das für PDF 417-Begegnungen und Data Matrix-Symbologien eines neuen Geräteherstellers konfiguriert ist. In ZXing .NET führt jeder dieser Fälle zu einem stillen Nullwert anstelle eines Dekodierungsfehlers, was bedeutet, dass der Fehler möglicherweise erst bei einem Fehler in der nachfolgenden Verarbeitung sichtbar wird. Teams, die durch unbemerkte Formatfehler schlechte Erfahrungen gemacht haben – insbesondere in Kontexten, in denen ein übersehener Barcode geschäftliche Konsequenzen hat – beginnen, die Kosten der Formatlistenpflege gegen eine Bibliothek abzuwägen, die Formate automatisch erkennt.

PDF-Barcode-Extraktion

Viele Geschäftsdokumente kommen im PDF-Format an: Rechnungen, Versandmanifeste, Patientenakten, Konformitätsbescheinigungen. ZXing .NET kann diese nicht direkt lesen. Teams, die Barcodes aus PDFs extrahieren müssen, müssen letztendlich eine Rendering-Pipeline auf Basis von ZXing .NET aufbauen und pflegen – sie wählen eine PDF-Bibliothek aus, verwalten deren native Abhängigkeiten, implementieren eine Seitenrender-Schleife, handhaben die DPI-Konfiguration und schreiben eine Bereinigungslogik für temporäre Dateien. Dieser Infrastrukturcode ist keine Barcode-Logik; Es dient einzig und allein dazu, die Lücke zwischen dem, was ZXing .NET akzeptiert (Bitmaps), und dem, was Geschäftsdokumente tatsächlich sind (PDFs), zu schließen. Teams, die diese Brücke pflegen müssen – insbesondere wenn die PDF-Bibliothek selbst Lizenzierungs-, Bereitstellungs- und Plattformüberlegungen mit sich bringt – bevorzugen oft eine einzige Bibliothek, die die gesamte Eingabeoberfläche abdeckt.

Reduzierung der Bindungskomplexität

Projekte, die unter Windows gestartet und später auf Linux oder Docker bereitgestellt werden, stoßen direkt auf die Bindungsfragmentierung von ZXing.Net: Das Windows-Bindungspaket verwendet eine andere API als die plattformübergreifende ImageSharp-Bindung, und der Wechsel zwischen ihnen erfordert die Änderung sowohl der NuGet -Referenzen als auch des Bildladecodes. Teams, die ihre .NET Anwendungen routinemäßig containerisieren oder die gleiche Codebasis auf Entwicklerrechnern (Windows oder macOS) und Produktionsservern (Linux) ausführen, stellen fest, dass die Pflege zweier Codepfade für das Laden von Bildern jede zukünftige Änderung in der Scanschicht erschwert.

Gemeinsame Überlegungen zur Migration

Teams, die von ZXing .NET auf IronBarcode umsteigen, sollten diese spezifischen technischen Änderungen einplanen.

Entfernung der BarcodeReader-Instanziierung

Jeder new BarcodeReader()-Aufruf im Codebasis wird während der Migration entfernt. Das Instanziierungsmuster – Erstellung des Readers, Formatkonfiguration, Laden des Bildes, Dekodierungsaufruf – reduziert sich auf einen einzigen statischen Methodenaufruf. Dateien, die ZXing, ZXing.Common, ZXing.Windows.Compatibility, ZXing.ImageSharp und SixLabors.ImageSharp-Namespaces importieren, haben diese Importe entfernt und durch einen einzigen using IronBarCode; ersetzt.

Entfernung der Konfiguration "Mögliche Formate"

Der reader.Options.PossibleFormats-Zuweisungsblock wird bei jedem Aufrufort gelöscht. IronBarcode führt eine automatische Formaterkennung durch und akzeptiert keine Formatbeschränkungsliste. Das TryHarder-Flag wird durch die ReadingSpeed-Eigenschaft bei BarcodeReaderOptions ersetzt, die den Erkennungsaufwand steuert, ohne den Formatbereich einzuengen.

Bereinigung des Bindungspakets

Die Migration entfernt ZXing.Net, ZXing.Net.Bindings.Windows.Compatibility, alle ZXing.Net.Bindings.ImageSharp-Varianten (.V2 / .V3) und alle PdfiumViewer-Pakete, die hinzugefügt wurden, um das PDF-Lesen zu unterstützen. Wenn libgdiplus zu einem Dockerfile hinzugefügt wurde, um System.Drawing durch die Windows-Bindung auf Linux zu unterstützen, wird auch diese Zeile entfernt. IronBarcode benötigt im Docker-Image keine plattformspezifischen Abhängigkeiten.

Zusätzliche IronBarcode Funktionen

Über die in den obigen Vergleichsabschnitten beschriebenen Funktionen hinaus bietet IronBarcode Folgendes:

  • QR-Code mit Logoeinbettung : Generieren Sie QR-Codes mit einem benutzerdefinierten Logobild in der Mitte, mit automatischer Fehlerkorrektur zur Gewährleistung der Scanbarkeit.
  • Anpassung der QR-Code-Farben : Legen Sie Vorder- und Hintergrundfarben für generierte QR-Codes fest, um ein markenkonformes Erscheinungsbild zu gewährleisten.
  • Barcode-Aufdruck auf PDFs : Barcodes direkt auf bestehende PDF-Seiten an festgelegten Koordinaten schreiben, ohne eine separate PDF-Bibliothek zu benötigen.
  • GS1-Barcode-Unterstützung : Lesen und Generieren von GS1-formatierten Barcodes, einschließlich GS1-128 und GS1 DataBar, die in Lieferketten im Einzelhandel und im Gesundheitswesen verwendet werden.
  • Multithread-Async-Lesen: Eingebaute asynchrone Methoden zur Integration von Barcode-Lesen in await-Pipelines ohne Blockieren.
  • ML-gestützte Bildkorrektur: Automatische Bildverbesserung für beschädigte, verschwommene oder kontrastarme Barcodes, die TryHarder nicht wiederherstellen kann.

.NET-Kompatibilität und Zukunftsfähigkeit

IronBarcode zielt auf .NET Standard 2.0 und höher ab und bietet Kompatibilität mit .NET Framework 4.6.2+, .NET Core 3.1, .NET 5, .NET 6, .NET 7, .NET 8 und .NET 9. Die Bibliothek erhält regelmäßige Updates, die mit Microsofts .NET-Veröffentlichungszyklus übereinstimmen, um sicherzustellen, dass die Kompatibilität mit .NET 10 bei oder nahe der Veröffentlichung verfügbar sein wird. ZXing .NET gewährleistet zudem durch seine NuGet -Paketziele eine breite .NET Kompatibilität, und beide Bibliotheken eignen sich aus dieser Perspektive für moderne .NET Projekte.

Abschluss

ZXing .NET und IronBarcode repräsentieren unterschiedliche Philosophien im Design von Barcode-Bibliotheken. ZXing .NET ist eine zustandsbehaftete, instanzbasierte Bibliothek, die die Thread-Verantwortung, die Formatspezifikation und die PDF-Überbrückung vollständig an den Aufrufer delegiert. IronBarcode ist eine zustandslose Bibliothek mit statischer API, die Threading intern implementiert, Formate automatisch erkennt und PDF-Eingaben nativ verarbeitet. Die praktische Konsequenz dieses Unterschieds ist, dass ZXing .NET Code in Kontexten der Parallelverarbeitung oder Dokumentenverarbeitung dazu neigt, Infrastruktur anzusammeln – pro Thread Instanzmuster, Formatlisten, PDF-Rendering-Pipelines und plattformspezifische Bindungszweige –, während IronBarcode -Code für die gleichen Szenarien keine dieser umgebenden Strukturen benötigt.

ZXing .NET ist eine wirklich gute Wahl für Projekte, die keine Kosten erfordern. Dank der Apache 2.0-Lizenz ist es sowohl mit Open-Source-Projekten als auch mit kommerziellen Produkten kompatibel, die freie Abhängigkeiten bevorzugen. In kontrollierten Umgebungen – bekannten Barcode-Formaten, sauberen Bildern, Single-Thread- oder leicht paralleler Verarbeitung – arbeitet es zuverlässig. Die aktive GitHub Community reagiert zeitnah auf Probleme, und die Bandbreite der abgedeckten Formate ist mit kommerziellen Alternativen vergleichbar. Bei Anwendungen, bei denen diese Bedingungen erfüllt sind, ist der Kostenvorteil von ZXing.Net real und seine technischen Einschränkungen sind beherrschbar.

IronBarcode befasst sich mit Szenarien, in denen die Designbeschränkungen von ZXing.Net zu Betriebskosten führen: gleichzeitige Web-APIs, bei denen die Instanzzuweisung pro Anfrage messbar ist, Dokumentenpipelines, bei denen PDF-Eingabe die Norm und nicht die Ausnahme ist, Scannen in gemischten Formaten, bei dem stillschweigende Fehler ein Geschäftsrisiko darstellen, und plattformübergreifende Bereitstellungen, bei denen zwei Bindungspakete zwei Codepfade bedeuten. Für diese Kontexte erwirbt die kommerzielle Lizenz der Bibliothek ein Threading-Modell, das keine Instanzverwaltung erfordert, eine Formaterkennung, die keine Wartung benötigt, und eine PDF-Unterstützung, die keine zweite Bibliothek erfordert.

Die Entscheidung hängt von den Anforderungen des Projekts ab. Ein Prototyp in einem einzigen Format, ein Open-Source-Scanner oder ein Tool für geringe Stückzahlen, bei dem die Kosten den größten Einfluss haben – in solchen Fällen ist ZXing .NET die richtige Wahl. Eine produktive Web-API, die Dokumente aus externen Quellen über mehrere Threads verarbeitet – hier decken sich die Designannahmen von IronBarcode mit der betrieblichen Realität. Für einen umfassenderen Überblick darüber, wie sich die Bibliotheken hinsichtlich Erkennungsraten und realen Scan-Szenarien vergleichen lassen, bietet der Vergleich der Barcode-Scanner ZXing .NET und IronBarcode zusätzliche Analysen.

Häufig gestellte Fragen

Was ist ZXing.Net?

ZXing.Net 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 for .NET-Projekte in Betracht ziehen.

Was sind die Hauptunterschiede zwischen ZXing.Net und IronBarcode?

IronBarcode verwendet eine statische, zustandslose API, die keine Instanzverwaltung erfordert, während ZXing.Net 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 ZXing.Net?

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 ZXing.Net 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 ZXing.Net?

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 ZXing.Net?

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 ZXing.Net 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 die Migration von ZXing.Net zu IronBarcode einfach?

Bei der Migration von ZXing.Net zu IronBarcode geht es in erster Linie darum, instanzbasierte API-Aufrufe durch die statischen Methoden von IronBarcode zu ersetzen, Lizenzierungsformulierungen zu entfernen und die Namen von Ergebniseigenschaften zu aktualisieren. 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.

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