Zum Fußzeileninhalt springen
MIT ANDEREN KOMPONENTEN VERGLEICHEN

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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"
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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()
$vbLabelText   $csharpLabel

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.

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