Zum Fußzeileninhalt springen
MIT ANDEREN KOMPONENTEN VERGLEICHEN

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

NetBarcodevs IronBarcode: Vergleich der rein 1D-Generierung mit einem vollständigen Barcode-Toolkit

NetBarcode's Type-Aufzählung hat keinen QR-Code-Eintrag. Wenn bei einem Versandetikettenprojekt im dritten Monat zusätzlich ein QR-Code benötigt wird, greifen die Entwickler auf eine zweite Bibliothek zurück. Diese zweite Bibliothek bringt ihre eigene API-Oberfläche, ihren eigenen Veröffentlichungsplan und eine gemeinsame SixLabors.ImageSharp-Abhängigkeit mit, deren Version möglicherweise nicht mehr mit der von NetBarcodebenötigten Version übereinstimmt. Dieser Vergleich untersucht, was NetBarcodeist, wo es gut passt und wo IronBarcode die Lücken schließt, ohne ein zweites oder drittes Paket hinzuzufügen.

NetBarcodeverstehen

NetBarcode ist eine Open-Source-Barcode-Generierungsbibliothek für .NET , die unter der MIT-Lizenz veröffentlicht wurde. Es wurde entwickelt, um aus Zeichenkettendaten lineare Barcode-Bilder zu erzeugen, und erfüllt diesen Zweck einwandfrei. Die Bibliothek zielt auf Code128, EAN-13, Code39 und eine Handvoll anderer 1D-Formate ab — alle durch einen einfachen Konstruktor und eine kleine Reihe von Ausgabe-Methoden zugänglich. Die Abhängigkeit von SixLabors.ImageSharp bietet die Bildebene, und seit Version 1.8 spiegelt sich diese Abhängigkeit in der öffentlichen API durch den Image<Rgba32>-Rückgabetyp auf GetImage() wider.

NetBarcode versteht sich nicht als universelles Barcode-Toolkit. Es besitzt keine Lesefunktion und unterstützt keine 2D-Formate. Dies sind bewusste Entscheidungen hinsichtlich des Projektumfangs. Die Bibliothek eignet sich hervorragend für Anwendungen, die lediglich 1D-Barcodes benötigen, und dank ihrer MIT-Lizenz lässt sie sich problemlos in Open-Source-Kontexten einsetzen.

Wichtigste architektonische Merkmale:

MIT-Lizenz: Die Bibliothek selbst ist unter der MIT-Lizenz lizenziert, ihre Abhängigkeit SixLabors.ImageSharp unterliegt jedoch einer geteilten kommerziellen Lizenz, die ab einer bestimmten Umsatzschwelle gilt.

  • 1D-Only-Design: Die Type-Aufzählung definiert 11 Werte über 8 lineare Symbologie-Familien; es gibt keine 2D-Einträge sowie keine UPC-A, UPC-E, ITF oder MSI Einträge
  • SixLabors.ImageSharp-Abhängigkeit: Bildrendering wird an ImageSharp delegiert, und seit v1.8 gibt die GetImage()-Methode Image<Rgba32> zurück und exponiert den ImageSharp-Typ direkt in der öffentlichen API
  • Konstruktorbasierte API: Barcodes werden mit new Barcode(data, Type.X) erstellt und mit SaveImageFile() oder GetImage() gespeichert oder abgerufen
  • Keine Lese-API: NetBarcodedient nur der Generierung; es gibt keine Methode oder Klasse für die Dekodierung von BarCode-Bildern
  • Keine Stapelverarbeitung: Jeder Barcode ist ein unabhängiger Konstruktoraufruf; no built-in enumeration or batch pipeline

Die Entwurfsgrenze des Typ-Enums

Die Type-Aufzählung ist die autoritative Liste dessen, was NetBarcodegenerieren kann. Eine genauere Betrachtung offenbart den Umfang der Bibliothek:

// NetBarcodeType enum — complete list as of v1.8
public enum Type
{
    Codabar,
    Code11,
    Code128,
    Code128A,
    Code128B,
    Code128C,
    Code39,
    Code39E,
    Code93,
    EAN13,
    EAN8
}

// These entries do not exist — attempting to use them produces a CS0117 compile error:
// Type.QRCode      — does not exist
// Type.DataMatrix  — does not exist
// Type.PDF417      — does not exist
// Type.Aztec       — does not exist
// Type.UPCA        — does not exist
// Type.UPCE        — does not exist
// Type.ITF         — does not exist
// Type.MSI         — does not exist
// NetBarcodeType enum — complete list as of v1.8
public enum Type
{
    Codabar,
    Code11,
    Code128,
    Code128A,
    Code128B,
    Code128C,
    Code39,
    Code39E,
    Code93,
    EAN13,
    EAN8
}

// These entries do not exist — attempting to use them produces a CS0117 compile error:
// Type.QRCode      — does not exist
// Type.DataMatrix  — does not exist
// Type.PDF417      — does not exist
// Type.Aztec       — does not exist
// Type.UPCA        — does not exist
// Type.UPCE        — does not exist
// Type.ITF         — does not exist
// Type.MSI         — does not exist
' NetBarcodeType enum — complete list as of v1.8
Public Enum Type
    Codabar
    Code11
    Code128
    Code128A
    Code128B
    Code128C
    Code39
    Code39E
    Code93
    EAN13
    EAN8
End Enum

' These entries do not exist — attempting to use them produces a BC30456 compile error:
' Type.QRCode      — does not exist
' Type.DataMatrix  — does not exist
' Type.PDF417      — does not exist
' Type.Aztec       — does not exist
' Type.UPCA        — does not exist
' Type.UPCE        — does not exist
' Type.ITF         — does not exist
' Type.MSI         — does not exist
$vbLabelText   $csharpLabel

Das Enum hat elf Einträge in acht linearen Symbologiefamilien, und das spiegelt den intendierten Umfang der Bibliothek wider. Jede Anwendung, die QR-Codes, DataMatrix, PDF417, Aztec, UPC-A, UPC-E, ITF oder MSI benötigt, muss ein separates Paket erwerben, um diese Formate bereitzustellen.

IronBarcode verstehen

IronBarcode ist eine kommerzielle .NET Barcode-Bibliothek, die sowohl die Generierung als auch das Lesen in einem einzigen Paket abdeckt. Es wird von Iron Software entwickelt und gepflegt und regelmäßig mit Updates für aktuelle .NET Versionen aktualisiert. Die statische API-Oberfläche der Bibliothek ist so gestaltet, dass der Wechsel von einem Barcode-Format zu einem anderen nur das Ändern einer einzigen Konstante erfordert – der gleiche BarcodeWriter.CreateBarcode-Aufruf, der Code128 generiert, erzeugt auch QR-Codes, DataMatrix, PDF417und Aztec.

IronBarcode verarbeitet das Lesen von Barcodes über die BarcodeReader-Klasse, die Bilddateien und PDF-Dokumente akzeptiert und dekodierte Ergebnisse mit Formatidentifikation zurückgibt. Dies bedeutet, dass Generierung und Lesen eine einzige Abhängigkeit, eine einzige Lizenz und einen einzigen Satz von Versionshinweisen gemeinsam haben.

Hauptmerkmale:

  • Vereinigte Erstellung und Lesevorgang: Sowohl BarcodeWriter als auch BarcodeReader sind in einem einzelnen NuGet-Paket enthalten
  • Mehr als 50 unterstützte Formate: 1D-Formate umfassen alle NetBarcode-Äquivalente; Zu den 2D-Formaten gehören QR-Code, DataMatrix, PDF417, aztekisch und andere.
  • Fließende Ketten-API: BarcodeWriter.CreateBarcode(data, encoding) gibt ein GeneratedBarcode-Objekt mit Ausgabemethoden zurück, einschließlich SaveAsPng(), SaveAsJpeg(), ToPngBinaryData() und stream-basierter Überladungen
  • Keine Abhängigkeit von ImageSharp: Die Bildwiedergabe von IronBarcode ist in sich abgeschlossen; Es wird keine transitive Abhängigkeit von SixLabors eingeführt.
  • PDF-Unterstützung: Die Lese-API akzeptiert direkt .pdf-Dateien zusätzlich zu Bildformaten
  • Kommerzielle Lizenz: Ein Lizenzschlüssel ist erforderlich; der Testmodus ist verfügbar und entfernt beim Kauf die Wasserzeichen

Funktionsvergleich

Feature NetBarcode IronBarcode
1D-Barcode-Generierung Ja Ja
2D-Barcode-Generierung Nein Ja
Barcode-Lesung Nein Ja
PDF-Unterstützung Nein Ja
Gesamtsymboliken 11 Enum-Werte / 8 Familien 50+
ImageSharp-Abhängigkeit Ja (geteilte Lizenz) Nein
Lizenzmodell MIT (+ ImageSharp-Bedingungen) Kommerziell

Detaillierter Funktionsvergleich

Feature NetBarcode IronBarcode
Generation
Code128 (plus 128A/B/C), Code39, Code39 Extended, Code93, Code11 Ja Ja
EAN-13, EAN-8, Codabar Ja Ja
UPC-A, UPC-E, ITF, MSI Nein Ja
QR-Code Nein Ja
DataMatrix Nein Ja
PDF417 Nein Ja
aztekisch Nein Ja
GS1-128, GS1 DataBar Nein Ja
Postformate (Intelligent Mail, Royal Mail) Nein Ja
SVG-Ausgabe Nein Ja
Lektüre
Barcode-Bilder dekodieren Nein Ja
Lesen Sie PDF-Dokumente Nein Ja
Mehrfach-Barcode-Erkennung Nein Ja
Automatische Formaterkennung Nein Ja
API-Entwurf
Konstruktorbasierte Erstellung Ja Nein (statische Methode)
Fluent-Ausgabekette Nein Ja
Unterstützung für Stapelverarbeitung Handbuch Eingebaut
Lizenzierung und Abhängigkeiten
Bibliothekslizenz MIT Kommerziell
ImageSharp-Abhängigkeit Ja Nein
Kommerzielle Unterstützung Gemeinschaft Professionell

Formatabdeckung

NetBarcode-Ansatz

NetBarcode bietet 11 lineare Barcode-Aufzählungswerte über 8 Symbologie-Familien durch die Type-Aufzählung. Innerhalb dieses Rahmens ist die Formatauswahl unkompliziert – man übergibt dem Konstruktor das entsprechende Enum-Element. Die Grenze ist ebenso klar: Der Versuch, ein Format außerhalb des Enums zu verwenden, führt zu einem Kompilierfehler.

// NetBarcode— formats that compile and produce output
using NetBarcode;

var code128 = new Barcode("12345678901234", Type.Code128);
code128.SaveImageFile("shipping.png");

var ean13 = new Barcode("5901234123457", Type.EAN13);
ean13.SaveImageFile("product.png");

// NetBarcode— formats that produce CS0117 compile errors
// var qr     = new Barcode("data", Type.QRCode);     // error CS0117
// var dm     = new Barcode("data", Type.DataMatrix);  // error CS0117
// var p417   = new Barcode("data", Type.PDF417);      // error CS0117
// var aztec  = new Barcode("data", Type.Aztec);       // error CS0117
// var upca   = new Barcode("data", Type.UPCA);        // error CS0117
// var itf    = new Barcode("data", Type.ITF);         // error CS0117
// NetBarcode— formats that compile and produce output
using NetBarcode;

var code128 = new Barcode("12345678901234", Type.Code128);
code128.SaveImageFile("shipping.png");

var ean13 = new Barcode("5901234123457", Type.EAN13);
ean13.SaveImageFile("product.png");

// NetBarcode— formats that produce CS0117 compile errors
// var qr     = new Barcode("data", Type.QRCode);     // error CS0117
// var dm     = new Barcode("data", Type.DataMatrix);  // error CS0117
// var p417   = new Barcode("data", Type.PDF417);      // error CS0117
// var aztec  = new Barcode("data", Type.Aztec);       // error CS0117
// var upca   = new Barcode("data", Type.UPCA);        // error CS0117
// var itf    = new Barcode("data", Type.ITF);         // error CS0117
Imports NetBarcode

Dim code128 As New Barcode("12345678901234", Type.Code128)
code128.SaveImageFile("shipping.png")

Dim ean13 As New Barcode("5901234123457", Type.EAN13)
ean13.SaveImageFile("product.png")

' NetBarcode— formats that produce CS0117 compile errors
' Dim qr As New Barcode("data", Type.QRCode)     ' error CS0117
' Dim dm As New Barcode("data", Type.DataMatrix) ' error CS0117
' Dim p417 As New Barcode("data", Type.PDF417)   ' error CS0117
' Dim aztec As New Barcode("data", Type.Aztec)   ' error CS0117
' Dim upca As New Barcode("data", Type.UPCA)     ' error CS0117
' Dim itf As New Barcode("data", Type.ITF)       ' error CS0117
$vbLabelText   $csharpLabel

Branchen, in denen diese Grenze zu einer Einschränkung wird, sind beispielsweise die pharmazeutische Rückverfolgung (DataMatrix ist gemäß den FDA-Vorgaben für 2D-Barcodes erforderlich), Bordkarten von Fluggesellschaften (Aztec), Logistikmanifeste (PDF417) und mobiles Marketing (QR-Code). Jede dieser Anforderungen schließt NetBarcodeals eigenständige Lösung aus.

IronBarcode Ansatz

IronBarcode macht alle unterstützten Formate über die gleiche BarcodeWriter.CreateBarcode-Methode zugänglich. Die API-Oberfläche ändert sich nicht beim Wechsel von einem 1D- zu einem 2D-Format – nur die BarcodeEncoding-Konstante unterscheidet sich.

using IronBarCode;

// 1D formats — identical API to the 2D examples below
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
    .SaveAsPng("shipping.png");

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .SaveAsPng("product.png");

// 2D formats — same method, different encoding constant
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsPng("qr.png");

BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix)
    .SaveAsPng("pharma-label.png");

BarcodeWriter.CreateBarcode("M1DOE/JOHN MR ABC123 JFKLHR 0012 123Y015A0001 100", BarcodeEncoding.Aztec)
    .SaveAsPng("boarding-pass.png");
using IronBarCode;

// 1D formats — identical API to the 2D examples below
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
    .SaveAsPng("shipping.png");

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .SaveAsPng("product.png");

// 2D formats — same method, different encoding constant
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsPng("qr.png");

BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix)
    .SaveAsPng("pharma-label.png");

BarcodeWriter.CreateBarcode("M1DOE/JOHN MR ABC123 JFKLHR 0012 123Y015A0001 100", BarcodeEncoding.Aztec)
    .SaveAsPng("boarding-pass.png");
Imports IronBarCode

' 1D formats — identical API to the 2D examples below
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128) _
    .SaveAsPng("shipping.png")

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13) _
    .SaveAsPng("product.png")

' 2D formats — same method, different encoding constant
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
    .SaveAsPng("qr.png")

BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix) _
    .SaveAsPng("pharma-label.png")

BarcodeWriter.CreateBarcode("M1DOE/JOHN MR ABC123 JFKLHR 0012 123Y015A0001 100", BarcodeEncoding.Aztec) _
    .SaveAsPng("boarding-pass.png")
$vbLabelText   $csharpLabel

Die vollständige Liste der unterstützten Konstanten finden Sie in der Referenz der unterstützten Barcode-Formate . Diese umfasst alle 2D-Barcode-Generierungsformate sowie den kompletten 1D-Satz.

API-Generierung

NetBarcode-Ansatz

Das Generierungsmodell von NetBarcodebasiert auf dem Konstruktor. Ein Barcode-Objekt wird mit dem Datenstring und einem Type-Aufzählungswert instanziiert. Die Ausgabe wird entweder direkt mit SaveImageFile() gespeichert oder als Image<Rgba32> über GetImage() abgerufen. Seit Version 1.8 ist der Rückgabetyp von GetImage() der SixLabors.ImageSharp-Typ, was bedeutet, dass jeder Code, der den Rückgabewert speichert oder verarbeitet, die ImageSharp-API importieren und innerhalb dieser arbeiten muss.

using NetBarcode;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;

// Constructor-based creation
var barcode = new Barcode("12345678901234", Type.Code128);

// Save to file — straightforward
barcode.SaveImageFile("code128.png");

// GetImage() returns Image<Rgba32> — ImageSharp import required
Image<Rgba32> image = barcode.GetImage();

// Further processing requires familiarity with the ImageSharp API
using var stream = new MemoryStream();
image.SaveAsPng(stream);
byte[] bytes = stream.ToArray();
using NetBarcode;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;

// Constructor-based creation
var barcode = new Barcode("12345678901234", Type.Code128);

// Save to file — straightforward
barcode.SaveImageFile("code128.png");

// GetImage() returns Image<Rgba32> — ImageSharp import required
Image<Rgba32> image = barcode.GetImage();

// Further processing requires familiarity with the ImageSharp API
using var stream = new MemoryStream();
image.SaveAsPng(stream);
byte[] bytes = stream.ToArray();
Imports NetBarcode
Imports SixLabors.ImageSharp
Imports SixLabors.ImageSharp.PixelFormats
Imports System.IO

' Constructor-based creation
Dim barcode As New Barcode("12345678901234", Type.Code128)

' Save to file — straightforward
barcode.SaveImageFile("code128.png")

' GetImage() returns Image(Of Rgba32) — ImageSharp import required
Dim image As Image(Of Rgba32) = barcode.GetImage()

' Further processing requires familiarity with the ImageSharp API
Using stream As New MemoryStream()
    image.SaveAsPng(stream)
    Dim bytes As Byte() = stream.ToArray()
End Using
$vbLabelText   $csharpLabel

Der Rückgabetyp der GetImage()-Methode bindet nachfolgenden Code an die ImageSharp-Bibliothek. Jede Methode, die das Ergebnis akzeptiert oder speichert, muss es als Image<Rgba32> deklarieren und eine transitive Abhängigkeit in den aufrufenden Code einführen.

IronBarcode Ansatz

IronBarcode verwendet eine flüssige Kette. BarcodeWriter.CreateBarcode gibt ein GeneratedBarcode-Objekt zurück, das mehrere Ausgabemethoden enthält. Die Bildverarbeitung erfolgt intern – dem aufrufenden Code wird kein ImageSharp-Typ zugänglich gemacht.

using IronBarCode;

// Fluent generation — save directly to file
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
    .SaveAsPng("code128.png");

// Multiple output options on the same GeneratedBarcode object
var barcode = BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128);
barcode.SaveAsPng("code128.png");
barcode.SaveAsJpeg("code128.jpg");
byte[] bytes = barcode.ToPngBinaryData();

using var stream = new MemoryStream();
barcode.SaveAsPng(stream);
using IronBarCode;

// Fluent generation — save directly to file
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
    .SaveAsPng("code128.png");

// Multiple output options on the same GeneratedBarcode object
var barcode = BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128);
barcode.SaveAsPng("code128.png");
barcode.SaveAsJpeg("code128.jpg");
byte[] bytes = barcode.ToPngBinaryData();

using var stream = new MemoryStream();
barcode.SaveAsPng(stream);
Imports IronBarCode

' Fluent generation — save directly to file
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128) _
    .SaveAsPng("code128.png")

' Multiple output options on the same GeneratedBarcode object
Dim barcode = BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
barcode.SaveAsPng("code128.png")
barcode.SaveAsJpeg("code128.jpg")
Dim bytes As Byte() = barcode.ToPngBinaryData()

Using stream As New MemoryStream()
    barcode.SaveAsPng(stream)
End Using
$vbLabelText   $csharpLabel

Detaillierte Optionen zur Generierung von 1D-Barcodes, einschließlich Breite, Höhe und Etikettenkonfiguration, werden in der IronBarcode Dokumentation beschrieben.

Lesefähigkeit

NetBarcode-Ansatz

NetBarcode verfügt über keine Lese-API. Es gibt keine Methode, Klasse oder Konfiguration, die ein Barcode-Bild wieder in seine Datenzeichenfolge dekodiert. Dies ist eine bewusste Abgrenzung des Geltungsbereichs, keine Auslassung bis zur Veröffentlichung. Ein Projekt, das mit NetBarcodeBarcodes generiert und diese später lesen muss – beispielsweise um ein gedrucktes Etikett zu validieren, eine Retoure zu scannen oder Werte aus einer Lieferantenrechnung zu extrahieren –, muss zu diesem Zweck eine separate Bibliothek einführen.

// NetBarcode— no reading method exists
// The following does not compile because the method does not exist:
// var result = barcode.Read("image.png");  // method does not exist

// The typical workaround requires ZXing.Net as a third-party dependency
// NetBarcode— no reading method exists
// The following does not compile because the method does not exist:
// var result = barcode.Read("image.png");  // method does not exist

// The typical workaround requires ZXing.Net as a third-party dependency
' NetBarcode— no reading method exists
' The following does not compile because the method does not exist:
' Dim result = barcode.Read("image.png")  ' method does not exist

' The typical workaround requires ZXing.Net as a third-party dependency
$vbLabelText   $csharpLabel

Die ZXing .NET -Bibliothek ist die am häufigsten verwendete Ergänzung zum Lesen von QR-Codes zusammen mit NetBarcode. Sie bietet eine dritte API-Oberfläche und ein drittes Paket, das neben NetBarcodeund bereits hinzugefügten 2D-Bibliotheken für QR-Codes versioniert werden muss.

IronBarcode Ansatz

IronBarcode enthält BarcodeReader im gleichen Paket wie BarcodeWriter. Die Lese-API akzeptiert Bilddateien und PDF-Dokumente und gibt eine Sammlung dekodierter Ergebnisse zurück, die jeweils den Barcode-Wert, den Formattyp und, falls aus einer PDF-Datei gelesen, die Seitenzahl enthalten.

using IronBarCode;

// Read barcodes from an image file
var imageResults = BarcodeReader.Read("shipping-label.png");
foreach (var r in imageResults)
{
    Console.WriteLine($"{r.Format}: {r.Value}");
}

// Read barcodes from a PDF document — no additional library required
var pdfResults = BarcodeReader.Read("invoice.pdf");
foreach (var r in pdfResults)
{
    Console.WriteLine($"Page {r.PageNumber}: {r.Value}");
}
using IronBarCode;

// Read barcodes from an image file
var imageResults = BarcodeReader.Read("shipping-label.png");
foreach (var r in imageResults)
{
    Console.WriteLine($"{r.Format}: {r.Value}");
}

// Read barcodes from a PDF document — no additional library required
var pdfResults = BarcodeReader.Read("invoice.pdf");
foreach (var r in pdfResults)
{
    Console.WriteLine($"Page {r.PageNumber}: {r.Value}");
}
Imports IronBarCode

' Read barcodes from an image file
Dim imageResults = BarcodeReader.Read("shipping-label.png")
For Each r In imageResults
    Console.WriteLine($"{r.Format}: {r.Value}")
Next

' Read barcodes from a PDF document — no additional library required
Dim pdfResults = BarcodeReader.Read("invoice.pdf")
For Each r In pdfResults
    Console.WriteLine($"Page {r.PageNumber}: {r.Value}")
Next
$vbLabelText   $csharpLabel

Der Leitfaden zum Lesen von Barcodes aus Bildern behandelt die Geschwindigkeitsoptimierung, die Erkennung mehrerer Barcodes und die in der Lese-API verfügbaren Bildkorrekturoptionen.

Abhängigkeits- und Lizenzierungsüberlegungen

NetBarcodeund ImageSharp

NetBarcode ist unter der MIT-Lizenz veröffentlicht. Die Bibliothek SixLabors.ImageSharp, von der sie abhängt, verwendet ein anderes Modell: kostenlos für Open-Source-Projekte und für Unternehmen mit einem jährlichen Bruttoumsatz unterhalb einer definierten Schwelle, aber oberhalb dieser Schwelle ist eine kommerzielle Lizenz erforderlich. Diese Aufteilung gilt unabhängig davon, ob ImageSharp explizit im .csproj eines Projekts aufgeführt ist oder transitiv durch NetBarcodeankommt.


<PackageReference Include="NetBarcode" Version="1.8.3" />

<PackageReference Include="NetBarcode" Version="1.8.3" />
XML

Für ein Einzelhandels- oder Logistikunternehmen, das Barcodes in großem Umfang verarbeitet – der primäre Anwendungsfall von NetBarcode–, liegt der Jahresumsatz oft über der Schwelle, ab der die kommerzielle ImageSharp-Lizenz gilt. Eine Compliance-Prüfung kann diese im Paketbaum eingebettete Verpflichtung aufdecken.

Die Veröffentlichung von v1.8 führte zu einer zusätzlichen Konsequenz der ImageSharp-Abhängigkeit: Der Rückgabetyp von GetImage() änderte sich von einer internen Darstellung zu SixLabors.ImageSharp.Image<Rgba32>. Vorhandener Code, der GetImage() ohne explizite Typisierung aufrief, brach zur Kompilierzeit, und neue using-Direktiven für SixLabors.ImageSharp und SixLabors.ImageSharp.PixelFormats wurden erforderlich. Wenn sich die API von ImageSharp in zukünftigen Versionen weiterentwickelt, wird dies wiederum die öffentliche API-Oberfläche von NetBarcodebeeinflussen.

IronBarcode

IronBarcode hat keine Abhängigkeit von SixLabors.ImageSharp. Die Lizenzbedingungen sind direkt auf derIronBarcode -Lizenzseite angegeben, ohne Aufteilung der Schwellenwerte oder transitive kommerzielle Verpflichtungen. Zur Evaluierung steht ein Testschlüssel zur Verfügung; Mit den erworbenen Lizenzen wird das Testwasserzeichen aus der generierten Ausgabe entfernt.

API-Mapping-Referenz

NetBarcode IronBarcode Notizen
new Barcode(data, Type.Code128) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) Konstruktor → statische Methode
new Barcode(data, Type.Code128A/B/C) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) IronBarcode wählt Teilmengen automatisch aus
new Barcode(data, Type.EAN13) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.EAN13) Direktes Mapping
new Barcode(data, Type.EAN8) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.EAN8) Direktes Mapping
new Barcode(data, Type.Code39) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code39) Direktes Mapping
new Barcode(data, Type.Code39E) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code39Extended) Direktes Mapping
new Barcode(data, Type.Code93) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code93) Direktes Mapping
new Barcode(data, Type.Code11) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code11) Direktes Mapping
new Barcode(data, Type.Codabar) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Codabar) Direktes Mapping
barcode.SaveImageFile("x.png") .SaveAsPng("x.png") Methodenumbenennung
barcode.SaveImageFile("x.jpg") .SaveAsJpeg("x.jpg") Methodenumbenennung
barcode.GetImage()Image<Rgba32> .ToPngBinaryData() oder .SaveAsPng() Kein ImageSharp-Typ verfügbar
Kein Type.UPCA / UPCE / ITF / MSI BarcodeEncoding.UPCA / UPCE / ITF / MSI Neue Fähigkeit
Kein Type.QRCode BarcodeEncoding.QRCode Neue Fähigkeit
Kein Type.DataMatrix BarcodeEncoding.DataMatrix Neue Fähigkeit
Kein Type.PDF417 BarcodeEncoding.PDF417 Neue Fähigkeit
Kein Type.Aztec BarcodeEncoding.Aztec Neue Fähigkeit
Keine Lese-API BarcodeReader.Read(path) Neue Fähigkeit
using NetBarcode; using IronBarCode; Namespace-Ersetzung
using SixLabors.ImageSharp; Entfernen Nicht mehr benötigt

Die vollständige Formatreferenz finden Sie in der Dokumentation zu den unterstützten Barcode-Formaten .

Wenn Teams einen Wechsel von NetBarcodezu IronBarcode erwägen

Anforderungen an QR-Code und 2D-Format

Der häufigste Anlass für die Prüfung einer Alternative zu NetBarcodeist eine neue Anforderung an QR-Codes. Anwendungen, die mit der Generierung von 1D-Barcodes für Einzelhandelsetiketten oder Versandmanifeste beginnen, erhalten häufig im Anschluss die Anforderung von QR-Codes – kontaktlose Links, Deep Links für mobile Apps, Marketingkampagnen. Weil die Type-Aufzählung keinen QR-Eintrag hat, kann diese Anforderung innerhalb von NetBarcodenicht erfüllt werden. Teams, die eine separate QR-Bibliothek hinzufügen, um die Lücke zu schließen, stehen dann vor einer zweiten Bewertung, wenn DataMatrixfür eine pharmazeutische Integration benötigt wird oder PDF417für einen Logistikdienstleister, der es auf Versandetiketten vorschreibt.

Barcode-Lesen wird notwendig

Manche Projekte beginnen mit der reinen Generierung und fügen später eine Validierungs- oder Dokumentenverarbeitungsanforderung hinzu: Bestätigung, dass ein gedruckter Barcode mit seinen Quelldaten übereinstimmt, Extrahieren von Barcode-Werten aus eingehenden Lieferantenrechnungen oder Scannen von Rücksendeetiketten. NetBarcodebietet hierfür keine Möglichkeit. Die Hinzunahme von ZXing .NET oder einer vergleichbaren Lesebibliothek führt zu einer dritten API, die in derselben Codebasis, die bereits NetBarcodeund eine QR-Bibliothek enthält, erlernt und gepflegt werden muss. Bei Projekten, die Leseanforderungen auch in einer späteren Phase berücksichtigen, ist es oft effizienter, von Anfang an eine Bibliothek auszuwählen, die beide Anforderungen erfüllt.

ImageSharp-Kommerzlizenzprüfung

Bei rechtlichen und Compliance-Prüfungen von Drittanbieterabhängigkeiten wird gelegentlich die im NetBarcode-Paketbaum eingebettete kommerzielle Lizenzbedingung von SixLabors.ImageSharp aufgedeckt. Für Unternehmen, deren jährlicher Bruttoumsatz die Schwelle überschreitet, gilt die Verpflichtung unabhängig davon, ob ImageSharp bewusst ausgewählt wurde oder passiv über NetBarcodedazugekommen ist. Teams, die dies erst im Rahmen eines Audits – und nicht vor der Einführung – feststellen, müssen nachträglich Abhilfe schaffen, anstatt eine geplante Migration durchführen zu können. Die Lizenz der Abhängigkeiten vor Beginn eines Projekts zu prüfen, ist der sauberere Weg.

Reduzierung der Komplexität mehrerer Bibliotheken

Teams, die NetBarcodefür die 1D-Generierung, eine QR-spezifische Bibliothek für die 2D-Ausgabe und ZXing .NET zum Lesen angesammelt haben, sehen sich mit der Herausforderung konfrontiert, die Versionskompatibilität über drei separate Pakete hinweg aufrechtzuerhalten. Bei jedem Upgrade-Zyklus muss geprüft werden, ob die drei Bibliotheken in ihrer gemeinsamen ImageSharp-Version übereinstimmen. Jeder neue Entwickler im Projekt sieht sich mit drei verschiedenen APIs für ein und dasselbe konzeptionelle Anliegen konfrontiert. Die Konsolidierung auf eine einzige Barcode-Bibliothek vereinfacht das Onboarding, reduziert die Angriffsfläche für Versionskonflikte und konzentriert die Wartung auf einen einzigen Release-Zyklus.

Gemeinsame Überlegungen zur Migration

Pakettausch und Bereinigung transitiver Abhängigkeiten

Das Entfernen von NetBarcodemit dotnet remove package NetBarcode ist der erste Schritt. Das SixLabors.ImageSharp-Paket kann in der Abhängigkeitskette wieder auftauchen, wenn andere Pakete im Projekt es auch transitiv ziehen. Nach der Entfernung inspizieren Sie die wiederhergestellte Paketliste mit dotnet list package --include-transitive, um zu bestätigen, ob ImageSharp noch vorhanden ist und ob seine kommerzielle Lizenzbedingung noch gilt.

Ersetzung des Rückgabetyps von GetImage()

Jeder Code, der das Ergebnis von GetImage() als Image<Rgba32> gespeichert hat, muss aktualisiert werden. Der ImageSharp-Typ hat kein direktes Äquivalent in IronBarcode; Der Ersatz hängt davon ab, wie das Bild weiterverwendet wurde. Code, der das Bild in einem Stream gespeichert hat, kann durch .SaveAsPng(stream) direkt auf dem GeneratedBarcode-Objekt ersetzt werden. Code, der rohe Bytes abgerufen hat, kann .ToPngBinaryData() verwenden. Code, der weitere ImageSharp-Manipulationen am zurückgegebenen Bild vornimmt, erfordert, dass diese Operationen einzeln ausgewertet werden.

Namespace-Aktualisierung

Dateien, die using NetBarcode;, using SixLabors.ImageSharp;, using SixLabors.ImageSharp.PixelFormats; oder using SixLabors.Fonts; importierten, benötigen, dass diese Direktiven mit using IronBarCode; ersetzt werden. Eine projektweite Suche nach diesen using-Anweisungen identifiziert jede Datei, die vor dem Build-Versuch Aufmerksamkeit erfordert.

Zusätzliche IronBarcode Funktionen

Über die in diesem Vergleich behandelten Kernfunktionen zur Barcode-Erstellung und -Lesung hinaus bietet IronBarcode Folgendes:

  • SVG-Barcode-Ausgabe : Generierung von Barcode-Bildern im Vektorformat, geeignet für Druckprozesse und skalierbare Etikettendesigns
  • Barcode-Styling : Konfigurieren Sie Balkenfarbe, Hintergrundfarbe, Schriftart für Anmerkungen, Rand und Drehung der generierten Barcodes. GS1-128 und GS1 DataBar : Barcodes mit anwendungsbezogener Kennung für die Einhaltung von Vorschriften im Einzelhandel und in der Lieferkette
  • Postformate : Intelligent Mail, Royal Mail und andere Postsymboliken für Mailing-Anwendungen
  • PDF-Barcode-Extraktion : Lesen Sie Barcodes direkt aus mehrseitigen PDF-Dokumenten ohne separate PDF-Bibliothek.
  • Stapelverarbeitung : Effiziente Verarbeitung von Barcode-Datensätzen innerhalb einer einzigen Pipeline
  • MAUI- und mobile Zielplattformen : IronBarcode unterstützt .NET MAUI Anwendungen für plattformübergreifende Barcode-Workflows auf Mobilgeräten und Desktop-Computern.

.NET-Kompatibilität und Zukunftsfähigkeit

IronBarcode zielt auf aktuelle .NET-Versionen ab und behält die Kompatibilität mit .NET Standard bei für Projekte, die noch nicht auf modernes .NET migriert wurden. Der regelmäßige Release-Rhythmus von Iron Software stimmt Kompatibilitätsupdates mit jeder großen .NET-Veröffentlichung ab. NetBarcodezielt auf .NET Standard 2.0 ab und ist dank dieser Kompatibilitätsschicht auch auf aktuellen Laufzeitumgebungen funktionsfähig, allerdings sind die Aktualisierungshäufigkeit der Bibliothek und der 2D-Formatsatz durch ihren Designumfang festgelegt.

Abschluss

NetBarcode und IronBarcode repräsentieren unterschiedliche Positionen im Spektrum des Umfangs von Barcode-Bibliotheken. NetBarcodeist eine fokussierte, saubere Implementierung für die Erstellung von 1D Barcodes: elf Enum-Werte in acht linearen Symbologiefamilien, eine einfache Konstruktor-API und eine MIT-Lizenz, die die Übernahme für Open-Source-Projekte innerhalb der ImageSharp-Umsatzgrenze reibungslos hält. IronBarcode ist ein umfassenderes Toolkit, das die Generierung in über 50 Formaten, das Einlesen aus Bildern und PDFs sowie eine flüssige API abdeckt, die 1D- und 2D-Formate identisch behandelt.

Für Projekte, bei denen die Anforderungen tatsächlich auf die Erstellung von linearen Barcodes im unterstützten Satz beschränkt sind — ein Point-of-Sale-System, das EAN-13-Codes für europäische Einzelhandelsscanner produziert, oder ein internes Tool mit einer festen und kurzen Lebensdauer — liefert NetBarcode, was benötigt wird, ohne eine kommerzielle Abhängigkeit einzuführen. Die Bibliothek ist innerhalb ihres Umfangs gut aufgebaut, und dieser Umfang ist bereits beim ersten Blick auf die Type-Aufzählung explizit.

Für Projekte, bei denen sich der Formatumfang erweitern kann, bei denen irgendwann Lesezugriffe erforderlich sein werden oder bei denen eine Überprüfung der Konformität mit der transitiven Abhängigkeit von ImageSharp ein Anliegen ist, bietet IronBarcode eine Lösung für alle drei Aspekte in einem einzigen Paket. Teams, die mit NetBarcodefür die 1D-Generierung beginnen und später QRCoder für 2D und ZXing .NET zum Lesen hinzufügen, haben drei separate Verpflichtungen zur Bibliothekswartung; IronBarcode fasst diese in einem einzigen zusammen.

Die Wahl ergibt sich direkt aus den Projektanforderungen. Wenn die elf 1D-Enum-Werte von NetBarcodein acht Symbologiefamilien und ohne Lesefähigkeit der Spezifikation genau entsprechen, ist NetBarcodeeine technisch fundierte Auswahl. Wenn die Spezifikation ein 2D-Format, einen Lese-Workflow oder Bedenken hinsichtlich der ImageSharp-Lizenzbedingungen beinhaltet, ist IronBarcode die umfassendere Lösung.

Häufig gestellte Fragen

Was ist NetBarcode?

NetBarcode 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 NetBarcode und IronBarcode?

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

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

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

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

Bei der Migration von NetBarcode zu IronBarcode geht es in erster Linie darum, instanzbasierte API-Aufrufe durch statische Methoden von IronBarcode zu ersetzen, Lizenzierungsformulare 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