Barkoder SDK 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.
Wenn Ihre Barcodes in PDF-Dateien auf einem Server sind, der nicht auf das Internet zugreifen kann, passt die Bibliothek nicht zum Anwendungsfall – und die Lizenzaktivierung wird Sie zum ersten Mal daran erinnern, wenn Sie bereitstellen. LicenseManager.InitLicense führt bei der ersten Aktivierung einen Online-Handshake mit dem Lizenzserver von Dynamsoft durch und validiert periodisch neu. In einem luftgesicherten Rechenzentrum, einem isolierten VPC oder jeder Umgebung, in der der ausgehende Internetzugang eingeschränkt ist, benötigt die erste Aktivierung eine Alternative. Der Offline-Pfad – das Abrufen eines Lizenzinhalts-Blobs von Dynamsoft und dessen Wiedergabe über InitLicenseFromLicenseContent – funktioniert, fügt jedoch einen operativen Overhead hinzu, für den die meisten Dokumentenverarbeitungs-Workflows nicht budgetiert haben.
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-Lizenzaktivierung, das Einstellungsmodell umfasst Timeout-Werte, die für die Echtzeit-Bildverarbeitung geeignet sind, und die API bietet Einstellungen, die auf die variablen Fokus- und Bewegungsunschärfebedingungen einer Handheld-Kamera abgestimmt sind:
// Dynamsoft: license activation required at startup
using Dynamsoft.CVR;
using Dynamsoft.DBR;
using Dynamsoft.License;
using Dynamsoft.Core;
// LicenseManager.InitLicense performs an online activation on first run
int errorCode = LicenseManager.InitLicense("YOUR-DYNAMSOFT-LICENSE-KEY", out string errorMsg);
if (errorCode != (int)EnumErrorCode.EC_OK)
throw new InvalidOperationException($"License activation failed: {errorMsg}");
using var router = new CaptureVisionRouter();
// Settings tuned for camera frame processing
SimplifiedCaptureVisionSettings settings = router.GetSimplifiedSettings(
PresetTemplate.PT_READ_BARCODES);
settings.BarcodeSettings.ExpectedBarcodesCount = 1; // single barcode per frame
settings.Timeout = 100; // 100ms suits a 30fps pipeline
router.UpdateSettings(PresetTemplate.PT_READ_BARCODES, settings);
// Dynamsoft: license activation required at startup
using Dynamsoft.CVR;
using Dynamsoft.DBR;
using Dynamsoft.License;
using Dynamsoft.Core;
// LicenseManager.InitLicense performs an online activation on first run
int errorCode = LicenseManager.InitLicense("YOUR-DYNAMSOFT-LICENSE-KEY", out string errorMsg);
if (errorCode != (int)EnumErrorCode.EC_OK)
throw new InvalidOperationException($"License activation failed: {errorMsg}");
using var router = new CaptureVisionRouter();
// Settings tuned for camera frame processing
SimplifiedCaptureVisionSettings settings = router.GetSimplifiedSettings(
PresetTemplate.PT_READ_BARCODES);
settings.BarcodeSettings.ExpectedBarcodesCount = 1; // single barcode per frame
settings.Timeout = 100; // 100ms suits a 30fps pipeline
router.UpdateSettings(PresetTemplate.PT_READ_BARCODES, settings);
Imports Dynamsoft.CVR
Imports Dynamsoft.DBR
Imports Dynamsoft.License
Imports Dynamsoft.Core
' Dynamsoft: license activation required at startup
' LicenseManager.InitLicense performs an online activation on first run
Dim errorCode As Integer = LicenseManager.InitLicense("YOUR-DYNAMSOFT-LICENSE-KEY", errorMsg:=Nothing)
If errorCode <> CType(EnumErrorCode.EC_OK, Integer) Then
Throw New InvalidOperationException($"License activation failed: {errorMsg}")
End If
Using router As New CaptureVisionRouter()
' Settings tuned for camera frame processing
Dim settings As SimplifiedCaptureVisionSettings = router.GetSimplifiedSettings(PresetTemplate.PT_READ_BARCODES)
settings.BarcodeSettings.ExpectedBarcodesCount = 1 ' single barcode per frame
settings.Timeout = 100 ' 100ms suits a 30fps pipeline
router.UpdateSettings(PresetTemplate.PT_READ_BARCODES, settings)
End Using
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 sich nicht leisten können, 500 ms für ein einzelnes Bild zu verwenden. Bei einem Server, der ein hochgeladenes PDF verarbeitet, hat ein Timeout von 100 ms keinen Zweck und kann dazu führen, dass Lesevorgänge bei dichteren Barcodes fehlschlagen.
Das Router-und-Session-Design — new CaptureVisionRouter(), router.Dispose() — folgt den Semantiken der Kamera-Session: Sie öffnen einen Router, verarbeiten Bilder, entsorgen. Für die Dateiverarbeitung fügt dieser Lebenszyklus unnötigerweise zusätzlichen Code hinzu.
Das PDF-Problem
Dynamsoft Barcode Reader kann einige PDF-Eingaben direkt auf Windows-Builds akzeptieren, aber für plattformübergreifende Bereitstellungen rendern viele Teams immer noch jede PDF-Seite als Bild, bevor sie sie an CaptureVisionRouter.Capture übergeben. Dies zieht typischerweise eine separate PDF-Rendering-Bibliothek hinzu — PdfiumViewer wird häufig verwendet — was eine NuGet-Abhängigkeit, eine Abhängigkeit von nativen Binärdateien (pdfium.dll auf Windows oder libpdfium auf Linux) und eine Render-Schleife um jede PDF-Operation herum hinzufügt:
// Dynamsoft PDF processing — typical cross-platform pattern with PdfiumViewer
// dotnet add package PdfiumViewer
using PdfiumViewer;
using System.Drawing.Imaging;
using Dynamsoft.CVR;
using Dynamsoft.DBR;
public List<string> ReadBarcodesFromPdf(string pdfPath)
{
var results = new List<string>();
using (var pdfDoc = PdfDocument.Load(pdfPath))
using (var router = new CaptureVisionRouter())
{
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 the Capture Vision Router
CapturedResult result = router.Capture(imageBytes,
PresetTemplate.PT_READ_BARCODES);
foreach (var item in result.GetDecodedBarcodesResult().GetItems())
results.Add(item.GetText());
}
}
return results;
}
// Dynamsoft PDF processing — typical cross-platform pattern with PdfiumViewer
// dotnet add package PdfiumViewer
using PdfiumViewer;
using System.Drawing.Imaging;
using Dynamsoft.CVR;
using Dynamsoft.DBR;
public List<string> ReadBarcodesFromPdf(string pdfPath)
{
var results = new List<string>();
using (var pdfDoc = PdfDocument.Load(pdfPath))
using (var router = new CaptureVisionRouter())
{
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 the Capture Vision Router
CapturedResult result = router.Capture(imageBytes,
PresetTemplate.PT_READ_BARCODES);
foreach (var item in result.GetDecodedBarcodesResult().GetItems())
results.Add(item.GetText());
}
}
return results;
}
Imports PdfiumViewer
Imports System.Drawing.Imaging
Imports Dynamsoft.CVR
Imports Dynamsoft.DBR
Imports System.IO
Public Function ReadBarcodesFromPdf(pdfPath As String) As List(Of String)
Dim results As New List(Of String)()
Using pdfDoc = PdfDocument.Load(pdfPath)
Using router = New CaptureVisionRouter()
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 the Capture Vision Router
Dim result As CapturedResult = router.Capture(imageBytes, PresetTemplate.PT_READ_BARCODES)
For Each item In result.GetDecodedBarcodesResult().GetItems()
results.Add(item.GetText())
Next
End Using
End Using
Next
End Using
End Using
Return results
End Function
Das sind drei Abhängigkeiten (Dynamsoft, PdfiumViewer und eine plattformspezifische native Binärdatei), eine per-Seite Render-Schleife und einen Speicher-Overhead, der mit der Seitenanzahl skaliert.
IronBarcode liest direkt aus einer PDF-Datei:
// IronBarcode: PDF is native — no extra library, no render loop
// NuGet: dotnet add package BarCode
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 BarCode
var results = BarcodeReader.Read("invoice.pdf");
foreach (var result in results)
{
Console.WriteLine($"{result.Format}: {result.Value}");
}
Imports IronBarCode
' IronBarcode: PDF is native — no extra library, no render loop
' NuGet: dotnet add package BarCode
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
Online-Lizenzaktivierung ist einfach, wenn der Server Internetzugang hat. 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 = LicenseManager.InitLicense("YOUR-DYNAMSOFT-LICENSE-KEY", out string errorMsg);
if (errorCode != (int)EnumErrorCode.EC_OK)
{
// Possible causes: network timeout, license server unreachable,
// invalid key, expired key, activation quota exceeded, etc.
throw new InvalidOperationException($"Dynamsoft license failed [{errorCode}]: {errorMsg}");
}
// Dynamsoft: error code pattern required
int errorCode = LicenseManager.InitLicense("YOUR-DYNAMSOFT-LICENSE-KEY", out string errorMsg);
if (errorCode != (int)EnumErrorCode.EC_OK)
{
// Possible causes: network timeout, license server unreachable,
// invalid key, expired key, activation quota exceeded, etc.
throw new InvalidOperationException($"Dynamsoft license failed [{errorCode}]: {errorMsg}");
}
Imports System
' Dynamsoft: error code pattern required
Dim errorCode As Integer = LicenseManager.InitLicense("YOUR-DYNAMSOFT-LICENSE-KEY", errorMsg)
Dim errorMsg As String
If errorCode <> CType(EnumErrorCode.EC_OK, Integer) Then
' Possible causes: network timeout, license server unreachable,
' invalid key, expired key, activation quota exceeded, etc.
Throw New InvalidOperationException($"Dynamsoft license failed [{errorCode}]: {errorMsg}")
End If
Offline-Lizenzierung mit Dynamsoft ist ein separater Workflow. Auf einem verbundenen Gerät führen Sie eine erste Online-Aktivierung durch, um ein Lizenzpaket abzurufen, speichern es und aktivieren dann die Offline-Maschine, indem Sie dieses Paket über InitLicenseFromLicenseContent wiedergeben:
// Dynamsoft offline license — replay a pre-fetched license bundle
int errorCode = LicenseManager.InitLicenseFromLicenseContent(
licenseContent, out string errorMsg);
if (errorCode != (int)EnumErrorCode.EC_OK)
throw new InvalidOperationException($"Offline activation failed: {errorMsg}");
// Dynamsoft offline license — replay a pre-fetched license bundle
int errorCode = LicenseManager.InitLicenseFromLicenseContent(
licenseContent, out string errorMsg);
if (errorCode != (int)EnumErrorCode.EC_OK)
throw new InvalidOperationException($"Offline activation failed: {errorMsg}");
Imports System
' Dynamsoft offline license — replay a pre-fetched license bundle
Dim errorCode As Integer = LicenseManager.InitLicenseFromLicenseContent(licenseContent, errorMsg)
Dim errorMsg As String = Nothing
If errorCode <> CType(EnumErrorCode.EC_OK, Integer) Then
Throw New InvalidOperationException($"Offline activation failed: {errorMsg}")
End If
Auf diese Weise erlangte Lizenzpakete haben ein Ablaufzeitfenster (normalerweise Tage bis ein Jahr) und müssen vor Ablauf aktualisiert werden, was bedeutet, dass eine verbundene Maschine wiederkehrend am Workflow teilnehmen muss.
Die Aktivierung der IronBarcode -Lizenz ist eine einzelne, lokal ausgewertete Zuweisung:
// IronBarCode: local validation, no network required
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// IronBarCode: local validation, no network required
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' IronBarCode: local validation, no network required
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Kein Fehlercode zum Überprüfen. Keine Netzwerkabhängigkeit. Kein Lizenzpaket-Aktualisierungszyklus. Dieselbe Linie funktioniert auf einer Entwicklungsmaschine, in einer CI/CD-Pipeline, in einem Docker-Container und auf einem luftgesicherten Server.
Anwendungsfälle Kamera vs. Datei
Dynamsoft und IronBarcode sind für unterschiedliche primäre Szenarien optimiert. Die folgende Tabelle beschreibt dies, anstatt eine Bibliothek als universell besser zu erklären:
| Szenario | Dynamsoft Barcode-Lesegerät | IronBarcode |
|---|---|---|
| Live-Kamerabild (30 Bilder/Sekunde) | Optimiert für Echtzeit | Nicht der primäre Anwendungsfall |
| Mobiles SDK (iOS/Android) | Vollständiges SDK verfügbar | .NET exklusiv |
| Serverseitige Dateiverarbeitung | Unterstützt durch CaptureVisionRouter | Primärer Anwendungsfall |
| PDF-Barcode-Lesen | Direkt auf Windows; render loop common cross-platform | Native Unterstützung |
| Air-Gap-Bereitstellung | Erfordert Workflow für Offline-Lizenzpakete | Funktioniert out of the box |
| Docker / ephemere Container | Lizenzpaketaktualisierung pro Umgebung | Einzelne Umgebungsvariable |
| Offline-Lizenz | Lizenzinhalt-Blob von vorheriger Online-Aktivierung | Standard-Lizenzschlüssel |
| ASP.NET Core API | Unterstützt (zusätzlicher Lizenz-Aufwand) | Unterstützt |
| Azure Functions | Ausgehendes Netzwerk für die erste Aktivierung | Keine Netzwerkverbindung erforderlich |
| Barcode-Generierung | Lesen nur im Barcode Reader-Paket | Ja – Generation und Lesen |
| QR-Code-Generierung | Nicht im Barcode Reader-Paket | 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 BarCode
using IronBarCode;
// License — local validation, no network call
IronBarCode.License.LicenseKey = "YOUR-LICENSE-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 BarCode
using IronBarCode;
// License — local validation, no network call
IronBarCode.License.LicenseKey = "YOUR-LICENSE-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-LICENSE-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 = 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 | Direkt auf Windows; render loop common cross-platform | Ja — BarcodeReader.Read(pdf) |
| Lizenzvalidierung | Online-Aktivierung + periodische Überprüfung | Lokale |
| Air-Gap / Offline | Lizenzinhalt-Blob-Workflow | Standardschlüssel, funktioniert offline |
| Docker / Container | Lizenzpaket-Workflow pro Umgebung | Einzelne Umgebungsvariable |
| Azure Functions | Ausgehendes Netzwerk für die erste Aktivierung | Keine Netzwerkverbindung erforderlich |
| AWS Lambda | Ausgehendes Netzwerk für die erste Aktivierung | 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 CaptureVisionRouter() + Dispose() | Statisch – keine Instanz |
| Mehrfach-Barcode-Lesung | ExpectedBarcodesCount on BarcodeSettings | ExpectMultipleBarcodes = true |
| Lesegeschwindigkeitssteuerung | Timeout + Vorlagenanpassung | ReadingSpeed-Enumeration |
| Parallellesen | Manuelles Einfädeln | MaxParallelThreads |
| Preismodell | Jahresabonnement / verhandelte unbefristete Lizenz | Unbefristet ab $749 |
| .NET Unterstützung | .NET 6.0+ and .NET Framework 3.5+ | .NET 4.6.2 bis .NET 9 |
| Plattformen | Windows (x86/x64), Linux (x64) | 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 |
|---|---|
LicenseManager.InitLicense(key, out errorMsg) |
IronBarCode.License.LicenseKey = "key" |
errorCode != (int)EnumErrorCode.EC_OK überprüfen |
Nicht erforderlich |
LicenseManager.InitLicenseFromLicenseContent(content, out msg) |
Nicht erforderlich |
new CaptureVisionRouter() |
Statisch – keine Instanz |
router.Dispose() |
Nicht erforderlich |
router.Capture(imagePath, PresetTemplate.PT_READ_BARCODES) |
BarcodeReader.Read(imagePath) |
router.Capture(imageBytes, PresetTemplate.PT_READ_BARCODES) |
BarcodeReader.Read(imageBytes) |
BarcodeResultItem.GetText() |
result.Value |
BarcodeResultItem.GetFormatString() |
result.Format |
SimplifiedCaptureVisionSettings über GetSimplifiedSettings() |
new BarcodeReaderOptions { ... } |
settings.Timeout = 100 |
Speed = ReadingSpeed.Balanced |
settings.BarcodeSettings.ExpectedBarcodesCount = 1 |
ExpectMultipleBarcodes = false (Standard) |
router.UpdateSettings(template, settings) |
Übergeben als Parameter an Read() |
| Externe PDF-Bibliothek + Seitenrendering-Schleife | BarcodeReader.Read("doc.pdf") |
Wenn die Teams wechseln
Server-seitige Dokumentenverarbeitung, kein Kamerascanning. Das häufigste Migrationsszenario ist ein Team, das sich aufgrund der Reputation für Dynamsoft entschieden hat, es integriert hat und dann feststellte, dass die kamerazentrierte API und der PDF-Render-Schritt die Workflows zur Dokumentenverarbeitung umständlich machten. Barcodes aus hochgeladenen PDFs in einer Webanwendung zu lesen, ist ein zentraler Anwendungsfall, der in Dynamsoft zusätzliche Konstrukte erfordert, aber in IronBarcode ein einziger Aufruf ist.
Abgeschottete oder eingeschränkte Netzwerkumgebungen. Finanzinstitute, Gesundheitssysteme und staatliche Einrichtungen verbieten häufig ausgehende Internetverbindungen von Anwendungsservern. Die Online-Aktivierung von Dynamsoft funktioniert in diesen Umgebungen nicht ohne den Workflow für Offline-Lizenzpakete, der zusätzliche betriebliche Schritte erfordert. Teams in diesen Umgebungen migrieren häufig zu IronBarcode, gerade weil die Lizenzvalidierung keine Netzwerkkomponente aufweist.
Docker und Kubernetes flüchtige Container. Containerisierte Einsätze, bei denen Instanzen häufig skaliert werden, machen wiederkehrende Aktualisierungen von Lizenzpaketen schwer handhabbar. Der Lizenzschlüssel von IronBarcode funktioniert als Standard-Umgebungsvariable und muss nicht pro Instanz registriert werden.
Bedarf an Generierung sowie Lesen. Das Dynamsoft Barcode Reader-Paket ist nur lesend. 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.
Vereinfachte betriebliche Struktur. Die Entfernung des Dynamsoft-Lizenzservers von der Liste der erreichbaren externen Abhängigkeiten, die PDF-Rendering-Bibliothek zu entfernen und die Router-Lebenszyklusverwaltung durch statische Aufrufe zu ersetzen, reduziert die Zahl der potenziellen Fehlerquellen in der Produktion.
Abschluss
Dynamsoft Barcode Reader ist eine hochwertige Bibliothek, die ihren beabsichtigten Anwendungsfall gut erfüllt: Echtzeit-Kamera-basiertes Barcode-Scannen, 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.
Für die serverseitige Dokumentenverarbeitung — Barcodes aus PDFs lesen, Barcode-Etiketten generieren, in luftgesicherten Umgebungen betreiben oder in flüchtigen Docker-Containern einsetzen — verlangt die Architektur der Bibliothek mehr Einrichtung bei jedem Schritt. Die Online-Lizenzaktivierung, das plattformübergreifende PDF-Render-Muster, die für Kameras optimierten Timeout-Einstellungen und der Offline-Lizenzpaket-Workflow sind Konsequenzen aus der Entwicklung für mobile Kameranutzung. 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 hängt davon ab, in welcher Umgebung Ihre Barcodes tatsächlich vorkommen.
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 for .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.

