Zum Fußzeileninhalt springen
MIT ANDEREN KOMPONENTEN VERGLEICHEN

NetBarcode gegen IronBarcode: C# Barcode Bibliothek Vergleich

NetBarcodes Enum Type enthält keinen Eintrag für QR-Codes. 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 unterstützt Code128, EAN-13, UPC-A und zehn weitere 1D-Formate – alle über einen einfachen Konstruktor und eine kleine Anzahl von Ausgabemethoden zugänglich. Die Abhängigkeit von SixLabors.ImageSharp stellt die Bildrendering-Schicht bereit, und seit Version 1.8 spiegelt sich diese Abhängigkeit in der öffentlichen API durch den Rückgabetyp Image<Rgba32> bei 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.

  • Nur 1D-Design: Die Aufzählung Type definiert genau 14 Barcode-Formate, alle linear; Es gibt keine 2D-Einträge
  • Abhängigkeit von SixLabors.ImageSharp: Das Rendern von Bildern wird an ImageSharp delegiert, und seit Version 1.8 gibt die Methode GetImage() Image<Rgba32> zurück, wodurch der Typ von ImageSharp direkt in der öffentlichen API verfügbar ist.
  • 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; keine integrierte Aufzählung oder Batch-Pipeline

Die Entwurfsgrenze des Typ-Enums

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

// NetBarcodeType enum — complete list as of v1.8
public enum Type
{
    Code128,
    Code128A,
    Code128B,
    Code128C,
    Code39,
    Code39Extended,
    Code93,
    EAN8,
    EAN13,
    UPCA,
    UPCE,
    Codabar,
    ITF,
    MSI
}

// 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
// NetBarcodeType enum — complete list as of v1.8
public enum Type
{
    Code128,
    Code128A,
    Code128B,
    Code128C,
    Code39,
    Code39Extended,
    Code93,
    EAN8,
    EAN13,
    UPCA,
    UPCE,
    Codabar,
    ITF,
    MSI
}

// 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
Public Enum Type
    Code128
    Code128A
    Code128B
    Code128C
    Code39
    Code39Extended
    Code93
    EAN8
    EAN13
    UPCA
    UPCE
    Codabar
    ITF
    MSI
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
$vbLabelText   $csharpLabel

Dies ist kein fehlendes Feature, für das ein Pull Request aussteht. Die Enumeration hat vierzehn Einträge, alle eindimensional, und das spiegelt den beabsichtigten Umfang der Bibliothek wider. Für alle Anwendungen, die QR-Codes, DataMatrix, PDF417oder aztekisch benötigen, muss ein separates Paket zur Bereitstellung dieser Formate erworben werden.

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 konzipiert, dass für den Wechsel von einem Barcode-Format zu einem anderen nur die Änderung einer einzigen Konstante erforderlich ist – der gleiche BarcodeWriter.CreateBarcode-Aufruf, der Code128 erzeugt, erzeugt auch QR-Codes, DataMatrix, PDF417und Aztec.

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

Hauptmerkmale:

  • Einheitliche Generierung und Lesung: Sowohl BarcodeWriter als auch BarcodeReader sind in einem einzigen 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.
  • Fluent Chain API: BarcodeWriter.CreateBarcode(data, encoding) gibt ein GeneratedBarcode-Objekt mit Ausgabemethoden zurück, darunter SaveAsPng(), SaveAsJpeg(), ToPngBinaryData() und streambasierte Ü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 neben Bildformaten auch direkt .pdf-Dateien.
  • 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 14 50+
ImageSharp-Abhängigkeit Ja (geteilte Lizenz) Nein
Lizenzmodell MIT (+ ImageSharp-Bedingungen) Kommerziell

Detaillierter Funktionsvergleich

Feature NetBarcode IronBarcode
Generation
Code128, EAN-13, UPC-A, Code39 Ja Ja
EAN-8, UPC-E, Code93, Codabar, ITF, MSI Ja 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 14 lineare Barcode-Formate über das Type Enum an. 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
// 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
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
$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 stellt alle unterstützten Formate über dieselbe BarcodeWriter.CreateBarcode Methode bereit. Die API-Oberfläche ändert sich nicht beim Übergang von einem 1D-Format zu einem 2D-Format – nur die Konstante BarcodeEncoding 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 der Datenzeichenfolge und einem Type-Enum-Wert instanziiert. Die Ausgabe wird entweder direkt mit SaveImageFile() gespeichert oder über GetImage() als Image<Rgba32> abgerufen. Seit Version 1.8 ist der Rückgabetyp von GetImage() der Typ SixLabors.ImageSharp, 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 Methode GetImage() verknüpft nachgelagerten Code mit der ImageSharp-Bibliothek. Jede Methode, die das Ergebnis akzeptiert oder speichert, muss es als Image<Rgba32> deklarieren, wodurch eine transitive Abhängigkeit im aufrufenden Code eingeführt wird.

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 selben 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.BarcodeType}: {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.BarcodeType}: {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.BarcodeType}: {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 in der Projekt-ID .csproj aufgeführt ist oder transitiv über NetBarcodeübertragen wird.


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

<PackageReference Include="NetBarcode" Version="1.8.2" />
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.

Mit der Version 1.8 kam eine weitere Folge der ImageSharp-Abhängigkeit hinzu: Der Rückgabetyp von GetImage() änderte sich von einer internen Darstellung zu SixLabors.ImageSharp.Image<Rgba32>. Vorhandener Code, der GetImage() ohne explizite Typangabe aufrief, führte zu einem Kompilierfehler, 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.EAN13) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.EAN13) Direktes Mapping
new Barcode(data, Type.UPCA) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.UPCA) Direktes Mapping
new Barcode(data, Type.Code39) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code39) Direktes Mapping
new Barcode(data, Type.EAN8) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.EAN8) Direktes Mapping
new Barcode(data, Type.UPCE) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.UPCE) Direktes Mapping
new Barcode(data, Type.ITF) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.ITF) 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
Nein Type.QRCode BarcodeEncoding.QRCode Neue Fähigkeit
Nein Type.DataMatrix BarcodeEncoding.DataMatrix Neue Fähigkeit
Nein Type.PDF417 BarcodeEncoding.PDF417 Neue Fähigkeit
Nein 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. Da die Enumeration Type keinen QR-Eintrag besitzt, 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 Paket SixLabors.ImageSharp kann im Abhängigkeitsbaum wieder auftauchen, wenn andere Pakete im Projekt es ebenfalls transitiv einbinden. Nach der Deinstallation überprüfen Sie mit dotnet list package --include-transitive die wiederhergestellte Paketliste, um zu bestätigen, ob ImageSharp noch vorhanden ist und ob die kommerzielle Lizenzbedingung noch gilt.

Ersetzung des Rückgabetyps von GetImage()

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

Namespace-Aktualisierung

Bei Dateien, die using NetBarcode;, using SixLabors.ImageSharp;, using SixLabors.ImageSharp.PixelFormats; oder using SixLabors.Fonts; importiert haben, müssen diese Direktiven durch 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 .NET 8 und .NET 9 ab und gewährleistet die Kompatibilität mit .NET Standard für Projekte, die noch nicht auf das moderne .NET migriert wurden. Da .NET 10 voraussichtlich Ende 2026 erscheint, stellt der regelmäßige Veröffentlichungszyklus von Iron Software sicher, dass Kompatibilitätsupdates auf jede größere .NET Version folgen. 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 der 1D-Barcode-Generierung: vierzehn Formate, eine unkomplizierte Konstruktor-API und eine MIT-Lizenz, die eine reibungslose Einführung für Open-Source-Projekte innerhalb der ImageSharp-Umsatzschwelle ermöglicht. 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 lineare Barcode-Generierung beschränkt sind – beispielsweise ein Kassensystem, das EAN-13- und UPC-A-Codes für herkömmliche Scanner im Einzelhandel erzeugt, oder ein internes Tool mit einer festen und kurzen Lebensdauer –, liefert NetBarcodedas Notwendige, ohne eine kommerzielle Abhängigkeit einzuführen. Die Bibliothek ist innerhalb ihres Umfangs gut aufgebaut, und dieser Umfang wird bereits beim ersten Blick auf das Type-Enum deutlich.

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 vierzehn 1D-Formate und keine Lesefähigkeit genau der Spezifikation entsprechen, ist NetBarcodeeine technisch solide Wahl. 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 für .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.

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