Zum Fußzeileninhalt springen
VIDEOS

Wie man einen Barcode-Zuschnittsbereich in C# einstellt

Migrieren von NetBarcodezu IronBarcode

Dieser Leitfaden beschreibt den kompletten Migrationspfad von NetBarcodezu IronBarcode , einschließlich der Schritte zur Paketentfernung, Namespace-Aktualisierungen, API-Übersetzungsbeispielen und einer Checkliste zum Auffinden aller Aufrufstellen vor Beginn der Migration. Der Leitfaden behandelt das häufige Szenario, in dem ein Projekt mit NetBarcodefür die 1D-Barcodenerzeugung beginnt und später 2D-Formate, Lesefähigkeiten oder Klarstellungen zu den Lizenzpflichten von SixLabors.ImageSharp benötigt — all das liegt außerhalb des Umfangs von NetBarcode.

Warum von NetBarcodemigrieren?

Formatobergrenze: NetBarcode's Type Enum definiert genau 11 Barcode-Formate, alle linear. Es gibt keinen Eintrag für QR Code, DataMatrix, PDF417 oder Aztec. Wenn ein Projekt eine QR-Code-Anforderung hinzufügt – sei es für kontaktlose Lieferlinks, mobile Deep Links oder eine DataMatrix-Vorgabe für die Pharmaindustrie – kann NetBarcodediese nicht erfüllen. Der einzige Ausweg innerhalb der Architektur der Bibliothek besteht darin, die Verwendung für dieses Format einzustellen und ein separates Paket einzuführen. Jedes zusätzliche Formatkriterium, das außerhalb des 11-Eintrag-Enums liegt, fügt einen weiteren Bibliothekseintrag zum Abhängigkeitsbaum hinzu.

Keine Lese-API: NetBarcodegeneriert Barcode-Bilder, bietet aber keine Methode zum Dekodieren dieser Bilder. Für Projekte, die Rücksendeetiketten scannen, Barcodewerte aus Lieferantenrechnungen extrahieren oder überprüfen müssen, ob ein gedruckter Barcode mit seinen Quelldaten übereinstimmt, ist eine separate Lesebibliothek erforderlich. ZXing .NET ist die gängigste Wahl und führt eine dritte API-Oberfläche in eine Codebasis ein, die bereits NetBarcodeund typischerweise eine QR-spezifische Bibliothek enthält.

ImageSharp Kommerzielle Lizenz: NetBarcodehängt von SixLabors.ImageSharp ab, das eine geteilte kommerzielle Lizenz verwendet. Das kostenlose Angebot gilt für Open-Source-Projekte und Unternehmen unterhalb einer bestimmten jährlichen Umsatzschwelle; über diesem Schwellenwert ist eine kommerzielle Lizenz erforderlich. Diese Bedingung ist in die transitive Abhängigkeitskette eingebettet und wird von NuGet während der Installation nicht angezeigt. Ein Einzelhandels- oder Logistikunternehmen, das Barcodes in großem Umfang verarbeitet – genau der Anwendungsfall, den NetBarcodeanvisiert –, kann möglicherweise über der Schwelle operieren, ohne die Verpflichtung geprüft zu haben.

Multi-Library Accumulation: Projekte, die auf QRCoder zurückgreifen, wenn QR-Codes benötigt werden, und dann auf ZXing .NET , wenn das Lesen erforderlich wird, häufen drei separate barcodebezogene Abhängigkeiten an. Jedes dieser Systeme hat seinen eigenen Veröffentlichungsplan, seine eigenen ImageSharp-Versionsanforderungen und seine eigene zu pflegende API. Die Konsolidierung in eine einzige Bibliothek, die Generierung, Lesen, 1D und 2D abdeckt, beseitigt das Problem der bibliotheksübergreifenden Versionsverwaltung.

Das grundsätzliche Problem

Ein Projekt, das zunächst nur mit NetBarcodearbeitet und dann auf 2D-Formate erweitert wird, führt letztendlich zu einem solchen aufgeteilten Import:

// NetBarcodefor 1D — one library, one API
using NetBarcode;
var code128 = new Barcode("12345", Type.Code128);
code128.SaveImageFile("label.png");

// QRCoder added separately for QR — second library, second API
using QRCoder;
var qrGenerator = new QRCodeGenerator();
var qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var png = new PngByteQRCode(qrData).GetGraphic(20);
File.WriteAllBytes("qr.png", png);
// NetBarcodefor 1D — one library, one API
using NetBarcode;
var code128 = new Barcode("12345", Type.Code128);
code128.SaveImageFile("label.png");

// QRCoder added separately for QR — second library, second API
using QRCoder;
var qrGenerator = new QRCodeGenerator();
var qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var png = new PngByteQRCode(qrData).GetGraphic(20);
File.WriteAllBytes("qr.png", png);
Imports NetBarcode
Imports QRCoder
Imports System.IO

' NetBarcode for 1D — one library, one API
Dim code128 As New Barcode("12345", Type.Code128)
code128.SaveImageFile("label.png")

' QRCoder added separately for QR — second library, second API
Dim qrGenerator As New QRCodeGenerator()
Dim qrData As QRCodeData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)
Dim png As Byte() = New PngByteQRCode(qrData).GetGraphic(20)
File.WriteAllBytes("qr.png", png)
$vbLabelText   $csharpLabel

Nach der Migration zu IronBarcode stammen die gleichen beiden Ausgaben von einem einzigen Import:

using IronBarCode;

BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128)
    .SaveAsPng("label.png");

BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsPng("qr.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128)
    .SaveAsPng("label.png");

BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsPng("qr.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128) _
    .SaveAsPng("label.png")

BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
    .SaveAsPng("qr.png")
$vbLabelText   $csharpLabel

IronBarcode vs. NetBarcode: Funktionsvergleich

Feature NetBarcode IronBarcode
1D-Barcode-Generierung Ja Ja
2D-Barcode-Generierung (QR, DataMatrix, PDF417, Aztec) Nein Ja
Barcode-Lesen aus Bildern Nein Ja
Barcode-Lesen aus PDF-Dokumenten Nein Ja
1D-Format-Anzahl 11 30+
2D-Format-Anzahl 0 Ab 8 Jahren
Gesamtsymboliken 11 50+
GS1-128, GS1 DataBar Nein Ja
Postformate Nein Ja
SVG-Ausgabe Nein Ja
Stapelverarbeitung Handbuch Eingebaut
ImageSharp-Abhängigkeit Ja (geteilte Lizenz) Nein
Kommerzielle Unterstützung Gemeinschaft Professionell
Lizenzmodell MIT (+ ImageSharp-Bedingungen) Kommerziell

Schnellstart: Migration von NetBarcodezu IronBarcode

Schritt 1: Ersetzen des NuGet-Pakets

NetBarcode und seine transitive ImageSharp-Abhängigkeit entfernen:

dotnet remove package NetBarcode
dotnet remove package SixLabors.ImageSharp
dotnet remove package NetBarcode
dotnet remove package SixLabors.ImageSharp
SHELL

Bitte beachten Sie, dass SixLabors.ImageSharp in der wiederhergestellten Paketliste erneut erscheinen kann, wenn andere Pakete im Projekt es auch transitiv referenzieren. Nach der Entfernung führen Sie dotnet list package --include-transitive aus, um zu bestätigen, ob ImageSharp verbleibt und ob die kommerzielle Lizenzbedingung weiterhin für das Projekt gilt.

Schritt 2: IronBarcode hinzufügen

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

Der Name des NuGet-Pakets ist IronBarcode; der im Code verwendete Namespace ist IronBarCode (beachten Sie das große C).

Schritt 3: Namensräume aktualisieren und Lizenz initialisieren

Ersetzen Sie die alten using-Anweisungen in jeder Datei, die NetBarcode-Aufrufe enthielt:

// Entfernen these:
// using NetBarcode;
// using SixLabors.ImageSharp;
// using SixLabors.ImageSharp.PixelFormats;
// using SixLabors.Fonts;

// Add this:
using IronBarCode;
// Entfernen these:
// using NetBarcode;
// using SixLabors.ImageSharp;
// using SixLabors.ImageSharp.PixelFormats;
// using SixLabors.Fonts;

// Add this:
using IronBarCode;
Imports IronBarCode
$vbLabelText   $csharpLabel

Fügen Sie die Lizenzinitialisierung einmal beim Anwendungsstart hinzu — in Program.cs, Startup.cs oder dem Einstiegspunkt des Projekts:

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

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Zur Evaluierung steht ein kostenloser Testschlüssel zur Verfügung; Durch den Kauf einer Lizenz wird das Testwasserzeichen aus den generierten Barcode-Bildern entfernt.

Beispiele für die Code-Migration

Code-128-Generierung

Das am häufigsten verwendete NetBarcode-Anwendungsmuster lässt sich durch eine Änderung des Konstruktors in eine statische Methode und eine Umbenennung der Methode direkt auf IronBarcode übertragen.

NetBarcode-Ansatz:

using NetBarcode;

var barcode = new Barcode("12345678901234", Type.Code128);
barcode.SaveImageFile("shipping-label.png");
using NetBarcode;

var barcode = new Barcode("12345678901234", Type.Code128);
barcode.SaveImageFile("shipping-label.png");
Imports NetBarcode

Dim barcode As New Barcode("12345678901234", Type.Code128)
barcode.SaveImageFile("shipping-label.png")
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;

BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128) _
    .SaveAsPng("shipping-label.png")
$vbLabelText   $csharpLabel

Der new Barcode(data, Type.X) Konstruktor wird zu BarcodeWriter.CreateBarcode(data, BarcodeEncoding.X). Die SaveImageFile() Methode wird zu SaveAsPng(), SaveAsJpeg() oder SaveAsWindowsBitmap(), abhängig vom erforderlichen Ausgabeformat. Alle verfügbaren Optionen zur Generierung von 1D-Barcodes sind in den Anleitungen von IronBarcode dokumentiert.

EAN-13

Die Barcode-Typen für Einzelhandelsprodukte lassen sich durch eine Konstantenumbenennung und eine Methodenumbenennung direkt zwischen Bibliotheken abbilden.

NetBarcode-Ansatz:

using NetBarcode;

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

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

Dim ean13 As New Barcode("5901234123457", Type.EAN13)
ean13.SaveImageFile("product-ean.png")
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .SaveAsPng("product-ean.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .SaveAsPng("product-ean.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13) _
    .SaveAsPng("product-ean.png")
$vbLabelText   $csharpLabel

Die Konstante der Kodierung stimmt mit den NetBarcodeType Enum-Mitgliedsnamen überein, wo direkte Entsprechungen existieren. Beachten Sie, dass UPC-A (Type.UPCA), UPC-E (Type.UPCE), ITF (Type.ITF) und MSI (Type.MSI) nicht Teil des NetBarcodeType Enums sind — falls diese Formate erforderlich sind, unterstützt IronBarcode sie nativ über BarcodeEncoding.UPCA, BarcodeEncoding.UPCE, BarcodeEncoding.ITF und BarcodeEncoding.MSI.

GetImage() zu ToPngBinaryData()

NetBarcode's GetImage() Methode gibt SixLabors.ImageSharp.Image<Rgba32> zurück, was explizite ImageSharp-Importe im aufrufenden Code erfordert und die nachgelagerte Logik mit der ImageSharp API verknüpft. IronBarcode stellt binäre und Stromausgabemethoden direkt auf dem GeneratedBarcode Objekt bereit, wodurch die ImageSharp-Abhängigkeit im aufrufenden Code vollständig entfällt.

NetBarcode-Ansatz:

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

var barcode = new Barcode("12345", Type.Code128);
Image<Rgba32> image = barcode.GetImage();

using var stream = new MemoryStream();
image.SaveAsPng(stream);
byte[] bytes = stream.ToArray();
using NetBarcode;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;

var barcode = new Barcode("12345", Type.Code128);
Image<Rgba32> image = barcode.GetImage();

using var stream = new MemoryStream();
image.SaveAsPng(stream);
byte[] bytes = stream.ToArray();
Imports NetBarcode
Imports SixLabors.ImageSharp
Imports SixLabors.ImageSharp.PixelFormats
Imports System.IO

Dim barcode As New Barcode("12345", Type.Code128)
Dim image As Image(Of Rgba32) = barcode.GetImage()

Using stream As New MemoryStream()
    image.SaveAsPng(stream)
    Dim bytes As Byte() = stream.ToArray()
End Using
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;

var barcode = BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128);

// Retrieve bytes directly — no ImageSharp type in calling code
byte[] bytes = barcode.ToPngBinaryData();

// Or write to a stream directly
using var stream = new MemoryStream();
barcode.SaveAsPng(stream);
using IronBarCode;

var barcode = BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128);

// Retrieve bytes directly — no ImageSharp type in calling code
byte[] bytes = barcode.ToPngBinaryData();

// Or write to a stream directly
using var stream = new MemoryStream();
barcode.SaveAsPng(stream);
Imports IronBarCode

Dim barcode = BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128)

' Retrieve bytes directly — no ImageSharp type in calling code
Dim bytes As Byte() = barcode.ToPngBinaryData()

' Or write to a stream directly
Using stream As New MemoryStream()
    barcode.SaveAsPng(stream)
End Using
$vbLabelText   $csharpLabel

Code, der weitere ImageSharp-Manipulationen am Image<Rgba32> Ergebnis durchgeführt hat — Größenänderung, Komposition, Formatkonvertierung — müssen diese Operationen individuell bewertet werden, da IronBarcode kein ImageSharp-Objekt bereitstellt.

Ersetzen von NetBarcodeund QRCoder

Projekte, die NetBarcodeparallel zu QRCoder verwenden, können beide gleichzeitig ersetzen. IronBarcode's 2D-Generierung verwendet die gleiche BarcodeWriter.CreateBarcode Methode wie seine 1D-Generierung; nur die BarcodeEncoding Konstante unterscheidet sich. Informationen zu Kodierungsoptionen und Konfiguration finden Sie im Leitfaden zur 2D-Barcode-Generierung .

NetBarcode- und QRCoder-Ansatz:

using NetBarcode;
using QRCoder;

// 1D with NetBarcode
var code128 = new Barcode("12345", Type.Code128);
code128.SaveImageFile("label.png");

// QR with QRCoder
var qrGenerator = new QRCodeGenerator();
var qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrData);
File.WriteAllBytes("qr.png", qrCode.GetGraphic(20));
using NetBarcode;
using QRCoder;

// 1D with NetBarcode
var code128 = new Barcode("12345", Type.Code128);
code128.SaveImageFile("label.png");

// QR with QRCoder
var qrGenerator = new QRCodeGenerator();
var qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrData);
File.WriteAllBytes("qr.png", qrCode.GetGraphic(20));
Imports NetBarcode
Imports QRCoder

' 1D with NetBarcode
Dim code128 As New Barcode("12345", Type.Code128)
code128.SaveImageFile("label.png")

' QR with QRCoder
Dim qrGenerator As New QRCodeGenerator()
Dim qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)
Dim qrCode As New PngByteQRCode(qrData)
File.WriteAllBytes("qr.png", qrCode.GetGraphic(20))
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;

// 1D — same API as 2D
BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128)
    .SaveAsPng("label.png");

// QR — change the encoding constant, nothing else
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsPng("qr.png");

// Additional 2D formats available with no further imports
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix)
    .SaveAsPng("pharma-label.png");
using IronBarCode;

// 1D — same API as 2D
BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128)
    .SaveAsPng("label.png");

// QR — change the encoding constant, nothing else
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsPng("qr.png");

// Additional 2D formats available with no further imports
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix)
    .SaveAsPng("pharma-label.png");
Imports IronBarCode

' 1D — same API as 2D
BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128) _
    .SaveAsPng("label.png")

' QR — change the encoding constant, nothing else
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
    .SaveAsPng("qr.png")

' Additional 2D formats available with no further imports
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix) _
    .SaveAsPng("pharma-label.png")
$vbLabelText   $csharpLabel

Hinzufügen der Lesefähigkeit

Falls das Projekt auch ZXing .NET zum Einlesen verwendet, kann diese Abhängigkeit zusammen mit NetBarcodeentfernt werden. IronBarcode's BarcodeReader verarbeitet Bilder und PDF-Dokumente mit automatischer Format-Erkennung.

ZXing .NET -Ansatz:

using ZXing;
using ZXing.Common;
using ZXing.Rendering;

var reader = new BarcodeReaderGeneric();
reader.Options = new DecodingOptions { TryHarder = true };

// Bitmap loading and format-specific handling required before decode call
using ZXing;
using ZXing.Common;
using ZXing.Rendering;

var reader = new BarcodeReaderGeneric();
reader.Options = new DecodingOptions { TryHarder = true };

// Bitmap loading and format-specific handling required before decode call
Imports ZXing
Imports ZXing.Common
Imports ZXing.Rendering

Dim reader = New BarcodeReaderGeneric()
reader.Options = New DecodingOptions With {.TryHarder = True}

' Bitmap loading and format-specific handling required before decode call
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;

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

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

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

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

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

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

Eine vollständige Dokumentation der Leseoptionen finden Sie im Leitfaden "Barcodes aus Bildern lesen" . Darin werden die Einstellungen für Geschwindigkeitsanpassung, Mehrfach-Barcode-Erkennung und Bildkorrektur behandelt.

NetBarcodeAPI zu IronBarcode 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.Code39) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code39) Direktes Mapping
new Barcode(data, Type.EAN8) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.EAN8) Direktes Mapping
new Barcode(data, Type.Codabar) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Codabar) Direktes Mapping
new Barcode(data, Type.Code93) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code93) Direktes Mapping
barcode.SaveImageFile("x.png") .SaveAsPng("x.png") Methodenumbenennung
barcode.SaveImageFile("x.jpg") .SaveAsJpeg("x.jpg") Methodenumbenennung
barcode.GetImage()Image<Rgba32> .ToPngBinaryData() oder .SaveAsPng() Kein ImageSharp-Typ verfügbar
Kein Type.QRCode BarcodeEncoding.QRCode Neue Fähigkeit
Kein Type.DataMatrix BarcodeEncoding.DataMatrix Neue Fähigkeit
Kein Type.PDF417 BarcodeEncoding.PDF417 Neue Fähigkeit
Kein Type.Aztec BarcodeEncoding.Aztec Neue Fähigkeit
Keine Lese-API BarcodeReader.Read(path) Neue Fähigkeit
using NetBarcode; using IronBarCode; Namespace-Ersetzung
using SixLabors.ImageSharp; Entfernen Nicht mehr benötigt
using SixLabors.ImageSharp.PixelFormats; Entfernen Nicht mehr benötigt
using SixLabors.Fonts; Entfernen Nicht mehr benötigt

Die vollständige Liste der Kodierungskonstanten finden Sie in der Referenz der unterstützten Barcode-Formate .

Gängige Migrationsprobleme und Lösungen

Problem 1: Transitive Abhängigkeit von ImageSharp bleibt nach Paketentfernung bestehen

Problem: Nach dem Ausführen von dotnet remove package NetBarcode zeigt dotnet restore, dass SixLabors.ImageSharp immer noch im Abhängigkeitsbaum vorhanden ist, da ein anderes Paket im Projekt es ebenfalls referenziert.

Lösung: Führen Sie dotnet list package --include-transitive aus, um zu identifizieren, welches Paket immer noch ImageSharp einzieht. Wenn es nur NetBarcodeist, sollte die Entfernung des expliziten Paketverweises und die Wiederherstellung es klären. Wenn ein anderes Paket verantwortlich ist, bleibt die ImageSharp-Abhängigkeit dieses Pakets und die Bedingung der kommerziellen Lizenz unabhängig von der Entfernung von NetBarcodeim Geltungsbereich.

dotnet list package --include-transitive | grep -i imagesharp
dotnet list package --include-transitive | grep -i imagesharp
SHELL

Ausgabe 2: Bild Der Typ kann nach der Entfernung nicht aufgelöst werden.

Problem: Nach dem Entfernen des SixLabors.ImageSharp-Pakets führt jede als Image<Rgba32> deklarierte Variable oder als SixLabors.ImageSharp.Image<Rgba32> typisierte Parameter zu einem Kompilierungsfehler, weil der Typ nicht mehr verfügbar ist.

Lösung: Ersetzen Sie jede Verwendung durch die entsprechende IronBarcode Ausgabemethode. Wenn die Variable verwendet wurde, um Bytes zu erhalten, ersetzen Sie sie durch .ToPngBinaryData(). Wenn sie in einen Strom geschrieben wurde, ersetzen Sie sie durch .SaveAsPng(stream). Wenn sie in eine Datei gespeichert wurde, ersetzen Sie sie durch .SaveAsPng(path).

// Before — requires SixLabors.ImageSharp reference
Image<Rgba32> img = barcode.GetImage();
img.SaveAsPng(stream);

// After — no external image type required
barcode.SaveAsPng(stream);
// Before — requires SixLabors.ImageSharp reference
Image<Rgba32> img = barcode.GetImage();
img.SaveAsPng(stream);

// After — no external image type required
barcode.SaveAsPng(stream);
' Before — requires SixLabors.ImageSharp reference
Dim img As Image(Of Rgba32) = barcode.GetImage()
img.SaveAsPng(stream)

' After — no external image type required
barcode.SaveAsPng(stream)
$vbLabelText   $csharpLabel

Ausgabe 3: Kontext der Breaking Changes in Version 1.8

Problem: Codebasen, die gegen NetBarcodevor Version 1.8 geschrieben wurden, können GetImage() Aufrufe haben, die das Ergebnis ohne explizite Typisierung speicherten und sich auf den vor Version 1.8 internen Rückgabewert verließen. Diese Aufrufe können nach einem NetBarcode-Update bereits fehlerhaft sein, unabhängig von der IronBarcode -Migration.

Lösung: Verwenden Sie die IronBarcode-Migration als Gelegenheit, jeden bereits vorhandenen Fehler vor Version 1.8 gleichzeitig zu beheben. Alle GetImage() Aufrufstellen sollten mit einer projektweiten Suche gefunden und während des Migrationsdurchgangs durch die geeignete IronBarcode-Ausgabemethode ersetzt werden. Die grep-Befehle in der unten stehenden Migrationscheckliste identifizieren diese Speicherorte.

NetBarcode-Migrations-Checkliste

Vor der Migration

Prüfen Sie vor jeglichen Änderungen die gesamte NetBarcode-Nutzung:

grep -r "using NetBarcode" ./src
grep -r "new Barcode(" ./src
grep -r "Type\.Code128\|Type\.EAN13\|Type\.Code39\|Type\.EAN8" ./src
grep -r "Type\.Codabar\|Type\.Code93" ./src
grep -r "SaveImageFile(" ./src
grep -r "GetImage(" ./src
grep -r "using SixLabors\.ImageSharp" ./src
grep -r "Image<Rgba32>" ./src
grep -r "using NetBarcode" ./src
grep -r "new Barcode(" ./src
grep -r "Type\.Code128\|Type\.EAN13\|Type\.Code39\|Type\.EAN8" ./src
grep -r "Type\.Codabar\|Type\.Code93" ./src
grep -r "SaveImageFile(" ./src
grep -r "GetImage(" ./src
grep -r "using SixLabors\.ImageSharp" ./src
grep -r "Image<Rgba32>" ./src
SHELL
  • Identifizieren Sie alle Dateien, die eine Änderung der using-Direktive erfordern.
  • Notieren Sie alle GetImage() Aufrufstellen und wie das zurückgegebene Image<Rgba32> Objekt nachgelagert verwendet wird
  • Prüfen Sie, ob QRCoder oder ZXing .NET vorhanden sind und im selben Durchgang entfernt werden können.
  • Führen Sie dotnet list package --include-transitive aus, um den aktuellen ImageSharp-Abhängigkeitszustand vor der Entfernung zu dokumentieren
  • Besorgen Sie sich einen IronBarcode -Lizenzschlüssel (ein kostenloser Testschlüssel ist ohne Kauf erhältlich)

Code-Aktualisierung

  1. Führen Sie dotnet remove package NetBarcode aus
  2. Führen Sie dotnet remove package SixLabors.ImageSharp aus, wenn es nicht von anderen Paketen verwendet wird
  3. Führen Sie dotnet add package IronBarcode aus
  4. Fügen Sie IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; beim Anwendungsstart hinzu
  5. Ersetzen Sie using NetBarcode; durch using IronBarCode; in jeder betroffenen Datei
  6. Entfernen Sie using SixLabors.ImageSharp;, using SixLabors.ImageSharp.PixelFormats; und using SixLabors.Fonts; aus allen Dateien
  7. Übersetzen Sie jeden new Barcode(data, Type.X) Aufruf zu BarcodeWriter.CreateBarcode(data, BarcodeEncoding.X) mithilfe der API-Zuordnungstabelle
  8. Ersetzen Sie SaveImageFile() durch SaveAsPng() oder die geeignete formatspezifische Methode
  9. Ersetzen Sie GetImage() Aufrufe durch ToPngBinaryData(), SaveAsPng() oder SaveAsPng(stream), wie es geeignet ist
  10. Entfernen Sie bei der Entfernung von QRCoder: Ersetzen Sie QRCodeGenerator + PngByteQRCode Ketten mit BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)
  11. Entfernen Sie bei der Entfernung von ZXing.Net: Ersetzen Sie die Lesereinrichtung mit BarcodeReader.Read(path)

Post-Migrationstests

  • Erstellen Sie das Projekt und stellen Sie sicher, dass keine Kompilierungsfehler auftreten.
  • Führen Sie vorhandene Unit-Tests gegen die generierte Barcode-Ausgabe aus.
  • Überprüfen Sie die Barcode-Bilder visuell auf korrekte Symbolik und lesbaren Inhalt.
  • Überprüfen Sie die QR-Code-Ausgabe, falls dieses Format während der Migration hinzugefügt wurde.
  • Testen der Lesefunktion, falls Barcode-Scanning hinzugefügt wurde
  • Führen Sie dotnet list package --include-transitive aus, um zu bestätigen, dass ImageSharp nicht mehr vorhanden ist, wenn es entfernt wurde
  • Stellen Sie sicher, dass die Initialisierung des Lizenzschlüssels vor dem ersten Barcode-Vorgang ausgeführt wird.

Wichtigste Vorteile der Migration zu IronBarcode

Gebündelte Formatabdeckung: Nach der Migration sind QR-Codes, DataMatrix, PDF417, Aztec und alle anderen 2D-Formate über denselben API-Aufruf verfügbar, der für Code128 und EAN-13 verwendet wird. Keine zweite Bibliothek ist notwendig, wenn die Formatanforderungen erweitert werden, und die BarcodeEncoding Konstante ist das Einzige, das sich zwischen den Formattypen ändert.

Eingebaute Leseerkennung: BarcodeReader.Read() verarbeitet Bilddateien und PDF-Dokumente mit automatischer Format-Erkennung. Projekte, die bisher ZXing .NET zum Lesen benötigten, können diese Abhängigkeit beseitigen und auf eine einzige Barcode-Bibliothek umstellen, wodurch sich der Umfang der API, die die Entwickler des Projekts erlernen müssen, verringert.

Keine ImageSharp-Verpflichtung: IronBarcode hat keine Abhängigkeit von SixLabors.ImageSharp. Nach der Migration gilt die geteilte kommerzielle Lizenzbedingung, die in den transitive Abhängigkeiten von NetBarcodeeingebettet war, nicht mehr für das Projekt. Lizenzkonformitätsprüfungen werden einfacher, da die Verpflichtungen der Barcode-Bibliothek direkt angegeben sind und nicht vom Umsatzschwellenwert einer Drittanbieter-Bildverarbeitungsbibliothek abhängen.

Stabile öffentliche API: IronBarcode stellt keine Drittanbietertypen in seiner öffentlichen API-Oberfläche zur Verfügung. Der GeneratedBarcode Rückgabewert von BarcodeWriter.CreateBarcode ist IronBarcode's eigener Typ, was bedeutet, dass zukünftige Updates in IronBarcode's interner Wiedergabe keine strukturellen Änderungen im aufrufenden Code hervorrufen werden, wie es die Typänderung von NetBarcode's v1.8 GetImage() tat.

Nur noch eine Abhängigkeit zu pflegen: Durch den Ersatz von NetBarcode, QRCoder und ZXing .NET durch IronBarcode reduziert sich der Aufwand für Upgrades von drei Zyklen auf drei Versionen, drei Versionen von Versionshinweisen und drei potenzielle Versionskonflikte auf eine einzige. Mit fortschreitender Entwicklung der .NET Versionen und der damit einhergehenden Notwendigkeit von Abhängigkeitsaktualisierungen reduziert sich der Wartungsaufwand auf eine einzige Bibliothek anstatt auf drei.

Hinweis:NetBarcode, QRCoder und ZXing.NET sind eingetragene Warenzeichen ihrer jeweiligen Eigentümer. Diese Seite ist nicht mit NetBarcode, QRCoder oder ZXing.NET verbunden, wird nicht von ihnen unterstützt oder gesponsert. Alle Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Eigentümer. Vergleiche dienen nur zu Informationszwecken und spiegeln öffentlich zugängliche Informationen zum Zeitpunkt des Schreibens wider.

Häufig gestellte Fragen

Warum sollte ich von NetBarcode zu IronBarcode migrieren?

Zu den häufigsten Gründen gehören die Vereinfachung der Lizenzierung (Beseitigung der Komplexität von SDK und Laufzeitschlüsseln), die Beseitigung von Durchsatzbeschränkungen, die Verbesserung der nativen PDF-Unterstützung, die Verbesserung der Docker/CI/CD-Bereitstellung und die Verringerung von API-Boilerplate im Produktionscode.

Wie kann ich NetBarcode-API-Aufrufe durch IronBarcode ersetzen?

Ersetzen Sie Instanzerstellung und Lizenzierung durch IronBarCode.License.LicenseKey = "key". Ersetzen Sie die Leseaufrufe durch BarcodeReader.Read(path) und die Schreibaufrufe durch BarcodeWriter.CreateBarcode(data, encoding). Statische Methoden erfordern keine Instanzverwaltung.

Wie viel Code ändert sich bei der Migration von NetBarcode zu IronBarcode?

Die meisten Migrationen führen zu weniger Codezeilen. Lizenzierungs-Boilerplate, Instanzkonstruktoren und explizite Formatkonfiguration werden entfernt. Zentrale Lese-/Schreibvorgänge werden auf kürzere IronBarcode-Äquivalente mit saubereren Ergebnisobjekten abgebildet.

Muss ich während der Migration sowohl NetBarcode als auch IronBarcode installiert lassen?

Nein. Die meisten Migrationen sind direkte Ersetzungen und keine Paralleloperationen. Migrieren Sie eine Serviceklasse nach der anderen, ersetzen Sie die NuGet-Referenz und aktualisieren Sie die Instanzierungs- und API-Aufrufmuster, bevor Sie zur nächsten Klasse übergehen.

Wie lautet der NuGet-Paketname für IronBarcode?

Das Paket ist 'IronBarCode' (mit großem B und C). Installieren Sie es mit 'Install-Package IronBarCode' oder 'dotnet add package IronBarCode'. Die using-Anweisung im Code lautet 'using IronBarCode;'.

Wie vereinfacht IronBarcode die Docker-Bereitstellung im Vergleich zu NetBarcode?

IronBarcode ist ein NuGet-Paket, für das keine externen SDK-Dateien oder Lizenzkonfigurationen erforderlich sind. In Docker setzen Sie die Umgebungsvariable IRONBARCODE_LICENSE_KEY und das Paket übernimmt die Lizenzvalidierung beim Start.

Erkennt IronBarcode nach der Migration von NetBarcode alle Barcodeformate automatisch?

Ja, IronBarcode erkennt automatisch die Symbologie aller unterstützten Formate. Eine explizite Aufzählung von BarcodeTypes ist nicht erforderlich. Wenn das Format bereits bekannt ist und die Leistung eine Rolle spielt, ermöglicht BarcodeReaderOptions die Einschränkung des Suchraums als eine Optimierung.

Kann IronBarcode Barcodes aus PDFs ohne eine separate Bibliothek lesen?

Ja, BarcodeReader.Read("document.pdf") verarbeitet PDF-Dateien nativ. Die Ergebnisse enthalten PageNumber, Format, Value und Confidence für jeden gefundenen Barcode. Es ist kein externer PDF-Rendering-Schritt erforderlich.

Wie handhabt IronBarcode die parallele Verarbeitung von Barcodes?

Die statischen Methoden von IronBarcode sind zustandslos und thread-sicher. Verwenden Sie Parallel.ForEach direkt über Dateilisten ohne Instanzmanagement pro Thread. BarcodeReaderOptions.MaxParallelThreads steuert das interne Thread-Budget.

Welche Ergebniseigenschaften ändern sich bei der Migration von NetBarcode zu IronBarcode?

Übliche Umbenennungen: BarcodeValue wird zu Value, BarcodeType wird zu Format. IronBarcode-Ergebnisse fügen auch Confidence und PageNumber hinzu. Eine lösungsweite Such- und Ersetzungsfunktion übernimmt die Umbenennungen im bestehenden Ergebnisverarbeitungscode.

Wie kann ich die IronBarcode-Lizenzierung in einer CI/CD-Pipeline einrichten?

Speichern Sie IRONBARCODE_LICENSE_KEY als Pipeline-Geheimnis und weisen Sie IronBarCode.License.LicenseKey im Startup-Code der Anwendung zu. Ein Geheimnis deckt alle Umgebungen ab, einschließlich Entwicklung, Test, Staging und Produktion.

Unterstützt IronBarcode die Generierung von QR-Codes mit benutzerdefiniertem Styling?

Ja. QRCodeWriter.CreateQrCode() unterstützt benutzerdefinierte Farben über ChangeBarCodeColor(), das Einbetten von Logos über AddBrandLogo(), konfigurierbare Fehlerkorrekturstufen und mehrere Ausgabeformate einschließlich PNG, JPG, PDF und Stream.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen

Iron-Support-Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an