Zum Fußzeileninhalt springen
MIT ANDEREN KOMPONENTEN VERGLEICHEN

Spire.Barcode vs IronBarcode: C# Barcode Bibliothek Vergleich

Spire.Barcode benötigt beim Lesen den Barcode-Typ: scanner.Scan(path, BarCodeType.Code128). Wenn Sie Dokumente verarbeiten, bei denen die eingehenden Barcodes ein beliebiges Format haben können, müssen Sie eine Formaterkennungsschleife schreiben, bevor Sie einen Wert extrahieren können. Diese einzelne API-Entscheidung prägt alles, was Sie beim Erstellen von Barcode-Scanning-Workflows mit Spire.Barcode beachten sollten, und es lohnt sich, sie zu verstehen, bevor Sie sich dafür entscheiden.

Spire.Barcode verstehen

Spire.Barcode ist eine kommerzielle .NET Barcode-Bibliothek, die von E-iceblue, einem chinesischen Softwareunternehmen, entwickelt wurde, das auch die Produktlinien Spire.Doc, Spire.XLS und Spire.PDF herstellt. Die Bibliothek unterstützt die Barcode-Generierung und das Lesen über eine Reihe von 1D- und 2D-Symbologien hinweg und ist so konzipiert, dass sie sich in das umfassendere E-iceblue-Dokumentenverarbeitungs-Ökosystem integrieren lässt.

E-iceblue veröffentlicht zwei Pakete: FreeSpire.Barcode kostenlos und Spire.Barcode als kommerzielles Produkt. Das kostenlose Paket ist ein dauerhaft begrenztes Produkt mit bewussten Einschränkungen und keine zeitlich begrenzte Testversion. Das kommerzielle Paket schaltet den kompletten Symboliksatz frei und beseitigt die Einschränkungen der kostenlosen Version, erfordert jedoch den separaten Erwerb einer Lizenz für jedes andere verwendete Spire-Produkt.

Zu den wichtigsten architektonischen Merkmalen von Spire.Barcode gehören:

  • Obligatorischer Parameter BarCodeType: Jeder Aufruf von BarcodeScanner.Scan() erfordert einen Enumerationswert von BarCodeType. Es gibt keine Überladung, die nur einen Dateipfad akzeptiert und eine automatische Formaterkennung durchführt.
  • Modell zur Generierung von Einstellungen-Objekten: Die Barcode-Generierung basiert auf einem veränderlichen BarcodeSettings Objekt, das an eine BarCodeGenerator Instanz übergeben wird. Dies erfordert mehrere Eigenschaftszuweisungen, bevor eine Ausgabe erzeugt wird.
  • Keine native PDF-Unterstützung: Spire.Barcode kann Barcodes nicht direkt aus PDF-Dateien lesen. PDF-basierte Workflows erfordern ein separates Spire.PDF Paket, eine separate Lizenz sowie manuellen Seiten- und Bildextraktionscode, der vom Entwickler geschrieben wurde.
  • Einschränkungen der kostenlosen Version von FreeSpire.Barcode: Die kostenlose Version fügt den generierten Barcodes große Evaluierungswasserzeichen hinzu, verschlechtert absichtlich die Scanleistung, beschränkt den verfügbaren Symbologiesatz und erfordert einen Registrierungsschlüssel von E-iceblue, bevor Warndialoge unterdrückt werden.
  • Integration in das E-iceblue-Ökosystem: Teams, die bereits Spire.Doc oder Spire.XLS verwenden, könnten die Vertrautheit mit der API und mögliche Paketpreise als vorteilhaft empfinden. Teams, die Spire.Barcode isoliert nutzen, tragen die vollen Lizenzkosten pro Produkt, ohne von den Vorteilen des Ökosystems zu profitieren.
  • Rückgabetyp: BarcodeScanner.Scan() gibt string[] zurück, welches keine Formatmetadaten enthält. Der ermittelte Typ ist nicht im Ergebnis enthalten.

Die Anforderung an die Typenspezifikation

Spire.Barcode's BarcodeScanner.Scan() hat keine Überladung, die nur einen Dateipfad akzeptiert. Jeder Lesevorgang erfordert, dass der aufrufende Code das Barcode-Format im Voraus deklariert. Für Workflows mit nur einem Format ist dies praktikabel, aber bei der Verarbeitung von Dokumenten in verschiedenen Formaten führt es zu einer potenziellen Endlosschleife:

// Spire.Barcode: multi-format detection requires a guessing loop
BarcodeScanner scanner = new BarcodeScanner();
var candidates = new[] { BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417 };

string foundValue = null;
foreach (var type in candidates)
{
    string[] found = scanner.Scan("barcode.png", type);
    if (found.Length > 0)
    {
        foundValue = found[0];
        break;
    }
}
// Spire.Barcode: multi-format detection requires a guessing loop
BarcodeScanner scanner = new BarcodeScanner();
var candidates = new[] { BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417 };

string foundValue = null;
foreach (var type in candidates)
{
    string[] found = scanner.Scan("barcode.png", type);
    if (found.Length > 0)
    {
        foundValue = found[0];
        break;
    }
}
Imports Spire.Barcode

Dim scanner As New BarcodeScanner()
Dim candidates = {BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417}

Dim foundValue As String = Nothing
For Each type In candidates
    Dim found As String() = scanner.Scan("barcode.png", type)
    If found.Length > 0 Then
        foundValue = found(0)
        Exit For
    End If
Next
$vbLabelText   $csharpLabel

Jeder dem Kandidatenarray hinzugefügte Typ ist ein zusätzlicher Scan-Durchlauf. Jedes Format, das in der Liste fehlt, wird stillschweigend ignoriert. Der Entwickler ist verantwortlich für die Pflege eines vollständigen Typeninventars und für erneute Tests, sobald ein neues Format in den Arbeitsablauf aufgenommen wird.

IronBarcode verstehen

IronBarcode ist eine kommerzielle .NET Barcode-Bibliothek, die von Iron Software entwickelt wurde. Es bietet sowohl Barcode-Lesen als auch -Generierung über ein statisches API-Modell, wodurch die Notwendigkeit der Instanzverwaltung entfällt. Die Bibliothek wird als einzelnes NuGet Paket ausgeliefert, das native Unterstützung für die PDF- und Bildverarbeitung bietet, ohne dass zusätzliche Abhängigkeiten erforderlich sind.

Die Leseengine von IronBarcode führt in einem einzigen Scanvorgang eine automatische Formaterkennung für über 50 Symbologien durch. Die von BarcodeReader.Read() zurückgegebenen Ergebnisobjekte enthalten den erkannten Barcode-Typ, den dekodierten Wert und Kontextmetadaten wie die Seitenzahl für PDF-Quellen und Begrenzungskoordinaten innerhalb des Quellbildes.

Zu den wichtigsten Merkmalen von IronBarcode gehören:

  • Automatische Formaterkennung: BarcodeReader.Read() benötigt keinen Typparameter. Die Bibliothek identifiziert die Symbolik während des Scans und fügt sie dem Ergebnisobjekt hinzu.
  • Unterstützung für PDF-Dateien in einem einzigen Paket: PDF-Dateien werden direkt von BarcodeReader.Read() akzeptiert, ohne dass zusätzliche NuGet Pakete, Lizenzen oder manueller Seitenextraktionscode erforderlich sind.
  • Fluent-Generierungs-API: BarcodeWriter.CreateBarcode() ist eine statische Factory-Methode, die ein verkettbares Objekt zurückgibt, um Größe, Stil und Speicherung in einem einzigen Ausdruck zu ermöglichen.
  • Testmodus mit vollem Funktionsumfang: Die IronBarcode Testversion läuft mit demselben Paket wie das lizenzierte Produkt und bietet volle Lesegeschwindigkeit, volle Symbologieunterstützung und den kompletten Funktionsumfang. Die im Testmodus generierten Ausgaben weisen ein kleines Randwasserzeichen auf; Das Leseverhalten bleibt unbeeinflusst.
  • BarcodeReaderOptions zur Feinabstimmung: Lesegeschwindigkeit, Mehrfach-Barcode-Erkennung, Bildvorverarbeitung und erwartete Symbologiefilter sind konfigurierbar, ohne dass Bibliotheksprodukte gewechselt werden müssen.
  • Ergebnisobjekte mit Metadaten: Jedes Ergebnis in einer BarcodeResults Sammlung stellt Value, BarcodeType, PageNumber und Bildregionsdaten bereit.

Funktionsvergleich

Die folgende Tabelle fasst die wichtigsten Unterschiede zwischen Spire.Barcode und IronBarcode zusammen:

Feature Spire.Barcode IronBarcode
Barcode-Lesung Ja (BarCodeType erforderlich) Ja (automatische Erkennung)
Barcode-Generierung Ja Ja
Automatische Formaterkennung Nein Ja
Native PDF-Unterstützung Nein (erfordert Spire.PDF) Ja
Kostenloses Tarif FreeSpire.Barcode (eingeschränkt) Testmodus (voller Funktionsumfang)
Symbolik zählen 39+ (gewerblich) 50+
Lizenzmodell Preisstufen pro Sitzplatz und Abonnement Dauerhaft mit optionaler Unterstützung

Detaillierter Funktionsvergleich

Feature Spire.Barcode IronBarcode
Lektüre
Automatische Formaterkennung Nein Ja
Barcode-Typ erforderlich Ja Nein
Metadaten des Rückgabeformats Nein Ja
Mehrere Barcodes pro Bild Ja Ja
Lesegeschwindigkeitssteuerung Nein Ja (BarcodeReaderOptions)
ML-gestützte Fehlerkorrektur Nein Ja
Generation
API-Modell Einstellungsobjekt + Generator Statische Fabrik mit fließender Kette
QR-Code mit individuellem Logo Nur für gewerbliche Kunden Alle Stufen
Ausgabeformate Bild (PNG, JPEG, BMP) PNG, JPEG, BMP, SVG, HTML, Stream
Flüssiges Verketten Nein Ja
PDF-Unterstützung
Barcodes aus PDFs lesen Erfordert Spire.PDF Native Version, kein Zusatzpaket
Seitenzahl im Ergebnis Manuelle Nachverfolgung Ja
Zusätzliche Lizenz erforderlich Ja (Spire.PDF) Nein
Plattform
.NET Framework Ja Ja
.NET Core / .NET 5+ Ja Ja
Docker/Linux Ja Ja
Symboliken
1D (Code128, Code39, EAN, UPC) Ja Ja
2D (QR, DataMatrix, PDF417) Ja Ja
Gesamtzahl der Symbole 39+ (gewerblich) 50+
Lizenzierung
Kostenloses Tarif FreeSpire.Barcode (mit Wasserzeichen versehen, beeinträchtigt) Testmodus (volle Geschwindigkeit, kleines Wasserzeichen)
Für die kostenlose Version ist eine Registrierung erforderlich. Ja Nein
Lizenzmodell Dauerlizenz pro Sitzplatz + Abonnement Dauerlizenz mit optionaler Verlängerung
Einstiegspreis 349 $ (Einzelentwickler) 749 $ (Lite)

Barcode-Lesung

Spire.Barcode-Ansatz

Spire.Barcode benötigt für BarcodeScanner.Scan() bei jedem Aufruf einen BarCodeType Parameter. Der Aufruf mit nur einem Datentyp ist dann angebracht, wenn das Format bekannt und garantiert ist:

// Spire.Barcode — type is mandatory
BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("barcode.png", BarCodeType.Code128);

foreach (string value in results)
{
    Console.WriteLine(value);
}
// Spire.Barcode — type is mandatory
BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("barcode.png", BarCodeType.Code128);

foreach (string value in results)
{
    Console.WriteLine(value);
}
Imports Spire.Barcode

Dim scanner As New BarcodeScanner()
Dim results As String() = scanner.Scan("barcode.png", BarCodeType.Code128)

For Each value As String In results
    Console.WriteLine(value)
Next
$vbLabelText   $csharpLabel

Wenn das Format nicht im Voraus bekannt ist, bleibt nur die Möglichkeit, die Kandidatentypen zu durchlaufen. Jeder Durchlauf entspricht einem vollständigen Scan, und jedes Format, das nicht in der Liste enthalten ist, wird stillschweigend übersehen. Das Ergebnis ist ein string[], das keine Typinformationen enthält, sodass für das nachfolgende Routing basierend auf dem Format eine zusätzliche Zustandsverwaltung durch den Aufrufer erforderlich ist.

IronBarcode Ansatz

Der BarcodeReader.Read()-Response von IronBarcode benötigt keinen Typparameter. Die Bibliothek erkennt das Format automatisch in einem einzigen Durchlauf über alle unterstützten Symbologien hinweg. Das Auslesen von Barcodes aus Bildern erfolgt durch einen einzigen Methodenaufruf, unabhängig davon, wie viele verschiedene Formate die Quelle enthalten mag:

// IronBarcode — auto-detection built in
var results = BarcodeReader.Read("barcode.png");

foreach (var result in results)
{
    Console.WriteLine($"{result.BarcodeType}: {result.Value}");
}
// IronBarcode — auto-detection built in
var results = BarcodeReader.Read("barcode.png");

foreach (var result in results)
{
    Console.WriteLine($"{result.BarcodeType}: {result.Value}");
}
Imports IronBarCode

' IronBarcode — auto-detection built in
Dim results = BarcodeReader.Read("barcode.png")

For Each result In results
    Console.WriteLine($"{result.BarcodeType}: {result.Value}")
Next
$vbLabelText   $csharpLabel

Jedes Ergebnisobjekt enthält BarcodeType, Value und Positionsmetadaten. Das Downstream-Routing auf Basis des Formats erfordert keinen zusätzlichen Status – der Typ ist im Ergebnis selbst vorhanden.

Einschränkungen des kostenlosen Tarifs

Spire.Barcode Gratis-Version

FreeSpire.Barcode fügt den generierten Barcode-Bildern ein großes Bewertungswasserzeichen hinzu. Das Wasserzeichen überdeckt den Barcode auf eine Weise, die ihn für den Produktionsprozess ungeeignet macht und eine sinnvolle Bewertung der Erzeugungsqualität verhindert. Die Scanleistung ist in der kostenlosen Version absichtlich reduziert, was bedeutet, dass die während der Evaluierung durchgeführten Durchsatzmessungen nicht die Leistung der kommerziellen Spire.Barcode-Version widerspiegeln. Für das kostenlose Paket ist außerdem ein Registrierungsschlüssel von E-iceblue erforderlich, bevor Warnmeldungen während der Ausführung unterdrückt werden. Die im kostenlosen Tarif verfügbaren Symbole stellen eine Teilmenge des kommerziellen Angebots dar. Diese Einschränkungen bedeuten insgesamt, dass eine auf FreeSpire.Barcode basierende Evaluierung nicht genau widerspiegelt, was das kommerzielle Produkt bietet.

IronBarcode Testmodus

Die Testversion von IronBarcode ist das lizenzierte Paket, das ohne Lizenzschlüssel verwendet wird. Das Lesen erfolgt in voller Geschwindigkeit mit vollständiger Symbolunterstützung und ohne Verhaltensbeschränkungen. Die Optionen für Lesegeschwindigkeit und Lesegenauigkeit verhalten sich im Test- und Lizenzmodus identisch. Im Testmodus generierte Barcodes enthalten ein kleines Wasserzeichen am Bildrand; Es verdeckt den Barcode selbst nicht. Das bei einer IronBarcode -Evaluierung gemessene Verhalten entspricht dem Verhalten, das in der Produktionsumgebung ausgeliefert wird.

Aspekt FreeSpire.Barcode IronBarcode Testversion
Wasserzeichen auf dem generierten Output Groß, deckt Barcode ab Klein, nur am Bildrand
Leseleistung absichtlich herabgesetzt Volle Geschwindigkeit
Symbolikunterstützung Begrenzte Teilmenge (~20 Typen) Komplettes Set (über 50 Typen)
Anmeldung erforderlich Ja (kostenloser Key von E-iceblue) Nein
Verfügbare Funktionen Begrenzte Teilmenge Vollständiger Funktionsumfang
Zeitlimit Keine 30 Tage

PDF-Barcode-Unterstützung

Spire.Barcode-Ansatz

Spire.Barcode verfügt über keine native PDF-Lesefunktion. Um Barcodes aus einer PDF-Datei zu extrahieren, muss ein Entwickler das separate Paket Spire.PDF installieren, eine separate Spire.PDF-Lizenz erwerben und manuellen Seiteniterations- und Bildextraktionscode schreiben, bevor das Scannen der Barcodes beginnen kann:

// Spire.Barcode + Spire.PDF: two libraries, two licenses
using Spire.Pdf;

var pdf = new PdfDocument();
pdf.LoadFromFile("document.pdf");

var scanner = new BarcodeScanner();
foreach (PdfPageBase page in pdf.Pages)
{
    var images = page.ExtractImages();
    foreach (var image in images)
    {
        // BarCodeType is still required even here
        string[] results = scanner.Scan(image, BarCodeType.QRCode);
    }
}
// Spire.Barcode + Spire.PDF: two libraries, two licenses
using Spire.Pdf;

var pdf = new PdfDocument();
pdf.LoadFromFile("document.pdf");

var scanner = new BarcodeScanner();
foreach (PdfPageBase page in pdf.Pages)
{
    var images = page.ExtractImages();
    foreach (var image in images)
    {
        // BarCodeType is still required even here
        string[] results = scanner.Scan(image, BarCodeType.QRCode);
    }
}
Imports Spire.Pdf

Dim pdf As New PdfDocument()
pdf.LoadFromFile("document.pdf")

Dim scanner As New BarcodeScanner()
For Each page As PdfPageBase In pdf.Pages
    Dim images = page.ExtractImages()
    For Each image In images
        ' BarCodeType is still required even here
        Dim results As String() = scanner.Scan(image, BarCodeType.QRCode)
    Next
Next
$vbLabelText   $csharpLabel

Dieses Muster erfordert zwei NuGet Pakete, zwei Lizenzvereinbarungen und vom Entwickler geschriebenen Seitenverwaltungscode. Sind Barcodes in Vektorinhalten anstatt in Rasterbildern innerhalb der PDF-Datei eingebettet, kann es passieren, dass der Bildextraktionsansatz sie vollständig erfasst.

IronBarcode Ansatz

IronBarcode verarbeitet PDF-Dateien nativ ohne zusätzliche Abhängigkeiten. Das Auslesen von Barcodes aus PDF-Dokumenten erfolgt durch einen einzigen Methodenaufruf unter Verwendung derselben BarcodeReader.Read() API, die auch für Bilddateien verwendet wird. In jedem Ergebnisobjekt sind Seitenzahlen enthalten:

// IronBarcode: native PDF support, no additional library
var results = BarcodeReader.Read("document.pdf");

foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.BarcodeType} = {barcode.Value}");
}
// IronBarcode: native PDF support, no additional library
var results = BarcodeReader.Read("document.pdf");

foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.BarcodeType} = {barcode.Value}");
}
Imports IronBarcode

Dim results = BarcodeReader.Read("document.pdf")

For Each barcode In results
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.BarcodeType} = {barcode.Value}")
Next
$vbLabelText   $csharpLabel

Es ist keine manuelle Seitenextraktion, kein zweites Paket und kein zusätzlicher Lizenzkauf erforderlich.

API-Generierung

Spire.Barcode-Ansatz

Das Generierungsmodell von Spire.Barcode basiert auf einem veränderlichen BarcodeSettings Konfigurationsobjekt. Ein Entwickler instanziiert die Einstellungen, weist ihnen einzeln Eigenschaften zu, übergibt das Einstellungsobjekt an einen BarCodeGenerator und ruft dann GenerateImage() auf:

// Spire.Barcode generation
using Spire.Barcode;

BarcodeSettings settings = new BarcodeSettings();
settings.Type = BarCodeType.Code128;
settings.Data = "12345678";
settings.ShowText = true;
settings.TextMargin = 5;
settings.BarHeight = 60;
settings.Unit = GraphicsUnit.Pixel;

BarCodeGenerator generator = new BarCodeGenerator(settings);
Image barcodeImage = generator.GenerateImage();
barcodeImage.Save("barcode.png", ImageFormat.Png);
// Spire.Barcode generation
using Spire.Barcode;

BarcodeSettings settings = new BarcodeSettings();
settings.Type = BarCodeType.Code128;
settings.Data = "12345678";
settings.ShowText = true;
settings.TextMargin = 5;
settings.BarHeight = 60;
settings.Unit = GraphicsUnit.Pixel;

BarCodeGenerator generator = new BarCodeGenerator(settings);
Image barcodeImage = generator.GenerateImage();
barcodeImage.Save("barcode.png", ImageFormat.Png);
Imports Spire.Barcode
Imports System.Drawing
Imports System.Drawing.Imaging

Dim settings As New BarcodeSettings()
settings.Type = BarCodeType.Code128
settings.Data = "12345678"
settings.ShowText = True
settings.TextMargin = 5
settings.BarHeight = 60
settings.Unit = GraphicsUnit.Pixel

Dim generator As New BarCodeGenerator(settings)
Dim barcodeImage As Image = generator.GenerateImage()
barcodeImage.Save("barcode.png", ImageFormat.Png)
$vbLabelText   $csharpLabel

Das veränderliche Einstellungsobjekt bedeutet, dass Konfigurationen versehentlich über mehrere Aufrufe hinweg geteilt werden können, wenn eine einzelne Instanz über mehrere Generierungsvorgänge hinweg wiederverwendet wird. Die Generatorklasse fügt einen zusätzlichen Instanziierungsschritt hinzu, der keine eigene Konfigurationslogik enthält.

IronBarcode Ansatz

IronBarcode verwendet eine statische Factory-Methode mit optionaler Fluent Chaining. Es gibt kein Einstellungsobjekt und keine Generatorinstanz, die verwaltet werden muss:

// IronBarcode generation
using IronBarCode;

BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");

// With sizing:
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("barcode.png");
// IronBarcode generation
using IronBarCode;

BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");

// With sizing:
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("barcode.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128) _
    .SaveAsPng("barcode.png")

' With sizing:
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128) _
    .ResizeTo(400, 100) _
    .SaveAsPng("barcode.png")
$vbLabelText   $csharpLabel

QR-Codes mit individuellen Logos sind in allen IronBarcode -Lizenzstufen verfügbar:

var qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest);
qr.AddBrandLogo("logo.png");
qr.SaveAsPng("qr-with-logo.png");
var qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest);
qr.AddBrandLogo("logo.png");
qr.SaveAsPng("qr-with-logo.png");
Dim qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
qr.AddBrandLogo("logo.png")
qr.SaveAsPng("qr-with-logo.png")
$vbLabelText   $csharpLabel

Preise

Die Preisstruktur von Spire.Barcode umfasst vier Stufen:

Lizenz Preis
Einzelentwickler $349
Standortlizenz $1,398
OEM $6,990
Abonnement 999 $/Jahr

Die Abonnementstufen beinhalten eine bestimmte Version. Für fortlaufende Updates und Support ist neben der unbefristeten Lizenz ein aktives Abonnement erforderlich. Ein Team, das von einem auf zwei Entwickler wächst, wechselt direkt von der Einzelentwicklerlizenz für 349 US-Dollar zur Standortlizenz für 1.398 US-Dollar. Falls Spire.PDF auch für die PDF-Barcode-Extraktion benötigt wird, fallen zusätzliche Lizenzkosten an.

IronBarcode verwendet drei unbefristete Lizenzstufen:

Lizenz Preis Entwickler
Lite $749 1
Professionell $1,499 10
Unbegrenzt $2,999 Unbegrenzt

Alle Stufen sind unbefristet und bieten die Option, ein jährliches Support- und Update-Abonnement hinzuzufügen. Ein Team von fünf Entwicklern, das die Site-Lizenz von Spire.Barcode (1.398 US-Dollar) Plus ein Jahresabonnement (999 US-Dollar) nutzt, beläuft sich im ersten Jahr auf insgesamt 2.397 US-Dollar. Dies ist vergleichbar mit IronBarcode Professionell, das als einmaliger Kauf für 1.499 US-Dollar ohne zusätzliche Kosten im zweiten Jahr erworben werden muss.

API-Mapping-Referenz

Spire.Barcode IronBarcode
new BarcodeScanner() Statisch BarcodeReader.Read()
scanner.Scan(path, BarCodeType.X) BarcodeReader.Read(path)
BarCodeType.Code128 (erforderlicher Parameter) Automatisch erkannt; kein Äquivalent erforderlich
string[] results BarcodeResults Sammlung
results[0] (Zeichenkette) results[0].Value (Zeichenkette)
new BarcodeSettings() Parameter für BarcodeWriter.CreateBarcode()
settings.Type = BarCodeType.Code128 BarcodeEncoding.Code128 als zweiter Parameter
settings.Data = "value" Erster Parameter von CreateBarcode()
new BarCodeGenerator(settings) Nicht erforderlich; static factory ersetzt dies
generator.GenerateImage() + image.Save() .SaveAsPng(path) oder .SaveAsJpeg(path)
Spire.PDF (zum Lesen von PDFs) Nicht erforderlich; Native PDF-Unterstützung integriert
BarcodeSettings.ApplyKey("key") IronBarCode.License.LicenseKey = "key"
Spire.License.LicenseProvider.SetLicenseKey("key") IronBarCode.License.LicenseKey = "key"

Wenn Teams einen Wechsel von Spire.Barcode zu IronBarcode erwägen

Verarbeitung von Dokumenten in gemischten Formaten

Teams, die mit einem einzigen bekannten Barcode-Format beginnen, stellen oft fest, dass die Vielfalt der verwendeten Formate im Laufe der Zeit zunimmt. Eine Lagerverwaltungsanwendung, die mit Code128-Etiketten gestartet ist, kann beispielsweise Lieferungen von Lieferanten empfangen, die DataMatrix-, GS1-128- oder QR-Codes verwenden. Jedes neue Format, das in den Workflow gelangt, erfordert eine Aktualisierung des Kandidatenarrays in der Typerkennungsschleife, einen erneuten Test der Erkennungslogik und die Bestätigung, dass kein vorhandenes Format durch die Iterationsreihenfolge verdrängt wird. Wenn die Formatvielfalt ein Ausmaß erreicht, bei dem der Wartungsaufwand für diese Schleife zu wiederkehrenden Entwicklungskosten wird, prüfen die Teams, ob eine automatische Erkennung diese Belastung vollständig beseitigen würde.

PDF-Integration

Bei dokumentenintensiven Anwendungen kommt es häufig vor, dass Barcodes aus PDF-Dateien anstatt aus eigenständigen Bildern extrahiert werden müssen. In einem Spire.Barcode-Workflow erfordert dieser Übergang den Erwerb einer Spire.PDF-Lizenz, die Integration eines zweiten Pakets und die Entwicklung einer Infrastruktur für Seiteniteration und Bildextraktion, bevor überhaupt ein Barcode gelesen werden kann. Teams, die diese Anforderung beim ursprünglichen Kauf nicht berücksichtigt hatten, sehen sich nun mit der Verwaltung von zwei Produktlizenzen und zwei API-Schnittstellen für eine Aufgabe konfrontiert, die konzeptionell zum Barcode-Lesen gehört. Die Erkenntnis, dass die PDF-Unterstützung einen separaten Kauf erfordert, ist ein häufiger Anlass, die Produktauswahl zu überdenken.

Einschränkungen bei der Bewertung der kostenlosen Version

Teams, die FreeSpire.Barcode evaluiert und anschließend die kommerzielle Lizenz erworben haben, berichten mitunter, dass sich das kommerzielle Produkt anders verhält, als ihre Evaluierung vermuten ließ. Dies ist so beabsichtigt: Die kostenlose Version reduziert absichtlich die Leseleistung und beschränkt den Symboliksatz, was bedeutet, dass die während der Evaluierung durchgeführten Benchmarks und Formatabdeckungstests nicht auf die kommerzielle Bereitstellung übertragbar sind. Wenn ein Team diese Diskrepanz nach dem Kauf feststellt, sucht es häufig nach Alternativen, deren Testverhalten repräsentativ für das Produktionsverhalten ist.

Reduzierung der Produktanzahl

Organisationen, die ihren Technologie-Stack standardisieren, betrachten Spire.Barcode manchmal als eine Komponente in einem wachsenden Bestand an E-iceblue-Produkten, von denen jedes seine eigenen Lizenzkosten und seinen eigenen Erneuerungszyklus hat. Wenn der Hauptzweck von Spire.Barcode das Lesen von Barcodes innerhalb einer Dokumentenverarbeitungspipeline ist – und nicht die tiefe Integration mit Spire.Doc oder Spire.XLS – prüfen die Teams, ob eine einzige, in sich geschlossene Barcode-Bibliothek sowohl die Lizenzierungskomplexität als auch den Supportaufwand reduzieren würde.

Gemeinsame Überlegungen zur Migration

Entfernen des Parameters "BarCodeType"

Jeder scanner.Scan()-Aufruf in einer Spire.Barcode-Codebasis enthält ein BarCodeType-Argument. Ersetzt man diese Aufrufe durch BarcodeReader.Read(), wird der Typparameter vollständig entfernt. Typvorhersageschleifen – foreach-Blöcke, die Kandidatenwerte BarCodeType durchlaufen – können vollständig gelöscht werden; Ein einziger BarcodeReader.Read()-Aufruf ersetzt die gesamte Schleife.

Aktualisierung des Rückgabetyps

Spire.Barcode's Scan() returns string[]. IronBarcode gibt eine BarcodeResults Sammlung zurück. Aufrufstellen, die string[] zuweisen oder Ergebnisse an Methoden übergeben, die diesen Typ erwarten, müssen aktualisiert werden. Werte als Array extrahieren verwendet .Select(r => r.Value).ToArray(); Der Zugriff auf das erste Ergebnis erfolgt über .First()?.Value.

Entfernen des Spire.PDF-Pakets

Falls Spire.PDF ausschließlich zur Unterstützung der Barcode-Extraktion aus PDF-Dateien installiert wurde, kann es nach der Migration zu IronBarcode entfernt werden. Alle using Spire.Pdf; Importe und Manpage-Iterationsblöcke werden durch einen einzigen BarcodeReader.Read("file.pdf") Aufruf ersetzt. Wenn Spire.PDF für andere Dokumentoperationen als die Barcode-Extraktion verwendet wird, sollte es beibehalten und nur die Barcode-bezogenen Codepfade ersetzt werden.

Namensraumänderungen

Ersetzen Sie using Spire.Barcode; durch using IronBarCode;. Der Aufzählungstyp BarCodeType wird für die Generierung durch BarcodeEncoding ersetzt und benötigt für das Lesen kein Äquivalent. Die Lizenzinitialisierung ändert sich von BarcodeSettings.ApplyKey() oder Spire.License.LicenseProvider.SetLicenseKey() zu einer einzigen IronBarCode.License.LicenseKey Eigenschaftszuweisung beim Anwendungsstart.

Zusätzliche IronBarcode Funktionen

Die folgenden IronBarcode Funktionen wurden in den obigen Vergleichen nicht berücksichtigt:

  • Stapelverarbeitung von Bildern : BarcodeReader.Read() akzeptiert Arrays von Dateipfaden, Stream Objekte und Bitmap Instanzen und ermöglicht so die Stapelverarbeitung ohne manuelles Durchlaufen der Eingabesammlung.
  • BarcodeReaderOptions : Lesegeschwindigkeit, Mehrfach-Barcode-Erkennung, maximale Kandidatenanzahl und Bildverbesserungs-Vorverarbeitung sind über ein einzelnes Optionsobjekt konfigurierbar, das an Read() übergeben wird.
  • SVG- und HTML-Ausgabe: BarcodeWriter.CreateBarcode() unterstützt neben Rasterbildformaten auch .SaveAsSvg() und .SaveAsHtmlFile() und ermöglicht so die Ausgabe von web-einbettbaren Barcodes.
  • QR-Code mit Logo: QRCodeWriter.CreateQrCode() unterstützt AddBrandLogo() auf allen Lizenzstufen, wodurch ein benutzerdefiniertes Bild in die Mitte des QR-Codes eingefügt werden kann, ohne die Scan-Zuverlässigkeit bei angemessenen Fehlerkorrekturstufen zu beeinträchtigen.
  • Stream- und Byte-Array-Ausgabe: Generierte Barcodes können als Stream oder byte[] exportiert werden, um sie direkt zu speichern oder in eine HTTP-Antwort zu schreiben, ohne dass eine Zwischendatei erforderlich ist.
  • GS1-128 und strukturierte Symbologien: IronBarcode bietet Unterstützung für strukturierte GS1-Symbologien, die über die Möglichkeiten der kommerziellen Spire.Barcode-Version hinausgehen.

.NET-Kompatibilität und Zukunftsfähigkeit

IronBarcode unterstützt .NET Framework4.6.2 und höher, .NET Core 3.1 sowie alle Versionen von .NET 5 bis .NET 9. Kompatibilitätsupdates für .NET 10 werden im Laufe der Zeit bis 2026 erwartet. Die Bibliothek wurde unter Windows, Linux und macOS getestet und läuft in Docker-Containern ohne zusätzliche Konfiguration nativer Abhängigkeiten. Spire.Barcode unterstützt auch die plattformübergreifende .NET Bereitstellung, allerdings kann es je nach verwendeter Version bei den Linux- und Docker-Konfigurationen erforderlich sein, zusätzliche native Bibliothekseinstellungen vorzunehmen. Der regelmäßige Veröffentlichungszyklus von IronBarcode stellt sicher, dass neue C#-Sprachfunktionen und .NET -Laufzeitverbesserungen zusammen mit Plattformkompatibilitätsaktualisierungen integriert werden.

Abschluss

Spire.Barcode und IronBarcode gehen das Problem des Barcode-Lesens von grundlegend verschiedenen Standpunkten aus an. Spire.Barcode legt das Formatwissen auf den Aufrufer – jeder Scanvorgang erfordert, dass der Entwickler die Symbologie im Voraus deklariert, was in Workflows mit geschlossenem Format eine praktikable Einschränkung darstellt, in Workflows mit offenem Format jedoch einen Wartungsaufwand bedeutet. IronBarcode platziert die Formaterkennung innerhalb der Bibliothek, benötigt keinen Typparameter und gibt das erkannte Format als Teil des Ergebnisses zurück.

Spire.Barcode ist eine sinnvolle Wahl für Anwendungen, die ein einziges, garantiertes Barcode-Format verarbeiten, insbesondere wenn das Team bereits in das E-iceblue-Produktökosystem investiert hat. Das Modell zur Generierung von Einstellungsobjekten ist Entwicklern, die eine explizite Konfiguration bevorzugen, vertraut, und die kommerzielle Lizenz ist für Projekte mit nur einem Entwickler wettbewerbsfähig. Teams, die bei jedem Aufruf BarCodeType.Code128 garantieren können, zahlen praktisch keine Kosten für den obligatorischen Typparameter.

IronBarcode eignet sich besser für Anwendungen, bei denen die Formatvielfalt unvorhersehbar ist oder zunimmt, bei denen die Extraktion von PDF-Barcodes eine vorrangige Anforderung darstellt und bei denen die Genauigkeit der Auswertung von Bedeutung ist. Der Testlauf erfolgt in voller Produktionsgeschwindigkeit mit dem kompletten Symboliksatz, sodass die während der Evaluierung durchgeführten Leistungsbenchmarks und Formatabdeckungstests direkt auf den Produktionseinsatz übertragbar sind. Die native PDF-Unterstützung macht eine zusätzliche Bibliothek und den damit verbundenen Lizenzaufwand überflüssig. Für Teams, die IronBarcode als Alternative zu Spire.Barcode in Betracht ziehen, bietet die Spire.Barcode-Alternativenübersicht zusätzlichen Kontext für den Vergleich.

Die Entscheidung hängt letztlich von der Vorhersagbarkeit des Formats und dem Umfang des Arbeitsablaufs ab. Ein Lagerverwaltungssystem mit einem festen Code128-Etikettenstandard und ohne PDF-Quelldokumente hat keinen praktischen Grund, die automatische Erkennung von IronBarcode zu bevorzugen. Eine Dokumentenverarbeitungspipeline, die Barcodes von externen Lieferanten aufnimmt, gemischte Symbologien verarbeitet und PDF-Anhänge liest, würde feststellen, dass der obligatorische Typparameter und die Anforderung von zwei PDF-Bibliotheken laufende Wartungskosten darstellen, die IronBarcode eliminiert.

Häufig gestellte Fragen

Was ist Spire.BarCode?

Spire.Barcode ist eine .NET Barcode-Bibliothek zum Erzeugen und Lesen von Barcodes in C#-Anwendungen. Sie ist eine von mehreren Alternativen, die Entwickler bei der Auswahl einer Barcode-Lösung für .NET-Projekte in Betracht ziehen.

Was sind die Hauptunterschiede zwischen Spire.Barcode und IronBarcode?

IronBarcode verwendet eine statische, zustandslose API, die keine Instanzverwaltung erfordert, während Spire.Barcode in der Regel eine Instanzerstellung und -konfiguration vor der Verwendung erfordert. IronBarcode bietet außerdem native PDF-Unterstützung, automatische Formaterkennung und Single-Key-Lizenzierung in allen Umgebungen.

Ist IronBarcode einfacher zu lizenzieren als Spire.BarCode?

IronBarcode verwendet einen einzigen Lizenzschlüssel, der sowohl die Entwicklungs- als auch die Produktionsbereitstellung abdeckt. Dies vereinfacht CI/CD-Pipelines und Docker-Konfigurationen im Vergleich zu Lizenzierungssystemen, die SDK-Schlüssel von Laufzeitschlüsseln trennen.

Unterstützt IronBarcode alle Barcode-Formate, die auch Spire.Barcode unterstützt?

IronBarcode unterstützt über 30 Barcode-Symbologien, darunter QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 und viele mehr. Die automatische Formaterkennung bedeutet, dass keine explizite Formataufzählung erforderlich ist.

Unterstützt IronBarcode das native Lesen von PDF-Barcodes?

Ja, IronBarcode liest Barcodes direkt aus PDF-Dateien mit BarcodeReader.Read("document.pdf"), ohne dass eine separate PDF-Rendering-Bibliothek erforderlich ist. Die seitenweisen Ergebnisse umfassen Seitenzahl, Barcodeformat, Wert und Konfidenzwert.

Wie handhabt IronBarcode die Stapelverarbeitung im Vergleich zu Spire.Barcode?

Die statischen Methoden von IronBarcode sind zustandslos und natürlich thread-sicher, was die direkte Verwendung von Parallel.ForEach ohne Instanzverwaltung pro Thread ermöglicht. Es gibt auf keiner Preisstufe eine Obergrenze für den Durchsatz.

Welche .NET Versionen werden von IronBarcode unterstützt?

IronBarcode unterstützt .NET Framework 4.6.2+, .NET Core 3.1 und .NET 5, 6, 7, 8 und 9 in einem einzigen NuGet-Paket. Zu den Zielplattformen gehören Windows x64/x86, Linux x64 und macOS x64/ARM.

Wie installiere ich IronBarcode in einem .NET-Projekt?

Installieren Sie IronBarcode über NuGet: Führen Sie "Install-Package IronBarCode" in der Paketmanager-Konsole oder "dotnet add package IronBarCode" in der CLI aus. Es sind keine zusätzlichen SDK-Installationsprogramme oder Laufzeitdateien erforderlich.

Kann ich IronBarcode vor dem Kauf testen, im Gegensatz zu Spire.Barcode?

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 Spire.Barcode und IronBarcode?

Die Preise für IronBarcode beginnen bei 749 US-Dollar für eine unbefristete Einzelentwicklerlizenz für Entwicklung und Produktion. Preisdetails und Volumenoptionen sind auf der IronBarcode-Lizenzierungsseite verfügbar. Es ist keine separate Runtime-Lizenz erforderlich.

Ist die Migration von Spire.Barcode zu IronBarcode einfach?

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