Zum Fußzeileninhalt springen
MIT ANDEREN KOMPONENTEN VERGLEICHEN

Google ML Kit Barcode Scanning vs IronBarcode: C# Barcode Bibliothek Vergleich

LEADTOOLS BarCodevs IronBarcode: Lizenzierung, Speicherbedarf und Container-Bereitstellung

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. Die Lizenzdatei ist Teil des Bereitstellungsartefakt-Sets, nicht nur eine Umgebungsvariable.

Das ist kein Vorwurf an die LEADTOOLS-Technik - es spiegelt ein dateibasiertes Lizenzmodell wider, das Container-native Bereitstellungsmuster vorwegnimmt. Aber im Jahr 2026, wenn Ihre CI/CD-Pipeline ein Container-Image erstellen und hochladen muss, betten Sie entweder eine .LIC-Datei in das Image ein oder montieren sie zur Laufzeit als Volume. So oder so benötigt Ihre Barcode-Bibliothek Dateisystemzugriff, bevor sie initialisiert wird. Das ist der zugrunde liegende Kompromiss, den dieser 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 Host vorhanden sein. Die veröffentlichte Ausgabe einer LEADTOOLS-Barcode-Anwendung ist wesentlich größer als eine Einzelpaket-Alternative.

Wichtigste architektonische Merkmale des LEADTOOLS-Barcodes:

  • Dateibasierte Lizenzarchitektur: Erfordert eine .LIC-Datei, die physisch auf der Festplatte an einem bekannten Pfad vorhanden ist, sowie einen Entwickler-Schlüsselstring. 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.
  • Mehrfachpaket-Installation: Eine Mindestinstallation, die barcodesfähig ist, erfordert Leadtools.Barcode, Leadtools, Leadtools.Codecs, Leadtools.Codecs.Png und Leadtools.Codecs.Jpeg. 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: Das Barcode-Lesen erfordert das Übergeben eines Arrays von BarcodeSymbology-Enum-Werten, die angeben, welche Formate gescannt werden sollen. Fehlende Formate werden nicht erkannt.
  • Geschichtete Initialisierungssequenz: 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-Objekt 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:

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();
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

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 .LIC-Datei fehlt, der Pfad falsch ist oder die Dateiberechtigungen fehlerhaft sind, wird die Lizenzinitialisierung fehlschlagen und sich als Ausnahme beim Start zeigen.

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 verfügbar, ohne dass Instanzbildung 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 Erfordert Symbologie-Liste Ja (über 50 Formate)
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) None
PDF-Unterstützungspaket Separate (Leadtools.Codecs.Pdf) Enthalten
Veröffentlichte Ausgabegröße Größer (mehrfaches Paket + native Abhängigkeiten) Kleiner (einzeln verpackt)
Lektüre
1D-Symboliken 25+ 30+
2D-Symboliken Ab 15 Jahren Ab 15 Jahren
Format automatisch erkennen Erfordert Symbologie-Liste Ja (über 50 Formate)
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 Instanzbasiert (Engine + Codecs) 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

LEADTOOLS-Lizenzierung erfordert eine .LIC-Datei, die physisch auf dem Dateisystem an einem bekannten Pfad vorhanden ist, sowie einen Entwickler-Schlüsselstring, der an RasterSupport.SetLicense übergeben wird. Nach dem Aufruf von SetLicense muss die Anwendung überprüfen, dass die Lizenz nicht abgelaufen ist und dass jede Barcode-Funktion einzeln freigeschaltet ist. Erst nachdem alle Prüfungen bestanden sind, kann ein BarcodeEngine-Objekt erstellt werden:

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();
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

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 .LIC-Datei muss in jeder Umgebung, in der die Anwendung läuft, bereitgestellt werden: Entwicklerrechner, CI-Build-Agents, Staging-Server und Produktionshosts.

IronBarcode Ansatz

Die Lizenzinitialisierung von IronBarcode besteht aus einer einzigen Zeile:

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode

IronBarCode.License.LicenseKey = "YOUR-LICENSE-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 Lizenz-Einrichtung und 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

LEADTOOLS-Docker-Bereitstellung erfordert das Kopieren der .LIC-Datei in das Container-Image oder das Montieren zur Laufzeit als Volume:

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 .LIC-Datei einchecken oder sie zur Build-Zeit aus einem base64-verschlüsselten Geheimnis dekodieren. Kubernetes Geheimnisse, die für Schlüssel-Wert-Zeichenfolgenpaare entwickelt wurden, müssen jetzt Dateiinhalte 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

LEADTOOLS-Lesen erfordert die Erstellung einer RasterCodecs-Instanz, um das Bild zu laden, einer BarcodeEngine-Instanz, um es zu scannen, und eines expliziten Arrays von BarcodeSymbology-Werten, das angibt, nach welchen Formaten gesucht werden soll. Wird eine Symbologie aus dem Array weggelassen, erkennt LEADTOOLS Barcodes dieses Typs nicht:

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();
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 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:

using IronBarCode;

var results = BarcodeReader.Read(imagePath);
return results.Select(r => r.Value).ToArray();
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 Barcodeerzeugung von LEADTOOLS erfordert die Erstellung eines BarcodeData-Objekts mit Symbologie, Wert und Begrenzungen - dann die Erstellung einer leeren RasterImage mit expliziten Pixeldimensionen, Farbtiefe, Byte-Reihenfolge und Blickwinkel - dann Füllen mit einem weißen Hintergrund mit FillCommand - dann Aufrufen von engine.Writer.WriteBarcode() - dann Speichern mit RasterCodecs. Das sind fünf verschiedene Operationen über mehrere Objekttypen hinweg:

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);
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:

BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng(outputPath);
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng(outputPath);
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. Jede neue Containerinstanz, jede neue Cloud-Region und jede neue Umgebung muss die .LIC-Datei bereitgestellt und zugänglich haben, bevor die Anwendung starten wird. 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. Entwicklungslizenzen beginnen bei etwa 1.469 USD pro Entwickler pro Jahr, aber Lizenzkosten für die Produktion von Serveranwendungen werden gesondert ü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 COPY LEADTOOLS.LIC-Zeile 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 BarCode
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 BarCode
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 Extraction: Lesen Sie Barcodes aus mehrseitigen PDF-Dokumenten mit automatischer Seiteniteration und PageNumber-Berichterstattung für jedes Ergebnis - keine Seiten-Schleife 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 Batch-Verarbeitung: BarcodeReader.ReadAsync() unterstützt asynchrones Lesen, was eine hochdurchsatzfähige Batch-Verarbeitung ermöglicht, ohne Threads zu blockieren.
  • QR-Code-Logo-Branding: QRCodeWriter unterstützt das Einbetten eines Logobildes in der Mitte eines QR-Codes mit einem einzigen Methodenaufruf und verwendet eingebaute Fehlerkorrektur, um die Scannbarkeit beizubehalten.
  • SVG und HTML Output: BarcodeWriter kann generierte Barcodes als skalierbare SVG-Dateien oder als Inline-HTML-Elemente ausgeben, zusätzlich zu Rasterbildformaten.
  • 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 for .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 for .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.

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