Dynamsoft Barcode Reader vs IronBarcode: C# Barcode Bibliothek Vergleich
Dynamsoft Barcode Reader ist in dem, wofür er entwickelt wurde – dem Einlesen von Barcodes aus einem Live-Kamerabild mit 30 Bildern pro Sekunde – wirklich hervorragend. Die Algorithmen sind schnell, die Symbolisierungsunterstützung ist breit gefächert, und das mobile SDK, das es auf iOS und Android einbindet, ist eine der besseren Optionen in diesem Bereich. Wenn es sich bei Ihrem Produkt um eine Lagerscanning-App handelt, bei der ein Mitarbeiter ein Smartphone auf ein Palettenetikett richtet und eine Erkennungszeit von unter 100 ms erwartet, ist Dynamsoft eine glaubwürdige Option.
Befinden sich Ihre Barcodes in PDF-Dateien auf einem Server ohne Internetverbindung, ist die Bibliothek nicht mit dem Anwendungsfall kompatibel – die Lizenzvalidierung erinnert Sie bei jedem Start daran. BarcodeReader.InitLicense stellt eine Netzwerkanfrage an den Lizenzserver von Dynamsoft. In einem vom Internet abgeschotteten Rechenzentrum, einer isolierten VPC oder einer beliebigen Umgebung, in der der ausgehende Internetzugang eingeschränkt ist, schlägt dieser Anruf fehl, bevor auch nur ein einziger Barcode dekodiert wurde. Die Offline-Alternative – der Bezug einer gerätespezifischen Lizenzdatei mit UUID vom Dynamsoft-Support – funktioniert zwar, verursacht aber einen zusätzlichen operativen Aufwand, der in den meisten Dokumentenverarbeitungs-Workflows nicht eingeplant war.
Bei diesem Vergleich geht es um die Eignung für den jeweiligen Anwendungsfall, nicht um die Qualität der Bibliothek. Dynamsoft hat eine kamerazentrierte Bibliothek entwickelt und diese gut umgesetzt. Die Frage ist, ob sich die Annahmen des kamerazentrierten Ansatzes auf einen serverseitigen Dokumentenverarbeitungs-Workflow übertragen lassen.
Dynamsoft Barcode-Lesegerät verstehen
Die Architektur von Dynamsoft spiegelt den Ursprung des Unternehmens im Kamerabereich wider. Die Startsequenz erfordert eine Online-Lizenzvalidierung, das Einstellungsmodell enthält für die Echtzeit-Bildverarbeitung optimierte Timeout-Werte, und die API stellt Konzepte wie DeblurLevel bereit, die speziell für die variablen Fokus- und Bewegungsunschärfebedingungen einer Handkamera existieren:
// Dynamsoft: license server call required at startup
using Dynamsoft.DBR;
// This call contacts Dynamsoft's license server — fails in air-gapped environments
int errorCode = BarcodeReader.InitLicense("YOUR-LICENSE-KEY", out string errorMsg);
if (errorCode != (int)EnumErrorCode.DBR_OK)
throw new InvalidOperationException($"License validation failed: {errorMsg}");
var reader = new BarcodeReader();
// Settings tuned for camera frame processing
var settings = reader.GetRuntimeSettings();
settings.DeblurLevel = 5; // compensates for camera motion blur
settings.ExpectedBarcodesCount = 1; // camera focus: one barcode at a time
settings.Timeout = 100; // 100ms — optimized for 30fps video pipeline
reader.UpdateRuntimeSettings(settings);
// Dynamsoft: license server call required at startup
using Dynamsoft.DBR;
// This call contacts Dynamsoft's license server — fails in air-gapped environments
int errorCode = BarcodeReader.InitLicense("YOUR-LICENSE-KEY", out string errorMsg);
if (errorCode != (int)EnumErrorCode.DBR_OK)
throw new InvalidOperationException($"License validation failed: {errorMsg}");
var reader = new BarcodeReader();
// Settings tuned for camera frame processing
var settings = reader.GetRuntimeSettings();
settings.DeblurLevel = 5; // compensates for camera motion blur
settings.ExpectedBarcodesCount = 1; // camera focus: one barcode at a time
settings.Timeout = 100; // 100ms — optimized for 30fps video pipeline
reader.UpdateRuntimeSettings(settings);
Imports Dynamsoft.DBR
' Dynamsoft: license server call required at startup
' This call contacts Dynamsoft's license server — fails in air-gapped environments
Dim errorCode As Integer = BarcodeReader.InitLicense("YOUR-LICENSE-KEY", errorMsg:=Nothing)
If errorCode <> CType(EnumErrorCode.DBR_OK, Integer) Then
Throw New InvalidOperationException($"License validation failed: {errorMsg}")
End If
Dim reader As New BarcodeReader()
' Settings tuned for camera frame processing
Dim settings = reader.GetRuntimeSettings()
settings.DeblurLevel = 5 ' compensates for camera motion blur
settings.ExpectedBarcodesCount = 1 ' camera focus: one barcode at a time
settings.Timeout = 100 ' 100ms — optimized for 30fps video pipeline
reader.UpdateRuntimeSettings(settings)
Dies ist eine für ihren Zweck gut konzipierte API. Die Einstellung Timeout = 100 ist sinnvoll, wenn Sie 30 Bilder pro Sekunde von einer Kamera verarbeiten und es sich nicht leisten können, 500 ms für ein einzelnes Bild zu verschwenden. Für einen Server, der eine hochgeladene PDF-Datei verarbeitet, ist ein Timeout von 100 ms eine sinnlose Einschränkung, die dazu führen kann, dass Lesevorgänge bei dichteren Barcodes fehlschlagen.
Das instanzbasierte Design — new BarcodeReader(), reader.Dispose()— folgt der Semantik einer Kamerasitzung: Sie öffnen eine Sitzung, verarbeiten Frames und schließen die Sitzung. Für die Dateiverarbeitung fügt dieser Lebenszyklus unnötigerweise zusätzlichen Code hinzu.
Das PDF-Problem
Dynamsoft Barcode Reader bietet keine native PDF-Unterstützung. Wenn es sich bei der Eingabe um eine PDF-Datei handelt, muss Ihr Code jede Seite zuerst in ein Bild umwandeln und dieses Bild dann an Dynamsoft übergeben. Hierfür ist eine separate PDF-Rendering-Bibliothek erforderlich – üblicherweise wird PdfiumViewer verwendet –, die eine NuGet Abhängigkeit, eine native Binärabhängigkeit (pdfium.dll unter Windows oder libpdfium unter Linux) und eine Rendering-Schleife um jede PDF-Operation herum hinzufügt:
// Dynamsoft PDF processing — requires PdfiumViewer (external dependency)
// dotnet add package PdfiumViewer
// dotnet add package PdfiumViewer.Native.x86_64.v8-xfa (platform-specific)
using PdfiumViewer;
using System.Drawing.Imaging;
using Dynamsoft.DBR;
public List<string> ReadBarcodesFromPdf(string pdfPath)
{
var results = new List<string>();
using (var pdfDoc = PdfDocument.Load(pdfPath))
{
for (int page = 0; page < pdfDoc.PageCount; page++)
{
// Render each page at 300 DPI
using var image = pdfDoc.Render(page, 300, 300, true);
using var ms = new MemoryStream();
image.Save(ms, ImageFormat.Png);
byte[] imageBytes = ms.ToArray();
// Now pass rendered image bytes to Dynamsoft
TextResult[] barcodes = reader.DecodeFileInMemory(imageBytes, "");
foreach (var b in barcodes)
results.Add(b.BarcodeText);
}
}
return results;
}
// Dynamsoft PDF processing — requires PdfiumViewer (external dependency)
// dotnet add package PdfiumViewer
// dotnet add package PdfiumViewer.Native.x86_64.v8-xfa (platform-specific)
using PdfiumViewer;
using System.Drawing.Imaging;
using Dynamsoft.DBR;
public List<string> ReadBarcodesFromPdf(string pdfPath)
{
var results = new List<string>();
using (var pdfDoc = PdfDocument.Load(pdfPath))
{
for (int page = 0; page < pdfDoc.PageCount; page++)
{
// Render each page at 300 DPI
using var image = pdfDoc.Render(page, 300, 300, true);
using var ms = new MemoryStream();
image.Save(ms, ImageFormat.Png);
byte[] imageBytes = ms.ToArray();
// Now pass rendered image bytes to Dynamsoft
TextResult[] barcodes = reader.DecodeFileInMemory(imageBytes, "");
foreach (var b in barcodes)
results.Add(b.BarcodeText);
}
}
return results;
}
Imports PdfiumViewer
Imports System.Drawing.Imaging
Imports Dynamsoft.DBR
Public Function ReadBarcodesFromPdf(pdfPath As String) As List(Of String)
Dim results As New List(Of String)()
Using pdfDoc = PdfDocument.Load(pdfPath)
For page As Integer = 0 To pdfDoc.PageCount - 1
' Render each page at 300 DPI
Using image = pdfDoc.Render(page, 300, 300, True)
Using ms As New MemoryStream()
image.Save(ms, ImageFormat.Png)
Dim imageBytes As Byte() = ms.ToArray()
' Now pass rendered image bytes to Dynamsoft
Dim barcodes As TextResult() = reader.DecodeFileInMemory(imageBytes, "")
For Each b In barcodes
results.Add(b.BarcodeText)
Next
End Using
End Using
Next
End Using
Return results
End Function
Dies sind drei Abhängigkeiten (Dynamsoft, PdfiumViewer und eine plattformspezifische native Binärdatei), eine Rendering-Schleife pro Seite und ein erheblicher Speicher-Overhead bei Dokumenten mit vielen Seiten.
IronBarcode liest direkt aus einer PDF-Datei:
// IronBarcode: PDF is native — no extra library, no render loop
// NuGet: dotnet add package IronBarcode
var results = BarcodeReader.Read("invoice.pdf");
foreach (var result in results)
{
Console.WriteLine($"{result.Format}: {result.Value}");
}
// IronBarcode: PDF is native — no extra library, no render loop
// NuGet: dotnet add package IronBarcode
var results = BarcodeReader.Read("invoice.pdf");
foreach (var result in results)
{
Console.WriteLine($"{result.Format}: {result.Value}");
}
' IronBarcode: PDF is native — no extra library, no render loop
' NuGet: dotnet add package IronBarcode
Dim results = BarcodeReader.Read("invoice.pdf")
For Each result In results
Console.WriteLine($"{result.Format}: {result.Value}")
Next
Ein Anruf. Kein PDF-Renderer. Keine Schleife pro Seite. Keine plattformspezifische native Binärdatei für die PDF-Unterstützung.
Lizenzkomplexität
Die Online-Lizenzvalidierung ist unkompliziert, wenn der Server über einen Internetzugang verfügt. Wenn dies nicht der Fall ist – oder wenn Netzwerkrichtlinien eine explizite Zulassungsliste für ausgehende Hosts erfordern – vergrößert sich die Angriffsfläche für Validierungsfehler:
// Dynamsoft: error code pattern required
int errorCode = BarcodeReader.InitLicense("YOUR-LICENSE-KEY", out string errorMsg);
if (errorCode != (int)EnumErrorCode.DBR_OK)
{
// Handle: network timeout, license server unreachable, invalid key,
// expired key, device count exceeded, etc.
throw new InvalidOperationException($"Dynamsoft license failed [{errorCode}]: {errorMsg}");
}
// Dynamsoft: error code pattern required
int errorCode = BarcodeReader.InitLicense("YOUR-LICENSE-KEY", out string errorMsg);
if (errorCode != (int)EnumErrorCode.DBR_OK)
{
// Handle: network timeout, license server unreachable, invalid key,
// expired key, device count exceeded, etc.
throw new InvalidOperationException($"Dynamsoft license failed [{errorCode}]: {errorMsg}");
}
Imports System
' Dynamsoft: error code pattern required
Dim errorCode As Integer = BarcodeReader.InitLicense("YOUR-LICENSE-KEY", errorMsg:=Nothing)
If errorCode <> CType(EnumErrorCode.DBR_OK, Integer) Then
' Handle: network timeout, license server unreachable, invalid key,
' expired key, device count exceeded, etc.
Throw New InvalidOperationException($"Dynamsoft license failed [{errorCode}]: {errorMsg}")
End If
Die Offline-Lizenzierung mit Dynamsoft erfordert einen separaten Arbeitsablauf. Sie rufen BarcodeReader.OutputLicenseToString() auf, um die Geräte-UUID abzurufen, senden diese UUID an den Dynamsoft-Support, um eine gerätespezifische Lizenzdatei zu erhalten, und aktivieren diese dann mit InitLicenseFromLicenseContent:
// Dynamsoft offline license — device UUID required
string uuid = BarcodeReader.OutputLicenseToString();
// Send uuid to Dynamsoft support → receive licenseContent string
int errorCode = BarcodeReader.InitLicenseFromLicenseContent("YOUR-LICENSE-KEY", licenseContent, uuid, out string errorMsg);
// Dynamsoft offline license — device UUID required
string uuid = BarcodeReader.OutputLicenseToString();
// Send uuid to Dynamsoft support → receive licenseContent string
int errorCode = BarcodeReader.InitLicenseFromLicenseContent("YOUR-LICENSE-KEY", licenseContent, uuid, out string errorMsg);
' Dynamsoft offline license — device UUID required
Dim uuid As String = BarcodeReader.OutputLicenseToString()
' Send uuid to Dynamsoft support → receive licenseContent string
Dim errorCode As Integer = BarcodeReader.InitLicenseFromLicenseContent("YOUR-LICENSE-KEY", licenseContent, uuid, errorMsg)
In einer Docker-Umgebung, in der Container kurzlebig sind und sich die UUIDs bei jedem Deployment ändern, entsteht dadurch ein kontinuierlicher operativer Aufwand. Bei jedem Containerstart ist möglicherweise eine neue UUID erforderlich, die beim Dynamsoft-Support registriert wird.
Die Aktivierung der IronBarcode -Lizenz ist eine einzelne, lokal ausgewertete Zuweisung:
// IronBarCode: local validation, no network required
IronBarCode.License.LicenseKey = "YOUR-KEY";
// IronBarCode: local validation, no network required
IronBarCode.License.LicenseKey = "YOUR-KEY";
' IronBarCode: local validation, no network required
IronBarCode.License.LicenseKey = "YOUR-KEY"
Kein Fehlercode zum Überprüfen. Keine Netzwerkabhängigkeit. Keine gerätespezifische Registrierung. Dieselbe Zeile funktioniert auf einem Entwicklungsrechner, in einer CI/CD-Pipeline, in einem Docker-Container und auf einem vom Netzwerk isolierten Server.
Anwendungsfälle Kamera vs. Datei
Ehrlich gesagt sind Dynamsoft und IronBarcode für unterschiedliche primäre Anwendungsfälle optimiert. Die folgende Tabelle verdeutlicht dies, anstatt eine Bibliothek als universell besser zu deklarieren:
| Szenario | Dynamsoft Barcode-Lesegerät | IronBarcode |
|---|---|---|
| Live-Kamerabild (30 Bilder/Sekunde) | Hervorragend – optimiert für Echtzeit | Nicht der primäre Anwendungsfall |
| Mobiles SDK (iOS/Android) | Vollständiges SDK verfügbar | .NET exklusiv |
| Serverseitige Dateiverarbeitung | Funktioniert, erfordert aber Umwege. | Primärer Anwendungsfall |
| PDF-Barcode-Lesen | Erfordert einen externen PDF-Renderer | Native Unterstützung |
| Air-Gap-Bereitstellung | Erfordert Geräte-UUID + Dynamsoft-Unterstützung | Funktioniert out of the box |
| Docker / ephemere Container | UUID-Verwaltung pro Container | Einzelne Umgebungsvariable |
| Offline-Lizenz | Gerätespezifische Datei vom Dynamsoft-Support | Standard-Lizenzschlüssel |
| ASP.NET Core API | Werke (zusätzlicher Lizenzvorschlag) | Funktioniert einwandfrei |
| Azure-Funktionen | Netzwerkrichtlinie für license.dynamsoft.com erforderlich | Keine Netzwerkverbindung erforderlich |
| Barcode-Generierung | Nein – nur Lesen | Ja – Generation und Lesen |
| QR-Code-Generierung | Nein | Ja – QRCodeWriter |
IronBarcode verstehen
IronBarcode ist eine .NET Bibliothek zum Generieren und Lesen von Barcodes. Die API ist statisch – keine Instanzen, keine Dispose-Aufrufe, kein Session-Lebenszyklus. Die Lizenzaktivierung erfolgt lokal. PDF-Unterstützung ist integriert:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// License — local validation, no network call
IronBarCode.License.LicenseKey = "YOUR-KEY";
// Read from an image file
var results = BarcodeReader.Read("label.png");
foreach (var result in results)
Console.WriteLine($"{result.Format}: {result.Value}");
// Read from a PDF — native, no extra library
var pdfResults = BarcodeReader.Read("manifest.pdf");
// Read with options for high-accuracy or high-throughput scenarios
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
MaxParallelThreads= 4
};
var multiResults = BarcodeReader.Read("multi-barcode-sheet.png", options);
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// License — local validation, no network call
IronBarCode.License.LicenseKey = "YOUR-KEY";
// Read from an image file
var results = BarcodeReader.Read("label.png");
foreach (var result in results)
Console.WriteLine($"{result.Format}: {result.Value}");
// Read from a PDF — native, no extra library
var pdfResults = BarcodeReader.Read("manifest.pdf");
// Read with options for high-accuracy or high-throughput scenarios
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
MaxParallelThreads= 4
};
var multiResults = BarcodeReader.Read("multi-barcode-sheet.png", options);
Imports IronBarCode
' License — local validation, no network call
IronBarCode.License.LicenseKey = "YOUR-KEY"
' Read from an image file
Dim results = BarcodeReader.Read("label.png")
For Each result In results
Console.WriteLine($"{result.Format}: {result.Value}")
Next
' Read from a PDF — native, no extra library
Dim pdfResults = BarcodeReader.Read("manifest.pdf")
' Read with options for high-accuracy or high-throughput scenarios
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True,
.MaxParallelThreads = 4
}
Dim multiResults = BarcodeReader.Read("multi-barcode-sheet.png", options)
Die Erzeugung ist genauso unkompliziert:
// Generate Code 128
BarcodeWriter.CreateBarcode("SHIP-7734-X", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("shipping-label.png");
// Generate QR with error correction and embedded logo
QRCodeWriter.CreateQrCode("https://track.example.com/7734", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
.AddBrandLogo("company-logo.png")
.SaveAsPng("tracking-qr.png");
// Get bytes for HTTP response
byte[] bytes = BarcodeWriter.CreateBarcode("ITEM-001", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.ToPngBinaryData();
// Generate Code 128
BarcodeWriter.CreateBarcode("SHIP-7734-X", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("shipping-label.png");
// Generate QR with error correction and embedded logo
QRCodeWriter.CreateQrCode("https://track.example.com/7734", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
.AddBrandLogo("company-logo.png")
.SaveAsPng("tracking-qr.png");
// Get bytes for HTTP response
byte[] bytes = BarcodeWriter.CreateBarcode("ITEM-001", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.ToPngBinaryData();
Imports System
' Generate Code 128
BarcodeWriter.CreateBarcode("SHIP-7734-X", BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.SaveAsPng("shipping-label.png")
' Generate QR with error correction and embedded logo
QRCodeWriter.CreateQrCode("https://track.example.com/7734", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest) _
.AddBrandLogo("company-logo.png") _
.SaveAsPng("tracking-qr.png")
' Get bytes for HTTP response
Dim bytes As Byte() = BarcodeWriter.CreateBarcode("ITEM-001", BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.ToPngBinaryData()
Funktionsvergleich
| Feature | Dynamsoft Barcode-Lesegerät | IronBarcode |
|---|---|---|
| Barcode-Lesung | Ja – kameraoptimiert | Ja – datei- und dokumentenoptimiert |
| Barcode-Generierung | Nein | Ja |
| QR-Code-Generierung | Nein | Ja – QRCodeWriter |
| Native PDF-Unterstützung | Nein – erfordert einen externen Renderer. | Ja — BarcodeReader.Read(pdf) |
| Lizenzvalidierung | Online (Lizenzserver) | Lokale |
| Air-Gap / Offline | Geräte-UUID + Dynamsoft-Unterstützung erforderlich | Standardschlüssel, funktioniert offline |
| Docker / Container | UUID-Verwaltung pro Containerinstanz | Einzelne Umgebungsvariable |
| Azure-Funktionen | Ausgehende Netzwerkrichtlinie erforderlich | Keine Netzwerkverbindung erforderlich |
| AWS Lambda | Ausgehende Netzwerkrichtlinie erforderlich | Keine Netzwerkverbindung erforderlich |
| Mobiles SDK | Verfügbar für iOS und Android | .NET exklusiv |
| Echtzeitkamera (30 Bilder/Sekunde) | Primäres Designziel | Dafür nicht ausgelegt |
| Code 128 | Ja | Ja |
| QR-Code | Ja (liest) | Ja (Lesen und Generation) |
| Datenmatrix | Ja | Ja |
| PDF417 | Ja | Ja |
| aztekisch | Ja | Ja |
| EAN / UPC | Ja | Ja |
| Instanzverwaltung | new BarcodeReader() + Dispose() | Statisch – keine Instanz |
| Mehrfach-Barcode-Lesung | Erwartete Barcode-Anzahl | ExpectMultipleBarcodes = true |
| Lesegeschwindigkeitssteuerung | Zeitüberschreitung + DeblurLevel | ReadingSpeed-Enumeration |
| Parallellesen | Manuelles Einfädeln | MaxParallelThreads |
| Preismodell | Abonnement | Unbefristet ab $749 |
| .NET Unterstützung | .NET Standard, .NET 5+ | .NET 4.6.2 bis .NET 9 |
| Plattformen | Windows, Linux, macOS | Windows, Linux, macOS, Docker, Azure, AWS Lambda |
API-Mapping-Referenz
Für Teams, die Dynamsoft-Code verwenden und verstehen müssen, wie Konzepte übersetzt werden:
| Dynamsoft Barcode-Lesegerät | IronBarcode |
|---|---|
BarcodeReader.InitLicense(key, out errorMsg) |
IronBarCode.License.LicenseKey = "key" |
errorCode != (int)EnumErrorCode.DBR_OK prüfen |
Nicht erforderlich |
BarcodeReader.OutputLicenseToString() (UUID) |
Nicht erforderlich |
BarcodeReader.InitLicenseFromLicenseContent(content, uuid) |
Nicht erforderlich |
new BarcodeReader() |
Statisch – keine Instanz |
reader.Dispose() |
Nicht erforderlich |
reader.DecodeFile(imagePath, "") |
BarcodeReader.Read(imagePath) |
reader.DecodeFileInMemory(bytes, "") |
BarcodeReader.Read(imageBytes) |
TextResult[].BarcodeText |
result.Value |
TextResult[].BarcodeFormat |
result.Format |
PublicRuntimeSettings über GetRuntimeSettings() |
new BarcodeReaderOptions { ... } |
settings.Timeout = 100 |
Speed = ReadingSpeed.Balanced |
settings.ExpectedBarcodesCount = 1 |
ExpectMultipleBarcodes = false (Standard) |
reader.UpdateRuntimeSettings(settings) |
Als Parameter an Read() übergeben |
| Externe PDF-Bibliothek + Seitenrendering-Schleife | BarcodeReader.Read("doc.pdf") |
Wenn die Teams wechseln
Serverseitige Dokumentenverarbeitung, nicht Kamerascanning. Das häufigste Migrationsszenario ist, dass ein Team sich aufgrund seines guten Rufs für Dynamsoft entschieden, die Software integriert und dann festgestellt hat, dass die kamerazentrierte API und die fehlende PDF-Unterstützung die Arbeitsabläufe in der Dokumentenverarbeitung umständlich gestalten. Das Auslesen von Barcodes aus hochgeladenen PDFs in einer Webanwendung ist ein zentraler Anwendungsfall, der in Dynamsoft Umwege erfordert, in IronBarcode jedoch mit einem einzigen Aufruf erledigt ist.
Abgeschottete oder eingeschränkte Netzwerkumgebungen. Finanzinstitute, Gesundheitssysteme und staatliche Einrichtungen verbieten häufig ausgehende Internetverbindungen von Anwendungsservern. Die Online-Lizenzvalidierung von Dynamsoft schlägt in diesen Umgebungen fehl. Der Offline-Geräte-UUID-Workflow ist zwar funktional, verursacht aber zusätzlichen Aufwand durch Supportabhängigkeiten. Teams in diesen Umgebungen migrieren häufig zu IronBarcode, gerade weil die Lizenzvalidierung keine Netzwerkkomponente aufweist.
Docker und Kubernetes verwenden kurzlebige Container. Containerisierte Bereitstellungen, bei denen Instanzen häufig skaliert werden, machen gerätebasierte Offline-Lizenzierung unpraktikabel. Je nach Infrastruktur kann jeder neue Container eine andere UUID haben. Der Lizenzschlüssel von IronBarcode funktioniert als Standard-Umgebungsvariable und muss nicht pro Instanz registriert werden.
Bedarf an Generierung und Lesefunktion. Dynamsoft ist schreibgeschützt. Anwendungen, die Barcode-Etiketten generieren, QR-Codes für Produkte drucken oder Versandmanifeste mit eingebetteten Barcodes erstellen müssen, benötigen eine zweite Bibliothek. Teams in dieser Situation schließen sich oft für IronBarcode an, um die Verwaltung zweier separater Barcode-Abhängigkeiten zu vermeiden.
Vereinfachter Betriebsablauf. Durch das Entfernen des Dynamsoft-Lizenzservers aus der Liste der erreichbaren externen Abhängigkeiten, das Entfernen der PDF-Rendering-Bibliothek und das Ersetzen der Instanzverwaltung durch statische Aufrufe wird die Anzahl potenzieller Fehlerquellen im Produktivbetrieb reduziert.
Abschluss
Dynamsoft Barcode Reader ist eine hochwertige Bibliothek, die genau für ihren vorgesehenen Anwendungsfall geeignet ist: das kamerabasierte Scannen von Barcodes in Echtzeit, insbesondere in mobilen Anwendungen. Die Algorithmen sind optimal auf die Bedingungen des Scannens mit Handgeräten abgestimmt – variable Beleuchtung, Bewegungsunschärfe, teilweise Verdeckung. Wenn das Ihr Anwendungsfall ist, kann Dynamsoft gut mithalten.
Bei der serverseitigen Dokumentenverarbeitung – dem Einlesen von Barcodes aus PDFs, dem Generieren von Barcode-Etiketten, dem Betrieb in abgeschotteten Umgebungen oder der Bereitstellung in kurzlebigen Docker-Containern – führt die Architektur der Bibliothek in jedem Schritt zu Problemen. Die Online-Lizenzvalidierung, die fehlende PDF-Unterstützung, die für Kameras optimierten Timeout-Einstellungen und der Offline-Workflow mit Geräte-UUID sind allesamt Folgen der Entwicklung für die Nutzung mit mobilen Kameras. Das sind keine Insekten; Es handelt sich um bewusste Designentscheidungen für einen anderen Kontext.
IronBarcode ist für den Dokument- und Serverkontext konzipiert. Lokale Lizenzvalidierung, natives PDF-Lesen, statische API und Generierungsunterstützung sind allesamt erstklassige Funktionen und keine Notlösungen. Die Entscheidung für eine Migration hängt davon ab, in welcher Umgebung Ihre Barcodes tatsächlich verwendet werden.
Häufig gestellte Fragen
Was ist Dynamsoft BarCode Reader?
Dynamsoft BarCode Reader 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 Dynamsoft Barcode Reader und IronBarcode?
IronBarcode verwendet eine statische, zustandslose API, die keine Instanzverwaltung erfordert, während Dynamsoft Barcode Reader 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 Dynamsoft Barcode Reader?
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 Dynamsoft Barcode Reader 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 Dynamsoft Barcode Reader?
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 im Gegensatz zu Dynamsoft vor dem Kauf testen?
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 Dynamsoft Barcode Reader 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 Dynamsoft Barcode Reader zu IronBarcode zu wechseln?
Bei der Migration von Dynamsoft Barcode Reader zu IronBarcode geht es in erster Linie darum, instanzbasierte API-Aufrufe durch die statischen Methoden von IronBarcode zu ersetzen, Lizenzierungsklauseln zu entfernen und die Namen der 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.

