Zum Fußzeileninhalt springen
MIT ANDEREN KOMPONENTEN VERGLEICHEN

LEADTOOLS BarCode vs IronBarcode: C# Barcode-Bibliothek im Vergleich

Um LEADTOOLS BarCodein Docker zu verwenden, binden Sie eine Lizenzdatei unter einem bestimmten Pfad in Ihren Container ein. Diese Datei muss bei jeder Bereitstellung mitgeliefert werden. Umgebungsvariablen reichen nicht aus. Jede LEADTOOLS-Implementierung stellt ein Dateiverwaltungsproblem dar.

Das ist kein Vorwurf an die Ingenieursleistung von LEADTOOLS – es spiegelt eine 30 Jahre alte Lizenzarchitektur wider, die vor der Existenz von Containern entwickelt wurde. Doch wenn Ihre CI/CD-Pipeline im Jahr 2026 ein Container-Image erstellen und bereitstellen muss, betten Sie entweder eine .LIC-Datei in das Image ein oder binden sie zur Laufzeit als Volume ein. In beiden Fällen benötigt Ihre Barcode-Bibliothek Zugriff auf das Dateisystem, bevor sie initialisiert werden kann. Genau dieser Kompromiss wird in diesem Vergleich untersucht.

LEADTOOLS BarCodeverstehen

LEADTOOLS Barcode ist Teil des umfassenden Dokumenten-Imaging-SDKs von LEAD Technologies, das seit 1990 kontinuierlich weiterentwickelt wird. Das Barcode-Modul unterstützt mehr als 40 Symbologien und ist eng in das breitere LEADTOOLS-Ökosystem für OCR, Formularverarbeitung, PDF-Bearbeitung und Bildanzeige integriert. Diese Integration des Ökosystems ist besonders wertvoll, wenn eine Anwendung all diese Funktionen von einem einzigen Anbieter benötigt. Wenn die Anforderung das Scannen von Barcodes in einem eigenständigen Microservice oder einer fokussierten Anwendung ist, stellt die gleiche Integration einen Mehraufwand dar, der bei jeder Bereitstellung berücksichtigt werden muss.

Die Architektur der Bibliothek spiegelt ihr Alter wider. LEADTOOLS wurde in einer Ära der expliziten Ressourcenverwaltung, der manuellen Konfiguration und der dateisystembasierten Lizenzierung entwickelt. Jede dieser Designentscheidungen war in ihrem Kontext sinnvoll. In der modernen .NET -Entwicklung – containerisierte Workloads, CI/CD-Pipelines, Geheimnisverwaltungssysteme – erzeugen genau diese Entscheidungen Reibungsverluste, die die Teams aktiv umgehen müssen.

Für die Bereitstellung von LEADTOOLS BarCodewerden mindestens fünf NuGet Pakete benötigt. Die Extraktion von PDF-Barcodes erfordert ein sechstes Paket. Unter Windows muss die MSVC++ 2017-Laufzeitumgebung auf dem Hostsystem installiert sein. Die veröffentlichte Ausgabe einer LEADTOOLS-Barcode-Anwendung hat eine Größe von ca. 148 MB.

Wichtigste architektonische Merkmale des LEADTOOLS-Barcodes:

  • Dateibasierte Lizenzarchitektur: Erfordert eine .LIC-Datei, die physisch auf der Festplatte unter einem bekannten Pfad vorhanden sein muss, Plus eine Entwicklerschlüsselzeichenfolge. Beide müssen zur Laufzeit zugänglich sein, damit die Bibliothek initialisiert werden kann.
  • Zweistufiges Lizenzmodell: Entwicklungslizenzen und Bereitstellungslizenzen werden separat bepreist und separat erworben. Für Angebote zur Produktionsimplementierung wenden Sie sich bitte an den Vertrieb von LEADTOOLS.
  • Installation mehrerer Pakete: Für eine minimale Installation mit Barcode-Funktion werden Leadtools.Barcode, Leadtools, Leadtools.Codecs, Leadtools.Codecs.Png und Leadtools.Codecs.Jpeg benötigt. Jedes zusätzliche Bildformat benötigt sein eigenes Codec-Paket.
  • Native Laufzeitabhängigkeit: Für Windows-Bereitstellungen wird zusätzlich zur .NET Laufzeitumgebung die MSVC++ 2017-Laufzeitumgebung benötigt.
  • Explizite Symbologie-Deklaration: Zum Lesen von Barcodes ist die Übergabe eines Arrays von BarcodeSymbology Enum-Werten erforderlich, die angeben, nach welchen Formaten gescannt werden soll. Fehlende Formate werden nicht erkannt.
  • Sequenz der gestaffelten Initialisierung: Nach dem Laden der Lizenzdatei muss die Anwendung überprüfen, ob die Lizenz nicht abgelaufen ist und ob jede erforderliche Funktion – 1D-Lesen, 2D-Lesen, Schreiben – einzeln freigeschaltet ist, bevor ein BarcodeEngine erstellt wird.
  • Mehr als 40 unterstützte Symbologien: Starke Formatabdeckung für 1D- und 2D-Barcodetypen als Teil einer umfassenden Bildverarbeitungsplattform.

Die dateibasierte Lizenzarchitektur

Für die Initialisierung von LEADTOOLS sind ungefähr 20 Codezeilen erforderlich, bevor die erste Barcode-Operation ausgeführt werden kann. Die Sequenz umfasst die Auflösung von Dateipfaden, die Überprüfung des Ablaufdatums und die Sperrprüfung pro Funktion:

// LEADTOOLS: 20+Zeilen before the first barcode operation
using Leadtools;
using Leadtools.Barcode;

RasterSupport.SetLicense(
    @"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
    "your-developer-key-here");

if (RasterSupport.KernelExpired)
    throw new InvalidOperationException("LEADTOOLS license has expired");

if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
    throw new InvalidOperationException("1D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
    throw new InvalidOperationException("2D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
    throw new InvalidOperationException("Barcode writing is locked");

var engine = new BarcodeEngine();
// LEADTOOLS: 20+Zeilen before the first barcode operation
using Leadtools;
using Leadtools.Barcode;

RasterSupport.SetLicense(
    @"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
    "your-developer-key-here");

if (RasterSupport.KernelExpired)
    throw new InvalidOperationException("LEADTOOLS license has expired");

if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
    throw new InvalidOperationException("1D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
    throw new InvalidOperationException("2D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
    throw new InvalidOperationException("Barcode writing is locked");

var engine = new BarcodeEngine();
Imports Leadtools
Imports Leadtools.Barcode

' LEADTOOLS: 20+Zeilen before the first barcode operation
RasterSupport.SetLicense("C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC", "your-developer-key-here")

If RasterSupport.KernelExpired Then
    Throw New InvalidOperationException("LEADTOOLS license has expired")
End If

If RasterSupport.IsLocked(RasterSupportType.Barcode1DRead) Then
    Throw New InvalidOperationException("1D barcode reading is locked")
End If

If RasterSupport.IsLocked(RasterSupportType.Barcode2DRead) Then
    Throw New InvalidOperationException("2D barcode reading is locked")
End If

If RasterSupport.IsLocked(RasterSupportType.BarcodeWrite) Then
    Throw New InvalidOperationException("Barcode writing is locked")
End If

Dim engine As New BarcodeEngine()
$vbLabelText   $csharpLabel

Dieser Initialisierungsblock muss erfolgreich ausgeführt werden, bevor jegliche Barcode-Lese- oder Schreibvorgänge funktionieren. Wenn die Datei .LIC fehlt, der Pfad falsch ist oder die Dateiberechtigungen nicht stimmen, wird LEADTOOLS nicht initialisiert – nicht stillschweigend, sondern mit einem Fehler, der den Vorgang abbricht.

IronBarcode verstehen

IronBarcode ist eine spezialisierte .NET Barcode-Bibliothek, die speziell für das Lesen und Generieren von Barcodes in .NET Anwendungen entwickelt wurde. IronBarcode ist nicht nur ein Modul innerhalb eines größeren Imaging SDK, sondern befasst sich in erster Linie mit der Barcode-Funktionalität. Die Bibliothek wird als einzelnes NuGet Paket verteilt, das die Unterstützung aller Bildformate, die native PDF-Barcode-Extraktion und die ML-basierte Fehlerkorrektur beinhaltet, ohne dass zusätzliche Codec-Pakete oder native Laufzeitabhängigkeiten erforderlich sind.

IronBarcode verwendet ein statisches API-Design. Lese- und Schreibvorgänge sind als statische Methodenaufrufe auf BarcodeReader und BarcodeWriter möglich, ohne dass Instanzerstellung oder Initialisierungsobjekte erforderlich sind. Die Lizenzaktivierung erfolgt durch die Zuweisung einer einzelnen Zeichenkette. Die Bibliothek erkennt Barcode-Formate automatisch über alle mehr als 50 unterstützten Symbologien hinweg, sodass die Notwendigkeit entfällt, die erwarteten Formate vor jedem Lesevorgang aufzulisten.

Die Bibliothek ist für .NET Standard 2.0und höher ausgelegt und bietet Kompatibilität mit .NET Framework 4.6.2+, .NET 5, .NET 6, .NET 7, .NET 8 und .NET 9. Auf keinem der unterstützten Betriebssysteme ist eine plattformspezifische native Laufzeitumgebung erforderlich.

Hauptmerkmale von IronBarcode:

  • String-Key-Lizenzierung: Zur Lizenzaktivierung ist die Zuweisung eines einzelnen Strings erforderlich. Der Schlüssel kann aus einer Umgebungsvariablen, einer Konfigurationsdatei, einem Geheimnismanager oder einer beliebigen Quelle stammen, die einen Zeichenkettenwert liefert.
  • Einzelnes NuGet Paket: Alle Bildformatunterstützungen, PDF-Extraktion und Barcode-Funktionen sind in IronBarcode enthalten. Es werden keine zusätzlichen Codec-Pakete benötigt.
  • Statische Fluent API: BarcodeReader.Read() und BarcodeWriter.CreateBarcode() sind statische Einstiegspunkte. Es müssen keine Engine-Instanzen oder Codec-Objekte erstellt werden.
  • Automatische Formaterkennung: Liest Daten aus allen über 50 unterstützten Symbologien, ohne dass der Aufrufer die erwarteten Formate angeben muss.
  • Integrierte PDF-Unterstützung: Die Extraktion von PDF-Barcodes ist im Basispaket enthalten und erfordert keine zusätzliche Installation.
  • Über 50 unterstützte Symbologien: Umfasst alle wichtigen 1D- und 2D-Barcodeformate, einschließlich Code 128, Code 39, QR-Code, Data Matrix, PDF417, EAN-13 und UPC-A.
  • ML-Fehlerkorrektur: Die auf maschinellem Lernen basierende Bildkorrektur verbessert die Lesegenauigkeit bei beschädigten oder qualitativ minderwertigen Barcode-Bildern.

Funktionsvergleich

Die folgende Tabelle verdeutlicht die grundlegenden Unterschiede zwischen LEADTOOLS BarCodeund IronBarcode:

Feature LEADTOOLS BarCode IronBarcode
Lizenzmodell Datei + Schlüssel (zweistufig) Nur Schlüssel (einstufig)
SDK-Fußabdruck 5+Pakete + native Laufzeitumgebung 1 Packung
Initialisierungscode 20+Zeilen 1 Zeile
Docker-Einsatz Datei muss eingebunden werden Umgebungsvariable
PDF-Barcode-Extraktion Separates Paket Eingebaut
Format automatisch erkennen Beschränkt Ja
Gesamtsymboliken 40+ 50+
ML-Fehlerkorrektur Nein Ja

Detaillierter Funktionsvergleich

Feature LEADTOOLS BarCode IronBarcode
Lizenzierung
Lizenzmodell Datei + Entwicklerschlüssel Nur Zeichenkettenschlüssel
Lizenzstufen Entwicklung + Bereitstellung (separat) Einzellizenz
Bereitstellungspreise Kontakt zum Vertrieb Veröffentlichte Preise
Lizenz in Umgebungsvariable Teilweise (nur Schlüssel, Datei weiterhin erforderlich) Ja
Lizenz im Bereich Geheimnismanager Datei weiterhin erforderlich Ja (nur Zeichenkette)
Installation
Erforderliche NuGet Pakete 5+ 1
Native Laufzeitabhängigkeit MSVC++ 2017 (Windows) Keine
PDF-Unterstützungspaket Getrennt (Leadtools.Codecs.Pdf) Enthalten
Veröffentlichte Ausgabegröße ~148 MB ~39 MB
Lektüre
1D-Symboliken 25+ 30+
2D-Symboliken Ab 15 Jahren Ab 15 Jahren
Format automatisch erkennen Beschränkt Ja
Explizite Symbolisierungsdeklaration erforderlich Ja Nein
PDF-Barcode-Extraktion Ja (separates Paket) Ja (integriert)
ML-Fehlerkorrektur Nein Ja
Mehrfach-Barcode-Erkennung Ja Ja
Generation
Code 128-Generierung Ja Ja
QR-Code-Generierung Ja Ja
QR-Code-Logo-Branding Nein Ja
Fluent-Generierungs-API Nein Ja
Ausgabeformate PNG, JPEG, BMP PNG, JPEG, BMP, SVG, HTML, PDF
API-Entwurf
API-Stil Legacy-Objektgraph Statisch fließend
Initialisierungszeilen 20+ 1
Bildladeebene RasterCodecs (separat) Automatisch
Plattform
Plattformübergreifend Teilweise (native Abhängigkeiten) Vollversion (.NET Standard)
Docker-/Container-Unterstützung Datei muss eingebunden werden Umgebungsvariable
.NET Standard 2.0 Ja Ja
.NET 8 / .NET 9 Ja Ja

Lizenzarchitektur

Die Lizenzarchitektur ist der bedeutendste Unterschied zwischen diesen beiden Bibliotheken für Teams, die auf moderner Infrastruktur arbeiten.

LEADTOOLS-Ansatz

Für die LEADTOOLS-Lizenzierung ist eine .LIC-Datei erforderlich, die physisch auf dem Dateisystem unter einem bekannten Pfad vorhanden ist, Plus ein Entwicklerschlüssel, der an RasterSupport.SetLicense übergeben wird. Nach dem Aufruf von SetLicense muss die Anwendung überprüfen, ob die Lizenz noch gültig ist und ob jede Barcode-Funktion einzeln freigeschaltet ist. Erst wenn alle Prüfungen erfolgreich waren, kann ein BarcodeEngine erstellt werden:

// LEADTOOLS: 20+Zeilen before the first barcode operation
using Leadtools;
using Leadtools.Barcode;

RasterSupport.SetLicense(
    @"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
    "your-developer-key-here");

if (RasterSupport.KernelExpired)
    throw new InvalidOperationException("LEADTOOLS license has expired");

if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
    throw new InvalidOperationException("1D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
    throw new InvalidOperationException("2D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
    throw new InvalidOperationException("Barcode writing is locked");

var engine = new BarcodeEngine();
// LEADTOOLS: 20+Zeilen before the first barcode operation
using Leadtools;
using Leadtools.Barcode;

RasterSupport.SetLicense(
    @"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
    "your-developer-key-here");

if (RasterSupport.KernelExpired)
    throw new InvalidOperationException("LEADTOOLS license has expired");

if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
    throw new InvalidOperationException("1D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
    throw new InvalidOperationException("2D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
    throw new InvalidOperationException("Barcode writing is locked");

var engine = new BarcodeEngine();
Imports Leadtools
Imports Leadtools.Barcode

' LEADTOOLS: 20+Zeilen before the first barcode operation
RasterSupport.SetLicense("C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC", "your-developer-key-here")

If RasterSupport.KernelExpired Then
    Throw New InvalidOperationException("LEADTOOLS license has expired")
End If

If RasterSupport.IsLocked(RasterSupportType.Barcode1DRead) Then
    Throw New InvalidOperationException("1D barcode reading is locked")
End If

If RasterSupport.IsLocked(RasterSupportType.Barcode2DRead) Then
    Throw New InvalidOperationException("2D barcode reading is locked")
End If

If RasterSupport.IsLocked(RasterSupportType.BarcodeWrite) Then
    Throw New InvalidOperationException("Barcode writing is locked")
End If

Dim engine As New BarcodeEngine()
$vbLabelText   $csharpLabel

Dieses dateibasierte Modell stammt aus der Zeit vor modernen Systemen zur Geheimnisverwaltung. Die Datei .LIC muss auf jeder Umgebung bereitgestellt werden, in der die Anwendung ausgeführt wird: Entwicklerrechner, CI-Build-Agenten, Staging-Server und Produktionshosts.

IronBarcode Ansatz

Die Lizenzinitialisierung von IronBarcode besteht aus einer einzigen Zeile:

// IronBarcode: done
IronBarCode.License.LicenseKey = "YOUR-KEY";
// IronBarcode: done
IronBarCode.License.LicenseKey = "YOUR-KEY";
$vbLabelText   $csharpLabel

Dieser Schlüssel kann aus einer Umgebungsvariablen, einer Konfigurationsdatei oder einem Geheimnismanager stammen – überall dort, wo eine Zeichenkette herkommen kann. Es gibt keine Datei zu suchen, keine Ablaufprüfung durchzuführen und keine Funktionssperre zu überprüfen. Für die Lizenzeinrichtung und die Bereitstellungsoptionen deckt die Dokumentation alle Muster ab: Umgebungsvariablen, appsettings.json, Azure Key Vault und mehr.

Docker und Containerbereitstellung

Der Unterschied in der Lizenzarchitektur wird beim Schreiben einer Dockerfile konkret.

LEADTOOLS-Ansatz

Für die Docker-Bereitstellung von LEADTOOLS muss die Datei .LIC in das Container-Image kopiert oder zur Laufzeit als Volume eingebunden werden:

FROM mcr.microsoft.com/dotnet/aspnet:8.0

WORKDIR /app
COPY publish/ .

# The license file must be physically present in the container
COPY LEADTOOLS.LIC /app/license/LEADTOOLS.LIC

ENV LEADTOOLS_LICENSE_PATH=/app/license/LEADTOOLS.LIC
ENV LEADTOOLS_DEVELOPER_KEY=your-developer-key

ENTRYPOINT ["dotnet", "YourApp.dll"]

Dieser Ansatz hat Folgekomplikationen. Das Rotieren oder Widerrufen eines Lizenzschlüssels erfordert das Neuerstellen des Images oder das erneute Einbinden des Volumes. Die CI/CD-Pipeline muss entweder die Datei .LIC einchecken oder sie zur Build-Zeit aus einem Base64-kodierten Secret dekodieren. Kubernetes-Secrets, die für Schlüssel-Wert-Paare konzipiert sind, müssen nun den Dateiinhalt speichern. Teams, die mit kurzlebigen Containern arbeiten, müssen das Problem der Dateibereitstellung auf jedem neuen Knoten lösen.

IronBarcode Ansatz

IronBarcode benötigt keine Datei im Container:

FROM mcr.microsoft.com/dotnet/aspnet:8.0

WORKDIR /app
COPY publish/ .

ENV IRONBARCODE_LICENSE=your-license-key

ENTRYPOINT ["dotnet", "YourApp.dll"]

Das Modell der Umgebungsvariablen funktioniert nativ mit Docker Secrets, Kubernetes Secrets, AWS Secrets Manager, Azure Key Vault und HashiCorp Vault – also mit jedem System, das eine Zeichenkette in die Umgebung eines Containers einfügen kann. Es gibt einen vollständigen Docker- und Linux-Bereitstellungsleitfaden, der sowohl Alpine- als auch Debian-Basisimages abdeckt.

Barcode-Lesung

LEADTOOLS-Ansatz

Zum Lesen von LEADTOOLS ist es erforderlich, eine RasterCodecs-Instanz zum Laden des Bildes, eine BarcodeEngine-Instanz zum Scannen und ein explizites Array von BarcodeSymbology-Werten zu erstellen, die angeben, nach welchen Formaten gesucht werden soll. Wird eine Symbologie aus dem Array weggelassen, erkennt LEADTOOLS Barcodes dieses Typs nicht:

// LEADTOOLS: codec, engine, explicit symbology list
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

using var codecs = new RasterCodecs();
using var image = codecs.Load(imagePath);
var engine = new BarcodeEngine();

var symbologies = new[]
{
    BarcodeSymbology.Code128,
    BarcodeSymbology.QR,
    BarcodeSymbology.DataMatrix,
    BarcodeSymbology.EAN13,
    BarcodeSymbology.UPCA
};

var barcodes = engine.Reader.ReadBarcodes(
    image,
    LogicalRectangle.Empty,
    0,
    symbologies);

return barcodes.Select(b => b.Value).ToArray();
// LEADTOOLS: codec, engine, explicit symbology list
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

using var codecs = new RasterCodecs();
using var image = codecs.Load(imagePath);
var engine = new BarcodeEngine();

var symbologies = new[]
{
    BarcodeSymbology.Code128,
    BarcodeSymbology.QR,
    BarcodeSymbology.DataMatrix,
    BarcodeSymbology.EAN13,
    BarcodeSymbology.UPCA
};

var barcodes = engine.Reader.ReadBarcodes(
    image,
    LogicalRectangle.Empty,
    0,
    symbologies);

return barcodes.Select(b => b.Value).ToArray();
Imports Leadtools
Imports Leadtools.Barcode
Imports Leadtools.Codecs

Dim barcodes As IEnumerable(Of BarcodeData)
Using codecs As New RasterCodecs()
    Using image As RasterImage = codecs.Load(imagePath)
        Dim engine As New BarcodeEngine()

        Dim symbologies As BarcodeSymbology() = {
            BarcodeSymbology.Code128,
            BarcodeSymbology.QR,
            BarcodeSymbology.DataMatrix,
            BarcodeSymbology.EAN13,
            BarcodeSymbology.UPCA
        }

        barcodes = engine.Reader.ReadBarcodes(
            image,
            LogicalRectangle.Empty,
            0,
            symbologies)
    End Using
End Using

Return barcodes.Select(Function(b) b.Value).ToArray()
$vbLabelText   $csharpLabel

IronBarcode Ansatz

IronBarcode erkennt automatisch Formate in allen über 50 unterstützten Symbologien. Der Dateipfad wird direkt übergeben; Es wird keine Bildladeschicht oder Symbolisierungsmatrix benötigt:

// IronBarcode: auto-detect, no object setup
using IronBarCode;

var results = BarcodeReader.Read(imagePath);
return results.Select(r => r.Value).ToArray();
// IronBarcode: auto-detect, no object setup
using IronBarCode;

var results = BarcodeReader.Read(imagePath);
return results.Select(r => r.Value).ToArray();
Imports IronBarCode

Dim results = BarcodeReader.Read(imagePath)
Return results.Select(Function(r) r.Value).ToArray()
$vbLabelText   $csharpLabel

Weitere Details zu Leseoptionen, der Abstimmung von Geschwindigkeit und Genauigkeit sowie dem Umgang mit schwierigen Bildern finden Sie im Leitfaden zum Lesen von Barcodes aus Bildern, der die gesamte API abdeckt.

Barcode-Erstellung

LEADTOOLS-Ansatz

Die Barcode-Generierung von LEADTOOLS erfordert das Erstellen eines BarcodeData-Objekts mit Symbolik, Wert und Grenzen — anschließend das Erstellen eines leeren RasterImage-Objekts mit expliziten Pixelabmessungen, Bittiefe, Byte-Reihenfolge und Ansichtsperspektive — anschließend das Füllen mit einem weißen Hintergrund mithilfe von FillCommand — dann den Aufruf von engine.Writer.WriteBarcode() — und schließlich das Speichern mit RasterCodecs. Das sind fünf verschiedene Operationen über mehrere Objekttypen hinweg:

// LEADTOOLS: 5 operations, 25+lines
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

var engine = new BarcodeEngine();

var barcodeData = new BarcodeData(BarcodeSymbology.Code128)
{
    Value = data,
    Bounds = new LeadRect(0, 0, 400, 100)
};

using var image = new RasterImage(
    RasterMemoryFlags.Conventional,
    400, 100, 24,
    RasterByteOrder.Bgr,
    RasterViewPerspective.TopLeft,
    null, IntPtr.Zero, 0);

new FillCommand(RasterColor.White).Run(image);
engine.Writer.WriteBarcode(image, barcodeData, null);

using var codecs = new RasterCodecs();
codecs.Save(image, outputPath, RasterImageFormat.Png, 0);
// LEADTOOLS: 5 operations, 25+lines
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

var engine = new BarcodeEngine();

var barcodeData = new BarcodeData(BarcodeSymbology.Code128)
{
    Value = data,
    Bounds = new LeadRect(0, 0, 400, 100)
};

using var image = new RasterImage(
    RasterMemoryFlags.Conventional,
    400, 100, 24,
    RasterByteOrder.Bgr,
    RasterViewPerspective.TopLeft,
    null, IntPtr.Zero, 0);

new FillCommand(RasterColor.White).Run(image);
engine.Writer.WriteBarcode(image, barcodeData, null);

using var codecs = new RasterCodecs();
codecs.Save(image, outputPath, RasterImageFormat.Png, 0);
Imports Leadtools
Imports Leadtools.Barcode
Imports Leadtools.Codecs

Dim engine As New BarcodeEngine()

Dim barcodeData As New BarcodeData(BarcodeSymbology.Code128) With {
    .Value = data,
    .Bounds = New LeadRect(0, 0, 400, 100)
}

Using image As New RasterImage(
    RasterMemoryFlags.Conventional,
    400, 100, 24,
    RasterByteOrder.Bgr,
    RasterViewPerspective.TopLeft,
    Nothing, IntPtr.Zero, 0)

    Dim fillCommand As New FillCommand(RasterColor.White)
    fillCommand.Run(image)
    engine.Writer.WriteBarcode(image, barcodeData, Nothing)

    Using codecs As New RasterCodecs()
        codecs.Save(image, outputPath, RasterImageFormat.Png, 0)
    End Using
End Using
$vbLabelText   $csharpLabel

IronBarcode Ansatz

IronBarcode übernimmt die Bilderstellung, das Ausfüllen des Hintergrunds und die Kodierung intern:

// IronBarcode: one method chain
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng(outputPath);
// IronBarcode: one method chain
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng(outputPath);
Imports IronBarcode

BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
    .ResizeTo(400, 100) _
    .SaveAsPng(outputPath)
$vbLabelText   $csharpLabel

Für die Erstellung von Barcode-Bildern bietet die IronBarcode API Styling, Ränder, Drehung und Formatkonvertierung über eine flüssige Kette anstelle einer Reihe imperativer Setup-Objekte.

API-Mapping-Referenz

LEADTOOLS BarCode IronBarcode Notizen
RasterSupport.SetLicense(path, key) IronBarCode.License.LicenseKey = "key" Nur Schlüssel – keine Datei
RasterSupport.KernelExpired (removed) Keine Ablaufprüfung erforderlich
RasterSupport.IsLocked(RasterSupportType.Barcode1DRead) (removed) Alle Funktionen enthalten
RasterSupport.IsLocked(RasterSupportType.Barcode2DRead) (removed) Alle Funktionen enthalten
RasterSupport.IsLocked(RasterSupportType.BarcodeWrite) (removed) Alle Funktionen enthalten
new BarcodeEngine() Statisch – keine Instanz BarcodeReader, BarcodeWriter sind statisch
new RasterCodecs() (removed) Dateipfad direkt übergeben
codecs.Load(imagePath) (removed) Dateipfad direkt übergeben
engine.Reader.ReadBarcodes(image, rect, 0, symbologies) BarcodeReader.Read(imagePath) Automatische Symbolerkennung
BarcodeData.Value result.Value Gleicher Eigenschaftsname
BarcodeData.Symbology result.Format Immobilie umbenannt
new BarcodeData(BarcodeSymbology.Code128) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) Flüssige Erstellung
BarcodeSymbology.Code128 BarcodeEncoding.Code128 Namensraumänderung
BarcodeSymbology.QR BarcodeEncoding.QRCode Namensänderung
BarcodeSymbology.DataMatrix BarcodeEncoding.DataMatrix Gleicher Name
BarcodeSymbology.PDF417 BarcodeEncoding.PDF417 Gleicher Name
BarcodeSymbology.EAN13 BarcodeEncoding.EAN13 Gleicher Name
BarcodeSymbology.UPCA BarcodeEncoding.UPCA Gleicher Name
engine.Writer.WriteBarcode(image, data, null) + codecs.Save(...) .SaveAsPng(path) Eine Methodenkette
new RasterImage(...) + new FillCommand(RasterColor.White).Run(image) (removed) Intern bei IronBarcode

Wenn Teams einen Wechsel von LEADTOOLS BarCodezu IronBarcode erwägen

Container- und Cloud-Bereitstellung

Teams, die Workloads in Docker-, Kubernetes- oder serverlose Umgebungen migrieren, stoßen auf das dateibasierte Lizenzierungsmodell als konkretes operatives Problem. Für jede neue Containerinstanz, jede neue Cloud-Region und jede neue Umgebung muss die Datei .LIC bereitgestellt und zugänglich sein, bevor die Anwendung gestartet werden kann. Geheimnisverwaltungssysteme, die für Geheimnisse mit Zeichenkettenwerten ausgelegt sind, können dateibasierte Artefakte nicht problemlos verarbeiten. Teams, die die Konfiguration standardmäßig über die Einbindung von Umgebungsvariablen durchführen, stellen fest, dass LEADTOOLS einen separaten Bereitstellungsschritt erfordert, der außerhalb ihres normalen Secrets-Workflows liegt. Wenn das Bereitstellungsvolumen wächst – automatische Skalierung, Blue-Green-Bereitstellung, regionsübergreifende Replikation – steigen auch die Betriebskosten für die Dateibereitstellung.

SDK-Footprint und Abhängigkeitsmanagement

Wenn das Lesen oder Generieren von Barcodes die primäre oder einzige Anforderung eines Dienstes ist, stellen die Installation von LEADTOOLS aus fünf Paketen und die Abhängigkeit von der MSVC++ 2017 Runtime einen Overhead dar, der sich auf die Größe des Container-Images, die Kaltstartlatenz in serverlosen Funktionen und die Build-Zeiten in CI/CD-Pipelines auswirkt. Teams, die leichtgewichtige Microservices oder Lambda-ähnliche Funktionen entwickeln, stellen fest, dass die Einbindung eines kompletten Imaging-SDKs zur Erfüllung einer barcodespezifischen Anforderung eine Abhängigkeitsfläche schafft, die sich in Code-Reviews und Architektur-Reviews nur schwer rechtfertigen lässt. Wenn für ein zukünftiges Plattform-Upgrade das Testen einer Änderung der nativen Laufzeitabhängigkeit erforderlich ist, fällt diese Aufgabe dem Team zu, das den Dienst betreut.

Preistransparenz

Entwicklungsteams, die ein Projekt vor Beginn der Entwicklung budgetieren müssen, können sich anhand der veröffentlichten Preisliste von LEADTOOLS kein vollständiges Kostenbild verschaffen. Die Entwicklungslizenzen kosten zwischen 1.295 und 1.469 US-Dollar pro Entwickler und Jahr, die Lizenzen für den Produktionseinsatz von Serveranwendungen werden jedoch separat über den Vertrieb angeboten. Ein Team von fünf Entwicklern, die auf drei Produktionsservern arbeiten, muss ein individuelles Angebot einholen, bevor es bestätigen kann, dass LEADTOOLS in sein Budget passt. Teams, die Beschaffungsentscheidungen lieber auf Basis veröffentlichter Preise treffen – Optionen vergleichen, interne Genehmigungen einholen oder mehrjährige Budgets planen –, stellen fest, dass dieses Modell ein Verkaufsgespräch erfordert, bevor die Bewertung abgeschlossen ist.

Anforderungen für ausschließliche Barcode-Nutzung

Anwendungen, die Barcodes lesen oder generieren müssen, ohne OCR, DICOM-Bildverarbeitung, Dokumentenannotation oder andere Funktionen der LEADTOOLS- Suite zu benötigen, zahlen für eine breitere Plattform, als ihre Anforderungen erfordern. Der Integrationswert von LEADTOOLS – die Möglichkeit, Daten zwischen den Modulen für OCR, Barcode und Dokumentenverarbeitung auszutauschen – ist real, kommt aber nur dann zum Tragen, wenn mehrere Funktionen aus dieser Suite aktiv genutzt werden. Wenn die Anforderung auf das Scannen von Barcodes in einer Web-API oder die Generierung in einer Dokumentenverarbeitungspipeline beschränkt ist, erfüllt eine spezialisierte Barcode-Bibliothek die Anforderung direkt, ohne die Last einer umfassenden Bildverarbeitungsplattform mit sich zu tragen.

Gemeinsame Überlegungen zur Migration

Ersatz für die Lizenzinitialisierung

Der gesamte Initialisierungsblock von LEADTOOLS – Dateipfad, Ablaufprüfung und Überprüfung der Sperre pro Funktion – wird durch eine einzige Zeile ersetzt. Der IronBarcode Lizenzschlüssel kann in jedem Geheimnisverwaltungssystem gespeichert werden, das Zeichenketten speichert.

// Replace the entire LEADTOOLS initialization block with:
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
// Replace the entire LEADTOOLS initialization block with:
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
' Replace the entire LEADTOOLS initialization block with:
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
$vbLabelText   $csharpLabel

Docker-Umgebungsvariablenmuster

Die Zeile COPY LEADTOOLS.LIC in jeder Dockerfile wird vollständig entfernt. Die Lizenz wird zur Laufzeit über eine Umgebungsvariable bereitgestellt, die mit allen gängigen Mechanismen zur Geheimnisinjektion kompatibel ist:

# Remove: COPY LEADTOOLS.LIC /app/license/LEADTOOLS.LIC
# Remove: ENV LEADTOOLS_LICENSE_PATH=/app/license/LEADTOOLS.LIC
# Add:
ENV IRONBARCODE_LICENSE=your-license-key

Paketabholung

Die fünf LEADTOOLS-Pakete – und der optionale PDF-Codec – werden entfernt und durch ein einziges Paket ersetzt:

dotnet remove package Leadtools.Barcode
dotnet remove package Leadtools
dotnet remove package Leadtools.Codecs
dotnet remove package Leadtools.Codecs.Png
dotnet remove package Leadtools.Codecs.Jpeg
# If added:
dotnet remove package Leadtools.Codecs.Pdf

dotnet add package IronBarcode
dotnet remove package Leadtools.Barcode
dotnet remove package Leadtools
dotnet remove package Leadtools.Codecs
dotnet remove package Leadtools.Codecs.Png
dotnet remove package Leadtools.Codecs.Jpeg
# If added:
dotnet remove package Leadtools.Codecs.Pdf

dotnet add package IronBarcode
SHELL

Zusätzliche IronBarcode Funktionen

Über die in den vorangegangenen Abschnitten beschriebenen Funktionen hinaus bietet IronBarcode die folgenden Features, die für gängige .NET -Barcode-Szenarien relevant sind:

  • PDF-Barcode-Extraktion : Lesen von Barcodes aus mehrseitigen PDF-Dokumenten mit automatischer Seitenwiederholung und PageNumber-Berichterstattung zu jedem Ergebnis – keine Seitenschleife erforderlich.
  • ML-basierte Fehlerkorrektur : Die maschinelle Lernverfahren zur Bildvorverarbeitung verbessern die Lesegenauigkeit bei beschädigten, kontrastarmen oder gedrehten Barcode-Bildern ohne zusätzliche Konfiguration.
  • Asynchrone Stapelverarbeitung : BarcodeReader.ReadAsync() unterstützt asynchrones Lesen und ermöglicht so eine Stapelverarbeitung mit hohem Durchsatz ohne Blockierung von Threads.
  • QR-Code-Logo-Branding : QRCodeWriter unterstützt das Einbetten eines Logobildes in die Mitte eines QR-Codes mit einem einzigen Methodenaufruf und nutzt die integrierte Fehlerkorrektur, um die Lesbarkeit zu gewährleisten.
  • SVG- und HTML-Ausgabe : BarcodeWriter kann generierte Barcodes zusätzlich zu Rasterbildformaten auch als skalierbare SVG-Dateien oder als Inline-HTML-Elemente ausgeben.
  • BarcodeReaderOptions Tuning : Lesegeschwindigkeit, erwartete Symbologie-Hinweise, Mehrfach-Barcode-Erkennung und Bildvorverarbeitung können pro Lesevorgang konfiguriert werden, ohne den globalen Zustand zu beeinflussen.

.NET-Kompatibilität und Zukunftsfähigkeit

IronBarcode zielt auf .NET Standard 2.0ab und bietet Kompatibilität mit .NET Framework 4.6.2 und höher, .NET 5, .NET 6, .NET 7, .NET 8 und .NET 9. Die Bibliothek hat keine plattformspezifischen nativen Laufzeitvoraussetzungen und ermöglicht so die Bereitstellung unter Windows, Linux und macOS ohne zusätzliche Bereitstellungsschritte. Mit der fortschreitenden Einführung von .NET 10 bis zum Jahr 2026 gewährleistet der regelmäßige Veröffentlichungszyklus von IronBarcode die Kompatibilität mit aktuellen und zukünftigen .NET Versionen. Das statische API-Design und das Einzelpaket-Vertriebsmodell bleiben über alle Releases hinweg stabil, sodass Versions-Upgrades keine Änderungen am Initialisierungscode der Anwendung oder an der Bereitstellungskonfiguration erfordern.

Abschluss

LEADTOOLS Barcode und IronBarcode repräsentieren unterschiedliche Punkte im Designraum für .NET -Barcode-Bibliotheken. LEADTOOLS ist ein Modul innerhalb eines 30 Jahre alten umfassenden Imaging-SDKs mit einer dateibasierten Lizenzierungsarchitektur, einer Installation aus mehreren Paketen und einem veralteten API-Design, das die technischen Normen der Ära widerspiegelt, in der es entwickelt wurde. IronBarcode ist eine speziell für modernes .NET entwickelte Barcode-Bibliothek mit einer Installation aus einem einzigen Paket, einer Lizenzierung über einen String-Schlüssel und einer statischen API, die keine Initialisierungsobjekte erfordert.

LEADTOOLS Barcode ist die richtige Wahl, wenn eine Anwendung LEADTOOLS bereits für andere Funktionen nutzt – OCR, DICOM-Bildverarbeitung, Dokumentenannotation oder Formularerkennung. In diesen Kontexten erweitert die Integration von Barcode-Funktionalität über dasselbe SDK eine bestehende Investition, ohne dass ein neuer Anbieter oder eine neue Lizenzvereinbarung erforderlich ist. Unternehmen mit bestehenden LEADTOOLS- Enterprise können Barcode-Funktionen zu geringen Grenzkosten nutzen. Für Anwendungen, die den vollen Funktionsumfang der LEADTOOLS-Bildverarbeitungsplattform benötigen, bietet die Integration über verschiedene Module hinweg einen echten Mehrwert.

IronBarcode ist die richtige Wahl, wenn das Lesen oder Generieren von Barcodes die primäre oder einzige Anforderung an einen Dienst ist, wenn die Anwendung in Containern oder Cloud-nativer Infrastruktur bereitgestellt wird oder wenn das Team vor Beginn der Entwicklung eine vorhersehbare Preisgestaltung benötigt. Das Installationsmodell mit einem einzigen Paket und das Lizenzierungsmodell mit Umgebungsvariablen entsprechen der Art und Weise, wie moderne .NET Dienste konfiguriert, bereitgestellt und skaliert werden. Die flüssige statische API reduziert den Initialisierungs- und Betriebscode, den die Barcode-Funktionalität erfordert.

Der praktische Unterschied zwischen den beiden Bibliotheken zeigt sich am deutlichsten in Einsatzszenarien. Wenn ein Team eine neue Umgebung hinzufügt, auf eine neue Cloud-Region skaliert oder eine Lizenzanmeldeinformation rotiert, verlangt IronBarcode die Aktualisierung einer Zeichenkette in einem Geheimnismanager. LEADTOOLS erfordert die Bereitstellung einer Datei. Diese Unterscheidung ist keine Kritik an der LEADTOOLS-Entwicklung, sondern beschreibt lediglich die jeweiligen Anforderungen der Architektur. Teams, die eine ehrliche Bewertung vornehmen, sollten diese Beschreibung direkt auf ihr Bereitstellungsmodell anwenden und entscheiden, welches Modell am besten passt.

Häufig gestellte Fragen

Was ist LEADTOOLS BarCode?

LEADTOOLS BarCode 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 LEADTOOLS BarCode und IronBarcode?

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

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 auch LEADTOOLS Barcode 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 LEADTOOLS BarCode?

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 LEADTOOLS?

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 LEADTOOLS BarCode 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 LEADTOOLS BarCode zu IronBarcode zu migrieren?

Bei der Migration von LEADTOOLS Barcode zu IronBarcode geht es in erster Linie darum, instanzbasierte API-Aufrufe durch die statischen Methoden von IronBarcode zu ersetzen, Lizenzierungs-Boilerplate zu entfernen und die Namen der 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.

Jordi Bardia
Software Ingenieur
Jordi ist am besten in Python, C# und C++ versiert. Wenn er nicht bei Iron Software seine Fähigkeiten einsetzt, programmiert er Spiele. Mit Verantwortung für Produkttests, Produktentwicklung und -forschung trägt Jordi mit immensem Wert zur kontinuierlichen Produktverbesserung bei. Die abwechslungsreiche Erfahrung hält ihn gefordert und engagiert, ...
Weiterlesen

Iron Support Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an