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
Typedefiniert 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 mitSaveImageFile()oderGetImage()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
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
BarcodeWriterals auchBarcodeReadersind 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 einGeneratedBarcode-Objekt mit Ausgabemethoden zurück, darunterSaveAsPng(),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
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")
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
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
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
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
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" />
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.

