Przejdź do treści stopki
PORóWNAJ Z INNYMI KOMPONENTAMI

Dynamsoft Barcode Reader vs IronBarcode: Porównanie bibliotek kodów kreskowych C#

Dynamsoft BarCode Reader naprawdę doskonale spełnia swoje zadanie: odczytuje kody kreskowe z obrazu na żywo z kamery z prędkością 30 klatek na sekundę. Algorytmy są szybkie, obsługa symboli jest szeroka, a mobilny zestaw SDK, który je obsługuje na iOS i Androidzie, jest jednym z lepszych wyborów w tej dziedzinie. Jeśli Państwa produkt to aplikacja do skanowania w magazynie, w której pracownik kieruje telefon na etykietę palety i oczekuje rozpoznania w czasie poniżej 100 ms, Dynamsoft jest wiarygodną opcją.

Jeśli BarCodes znajdują się w plikach PDF na serwerze, który nie ma dostępu do Internetu, biblioteka nie jest dostosowana do tego przypadku użycia — a weryfikacja licencji będzie o tym przypominać przy każdym uruchomieniu. BarcodeReader.InitLicense wykonuje połączenie sieciowe z serwerem licencji Dynamsoft. W centrum danych typu air-gapped, izolowanej sieci VPC lub dowolnym środowisku, w którym dostęp do Internetu jest ograniczony, wywołanie to kończy się niepowodzeniem, zanim zostanie zdekodowany choćby jeden BARCODE. Alternatywne rozwiązanie offline — uzyskanie od działu wsparcia Dynamsoft pliku licencji powiązanego z konkretnym urządzeniem i identyfikatorem UUID — działa, ale powoduje dodatkowe obciążenie operacyjne, którego większość procesów przetwarzania dokumentów nie uwzględniła w budżecie.

To porównanie dotyczy dopasowania do konkretnych zastosowań, a nie jakości bibliotek. Firma Dynamsoft stworzyła bibliotekę zorientowaną na kamerę i zrobiła to dobrze. Pytanie brzmi, czy założenia oparte na kamerze przekładają się na proces przetwarzania dokumentów po stronie serwera.

Zrozumienie czytnika BarCode Dynamsoft

Architektura Dynamsoft odzwierciedla jego pochodzenie z branży fotograficznej. Sekwencja uruchamiania wymaga weryfikacji licencji online, model ustawień zawiera wartości limitu czasu zoptymalizowane pod kątem przetwarzania klatek w czasie rzeczywistym, a API udostępnia koncepcje takie jak DeblurLevel, które istnieją specjalnie dla zmiennych warunków ostrości i rozmycia ruchu w przypadku kamery ręcznej:

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

Jest to dobrze zaprojektowany interfejs API, dostosowany do swoich celów. Ustawienie Timeout = 100 ma sens, gdy przetwarzasz 30 klatek na sekundę z kamery i nie możesz poświęcić 500 ms na pojedynczą klatkę. W przypadku serwera przetwarzającego przesłany plik PDF limit czasu wynoszący 100 ms jest ograniczeniem, które nie ma żadnego sensu i może powodować niepowodzenia odczytu w przypadku gęstszych BARCODE-ów.

Projekt oparty na instancjach — new BarcodeReader(), reader.Dispose() — jest zgodny z semantyką sesji kamery: otwierasz sesję, przetwarzasz klatki, zamykasz sesję. W przypadku przetwarzania plików ten cykl życia dodaje szablonowy kod bez żadnych korzyści.

Problem z plikami PDF

Dynamsoft BarCode Reader nie obsługuje natywnie formatu PDF. Gdy dane wejściowe mają formę pliku PDF, kod musi najpierw przekształcić każdą stronę w obraz, a następnie przekazać ten obraz do Dynamsoft. Wymaga oddzielnej biblioteki do renderowania plików PDF — powszechnie używana jest PdfiumViewer — która dodaje zależność NuGet, natywną zależność binarną (pdfium.dll w systemie Windows lub libpdfium w systemie Linux) oraz pętlę renderowania wokół każdej operacji na pliku PDF:

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

Są to trzy zależności (Dynamsoft, PdfiumViewer oraz natywny plik binarny specyficzny dla platformy), pętla renderowania na każdą stronę oraz znaczne obciążenie pamięci w przypadku dokumentów zawierających wiele stron.

IronBarcode odczytuje dane bezpośrednio z pliku PDF:

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

Jedno połączenie. Brak renderera PDF. Brak pętli na stronę. Brak natywnego pliku binarnego specyficznego dla platformy do obsługi plików PDF.

Złożoność licencji

Weryfikacja licencji online jest prosta, gdy serwer ma dostęp do Internetu. Gdy tak nie jest — lub gdy zasady sieciowe wymagają wyraźnego umieszczenia hostów wychodzących na liście dozwolonych — obszar niepowodzeń walidacji wzrasta:

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

Licencjonowanie offline w Dynamsoft wymaga oddzielnego procesu. Aby pobrać identyfikator UUID urządzenia, należy wywołać BarcodeReader.OutputLicenseToString(), przesłać ten identyfikator do działu pomocy technicznej Dynamsoft w celu otrzymania pliku licencji dla konkretnego urządzenia, a następnie aktywować go za pomocą 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)
$vbLabelText   $csharpLabel

W środowisku Docker, gdzie kontenery są efemeryczne, a identyfikatory UUID zmieniają się przy każdym wdrożeniu, powoduje to ciągłą pracę operacyjną. Każde uruchomienie kontenera może wymagać zarejestrowania nowego identyfikatora UUID w dziale pomocy technicznej Dynamsoft.

Aktywacja licencji IronBarcode to pojedyncze zadanie oceniane lokalnie:

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

Brak kodów błędów do sprawdzenia. Brak zależności od sieci. Brak rejestracji na urządzenie. Ten sam kod działa na komputerze deweloperskim, w potoku CI/CD, w kontenerze Docker oraz na serwerze w izolacji fizycznej.

Przykłady zastosowań: aparat vs plik

Szczerze mówiąc, Dynamsoft i IronBarcode są zoptymalizowane pod kątem różnych głównych scenariuszy. Poniższa tabela jasno to opisuje, zamiast ogłaszać, że jedna biblioteka jest ogólnie lepsza:

Scenariusz Czytnik BarCode Dynamsoft IronBarcode
Transmisja na żywo z kamery (30 klatek na sekundę) Doskonałe — zoptymalizowane pod kątem pracy w czasie rzeczywistym Nie jest to główny przypadek użycia
Mobilny zestaw SDK (iOS/Android) Dostępny jest pełny zestaw SDK Tylko .NET
Przetwarzanie plików po stronie serwera Działa, ale wymaga obejść Główny przypadek użycia
Odczytywanie BarCodes z plików PDF Wymagany zewnętrzny renderer PDF Wsparcie native
Wdrożenie w środowisku izolowanym Wymagany identyfikator UUID urządzenia + wsparcie Dynamsoft Działa od razu po uruchomieniu
Docker / kontenery efemeryczne Zarządzanie identyfikatorami UUID na kontener Pojedyncza zmienna środowiskowa
Licencja offline Plik dotyczący konkretnego urządzenia z pomocy technicznej Dynamsoft Standardowy klucz licencyjny
API .NET Core Prace (dodatkowy szablon licencji) Działa bez zarzutu
Azure Functions Wymagana polityka sieciowa dla license.dynamsoft.com Brak wymagań sieciowych
Generowanie BarCode Nie — tylko do czytania Tak — generowanie i odczyt
Generowanie kodów QR Nie Tak — QRCodeWriter

Zrozumienie IronBarcode

Biblioteka IronBarcode for .NET służąca zarówno do generowania, jak i odczytywania kodów kreskowych. API jest statyczne — bez instancji, bez wywołań dispose, bez cyklu życia sesji. Aktywacja licencji odbywa się lokalnie. Wbudowana obsługa plików PDF:

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

Generowanie jest równie proste:

// 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

Porównanie funkcji

Funkcja Czytnik BarCode Dynamsoft IronBarcode
Odczytywanie BarCode Tak — zoptymalizowane pod kątem aparatu Tak — zoptymalizowane pod kątem plików i dokumentów
Generowanie BarCode Nie Tak
Generowanie kodów QR Nie Tak — QRCodeWriter
Natywna obsługa plików PDF Nie — wymaga zewnętrznego renderera Tak — BarcodeReader.Read(PDF)
Weryfikacja licencji Online (serwer licencji) Local
Air-gapped / offline Wymagane jest wsparcie dla identyfikatorów UUID urządzeń oraz Dynamsoft Standardowy klucz, działa w trybie offline
Docker / kontener Zarządzanie identyfikatorami UUID dla poszczególnych instancji kontenerów Pojedyncza zmienna środowiskowa
Azure Functions Wymagana polityka sieci wychodzącej Brak wymagań sieciowych
AWS Lambda Wymagana polityka sieci wychodzącej Brak wymagań sieciowych
Mobilny zestaw SDK Dostępne na iOS i Android Tylko .NET
Kamera działająca w czasie rzeczywistym (30 klatek na sekundę) Główny cel projektu Nieprzeznaczone do tego
Kod 128 Tak Tak
Kod QR Tak (czytanie) Tak (czytanie i generowanie)
Data Matrix Tak Tak
PDF417 Tak Tak
Aztec Tak Tak
EAN / UPC Tak Tak
Zarządzanie instancjami new BarcodeReader() + Dispose() Statyczne — brak instancji
Odczyt wielu BarCodes ExpectedBarcodesCount ExpectMultipleBarcodes = true
Kontrola prędkości czytania Timeout + DeblurLevel Wyliczenie ReadingSpeed
Czytanie równoległe Ręczne wątkowanie MaxParallelThreads
Model cenowy Subskrypcja Licencja wieczysta od 749 USD
Obsługa .NET .NET Standard, .NET 5+ Od .NET 4.6.2 do .NET 9
Platformy Windows, Linux, macOS Windows, Linux, macOS, Docker, Azure, AWS Lambda

Przewodnik po mapowaniu API

Dla zespołów, które mają kod Dynamsoft i muszą zrozumieć, jak tłumaczyć pojęcia:

Czytnik BarCode Dynamsoft IronBarcode
BarcodeReader.InitLicense(key, out errorMsg) IronBarCode.License.LicenseKey = "key"
errorCode != (int)EnumErrorCode.DBR_OK sprawdź Nie jest potrzebne
BarcodeReader.OutputLicenseToString() (UUID) Nie jest potrzebne
BarcodeReader.InitLicenseFromLicenseContent(content, uuid) Nie jest potrzebne
new BarcodeReader() Statyczne — brak instancji
reader.Dispose() Nie jest potrzebne
reader.DecodeFile(imagePath, "") BarcodeReader.Read(imagePath)
reader.DecodeFileInMemory(bytes, "") BarcodeReader.Read(imageBytes)
TextResult[].BarcodeText result.Value
TextResult[].BarcodeFormat result.Format
PublicRuntimeSettings via GetRuntimeSettings() new BarcodeReaderOptions { ... }
settings.Timeout = 100 Speed = ReadingSpeed.Balanced
settings.ExpectedBarcodesCount = 1 ExpectMultipleBarcodes = false (domyślnie)
reader.UpdateRuntimeSettings(settings) Przekazane jako parametr do Read()
Zewnętrzna biblioteka PDF + pętla renderowania stron BarcodeReader.Read("doc.pdf")

Kiedy zespoły się zmieniają

Przetwarzanie dokumentów po stronie serwera, a nie skanowanie za pomocą kamery. Najczęstszym scenariuszem migracji jest sytuacja, w której zespół wybrał Dynamsoft ze względu na reputację, zintegrował go, a następnie odkrył, że API skoncentrowane na kamerze i luka w obsłudze plików PDF utrudniają przepływ pracy związany z przetwarzaniem dokumentów. Odczytywanie kodów kreskowych z przesłanych plików PDF w aplikacji internetowej to podstawowy przypadek użycia, który w Dynamsoft wymaga obejść, ale w IronBarcode jest to jedno wywołanie.

Środowiska odizolowane lub o ograniczonym dostępie. Instytucje finansowe, systemy opieki zdrowotnej i wdrożenia rządowe często zabraniają wychodzących połączeń internetowych z serwerów aplikacji. W tych środowiskach weryfikacja licencji online firmy Dynamsoft kończy się niepowodzeniem. Przepływ pracy z identyfikatorem UUID urządzenia offline jest funkcjonalny, ale powoduje dodatkowe obciążenie związane z zależnością od wsparcia technicznego. Zespoły pracujące w tych środowiskach często przechodzą na IronBarcode właśnie dlatego, że weryfikacja licencji nie wymaga połączenia z siecią.

Kontenery efemeryczne Docker i Kubernetes. Wdrożenia kontenerowe, w których instancje są często skalowane w górę i w dół, sprawiają, że licencjonowanie offline oparte na urządzeniach staje się niemożliwe do zarządzania. Każdy nowy kontener może mieć inny identyfikator UUID w zależności od infrastruktury. Klucz licencyjny IronBarcode działa jako standardowa zmienna środowiskowa bez konieczności rejestracji dla poszczególnych instancji.

Potrzeba zarówno generowania, jak i odczytu. Dynamsoft jest tylko do odczytu. Aplikacje, które muszą generować etykiety z kodami BarCode, drukować kody QR dla produktów lub tworzyć listy przewozowe z wbudowanymi kodami BarCode, potrzebują drugiej biblioteki. Zespoły w takiej sytuacji często przechodzą na IronBarcode, aby uniknąć zarządzania dwiema oddzielnymi zależnościami dotyczącymi kodów kreskowych.

Uproszczony ślad operacyjny. Usunięcie serwera licencji Dynamsoft z listy zewnętrznych zależności, które muszą być dostępne, usunięcie biblioteki renderowania PDF oraz zastąpienie zarządzania instancjami wywołaniami statycznymi zmniejsza liczbę elementów, które mogą zawieść w środowisku produkcyjnym.

Wnioski

Dynamsoft BarCode Reader to wysokiej jakości biblioteka, która idealnie nadaje się do swojego przeznaczenia: skanowania kodów kreskowych w czasie rzeczywistym za pomocą kamery, zwłaszcza w aplikacjach mobilnych. Algorytmy są dobrze dostosowane do warunków skanowania ręcznego — zmiennego oświetlenia, rozmycia ruchowego, częściowego zasłonięcia. Jeśli to jest Twój przypadek użycia, Dynamsoft dobrze sobie radzi.

W przypadku przetwarzania dokumentów po stronie serwera — odczytywania kodów kreskowych z plików PDF, generowania etykiet z kodami kreskowymi, działania w środowiskach odizolowanych lub wdrażania w efemerycznych kontenerach Docker — architektura biblioteki stwarza utrudnienia na każdym etapie. Sprawdzanie licencji online, brak obsługi plików PDF, ustawienia limitu czasu zoptymalizowane pod kątem aparatu oraz przepływ pracy offline oparty na identyfikatorze UUID urządzenia są konsekwencjami tworzenia oprogramowania z myślą o wykorzystaniu aparatu w urządzeniach mobilnych. To nie są błędy; są to świadome wybory projektowe dostosowane do innego kontekstu.

IronBarcode jest przeznaczony do pracy w kontekście dokumentów i po stronie serwera. Lokalna weryfikacja licencji, natywny odczyt plików PDF, statyczne API i obsługa generowania to funkcje najwyższej klasy, a nie tylko rozwiązania zastępcze. Decyzja o migracji zależy od tego, w jakim środowisku faktycznie funkcjonują Twoje barcody.

Często Zadawane Pytania

Czym jest Dynamsoft Barcode Reader?

Dynamsoft Barcode Reader to biblioteka .NET do generowania i odczytywania kodow kreskowych w aplikacjach C#. Jest to jedno z kilku rozwiazan, ktore programisci rozpatruja przy wyborze rozwiazania kodow kreskowych do projektow .NET.

Jakie sa glówne róznice pomiedzy Dynamsoft Barcode Reader a IronBarcode?

IronBarcode uzywa statycznego, bezstanowego API, które nie wymaga zarzadzania instancjami, podczas gdy Dynamsoft Barcode Reader zazwyczaj wymaga utworzenia instancji i konfiguracji przed uzyciem. IronBarcode oferuje równiez natywna obsluge PDF, automatyczne wykrywanie formatu i licencjonowanie jednokluczowe we wszystkich srodowiskach.

Czy latwiej jest uzyskac licencje na IronBarcode niz na Dynamsoft Barcode Reader?

IronBarcode wykorzystuje pojedynczy klucz licencyjny obejmujący zarówno wdrożenia deweloperskie, jak i produkcyjne. Upraszcza to procesy CI/CD oraz konfiguracje Docker w porównaniu z systemami licencyjnymi, które oddzielają klucze SDK od kluczy środowiska uruchomieniowego.

Czy IronBarcode obsluguje wszystkie formaty kodow kreskowych, które obsluguje Dynamsoft Barcode Reader?

IronBarcode obsługuje ponad 30 symboli kodów kreskowych, w tym QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 i wiele innych. Automatyczne wykrywanie formatu oznacza, że nie jest wymagane jawne wyliczanie formatów.

Czy IronBarcode obsługuje natywne odczytywanie kodów kreskowych z plików PDF?

Tak. IronBarcode odczytuje kody kreskowe bezpośrednio z plików PDF za pomocą BarcodeReader.Read("document.pdf") bez konieczności korzystania z oddzielnej biblioteki do renderowania plików PDF. Wyniki dla każdej strony obejmują numer strony, format kodu kreskowego, wartość oraz wskaźnik pewności.

Jak IronBarcode radzi sobie z przetwarzaniem wsadowym w porównaniu do Dynamsoft Barcode Reader?

Metody statyczne IronBarcode są bezstanowe i z natury bezpieczne dla wątków, co umożliwia bezpośrednie użycie Parallel.ForEach bez zarządzania instancjami dla poszczególnych wątków. Nie ma ograniczeń przepustowości w żadnym przedziale cenowym.

Jakie wersje .NET obsługuje IronBarcode?

IronBarcode obsługuje .NET Framework 4.6.2+, .NET Core 3.1 oraz .NET 5, 6, 7, 8 i 9 w jednym pakiecie NuGet. Obsługiwane platformy to Windows x64/x86, Linux x64 oraz macOS x64/ARM.

Jak zainstalować IronBarcode w projekcie .NET?

Zainstaluj IronBarcode za pomocą NuGet: uruchom polecenie „Install-Package IronBarCode” w konsoli menedżera pakietów lub „dotnet add package IronBarCode” w interfejsie CLI. Nie są wymagane żadne dodatkowe instalatory SDK ani pliki uruchomieniowe.

Czy moge ocenic IronBarcode przed zakupem, w przeciwienstwie do Dynamsoft?

Tak. Tryb próbny IronBarcode zwraca pełne, zdekodowane wartości BarCode — tylko wygenerowane obrazy wyjściowe są opatrzone znakiem wodnym. Przed podjęciem decyzji o zakupie można sprawdzić dokładność odczytu na własnych dokumentach.

Jaka jest róznica cenowa pomiedzy Dynamsoft Barcode Reader a IronBarcode?

Cena IronBarcode zaczyna się od 749 USD za Licencję wieczystą dla jednego programisty, obejmującą etapy rozwoju i produkcji. Szczegóły dotyczące cen i opcji zakupu hurtowego są dostępne na stronie licencyjnej IronBarcode. Nie ma wymogu posiadania oddzielnej licencji na środowisko uruchomieniowe.

Czy latwo jest przejsc z Dynamsoft Barcode Reader na IronBarcode?

Migracja z Dynamsoft Barcode Reader do IronBarcode glównie polega na zastapieniu wywolan API opartych na instancjach metodami statycznymi IronBarcode, usunieciu szablonów licencji i aktualizacji nazw wlasciwosci wyników. Wiekszosc migracji polega na redukcji kodu zamiast jego dodawania.

Czy IronBarcode generuje kody QR z logo?

Tak. Funkcja QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") osadza obraz marki w kodzie QR w sposób natywny z konfigurowalną korekcją błędów. Kolorowe kody QR są również obsługiwane za pomocą funkcji ChangeBarCodeColor().

Jordi Bardia
Inżynier oprogramowania
Jordi jest najbardziej biegły w Pythonie, C# i C++. Kiedy nie wykorzystuje swoich umiejętności w Iron Software, programuje gry. Dzieląc odpowiedzialność za testowanie produktów, rozwój produktów i badania, Jordi wnosi ogromną wartość do ciągłej poprawy produktów. Różnorodne doświadczenia ...
Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie