IRONSOFTWAREHOME
PORÓWNAJ Z INNYMI KOMPONENTAMI

Barkoder SDK vs IronBarcode: Porównanie bibliotek kodów kreskowych C#

Curtis Chau
Curtis Chau
Updated: 26 kwietnia 2026

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 twoje kody kreskowe znajdują się na serwerze w plikach PDF, do których nie ma dostępu do internetu, biblioteka jest niedopasowana do przypadku użycia — a aktywacja licencji przypomni ci przy pierwszej próbie wdrożenia. LicenseManager.InitLicense wykonuje online handshake z serwerem licencyjnym Dynamsoft przy pierwszej aktywacji i okresowo ponownie ją weryfikuje. W odizolowanym centrum danych, odizolowanym VPC lub każdym środowisku, gdzie dostęp do internetu na zewnątrz jest ograniczony, ta pierwsza aktywacja wymaga alternatywy. Ścieżka offline — uzyskanie blobu zawartości licencyjnej od Dynamsoft i odtworzenie go za pomocą InitLicenseFromLicenseContent — działa, ale dodaje obciążenie operacyjne, na które większość przepływów pracy przetwarzania dokumentów nie przewidziała budżetu.

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 uruchomienia wymaga aktywacji licencji online, model ustawień zawiera wartości timeout odpowiednie dla przetwarzania klatek w czasie rzeczywistym, a API ujawnia ustawienia dostosowane do zmiennego ogniskowania i rozmycia ruchu kamery do ręki.

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

Jest to dobrze zaprojektowany interfejs API, dostosowany do swoich celów. Ustawienie Timeout = 100 ma sens, gdy przetwarzane jest 30 klatek na sekundę z kamery i nie można sobie pozwolić na spędzenie 500ms na jednej klatce. Dla serwera przetwarzającego przesłany PDF, 100 ms timeout nie ma sensu i może powodować niepowodzenie odczytu na gęstszych kodach kreskowych.

Projekt router-and-session — new CaptureVisionRouter(), router.Dispose() — naśladuje semantykę sesji kamery: otwierasz router, przetwarzasz klatki, usuwasz. W przypadku przetwarzania plików ten cykl życia dodaje szablonowy kod bez żadnych korzyści.

Problem z plikami PDF

Dynamsoft Barcode Reader może akceptować niektóre wejścia PDF bezpośrednio na kompilacjach Windows, ale dla wdrożeń międzyplatformowych wiele zespołów nadal wstępnie renderuje każdą stronę PDF do obrazu, zanim przekaże ją do CaptureVisionRouter.Capture. To zwykle wciąga osobną bibliotekę renderującą PDF — często używany jest PdfiumViewer — co dodaje zależność NuGet, zależność natywną (pdfium.dll na Windows lub libpdfium na Linuksie) i pętlę renderującą wokół każdej operacji PDF:

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

To są trzy zależności (Dynamsoft, PdfiumViewer i natywne binaria specyficzne dla platformy), pętla renderowania na stronę i nadmiar pamięci, który skalują się wraz z liczbą stron.

IronBarcode odczytuje dane bezpośrednio z pliku PDF:

// 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}");
}

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

Aktywacja 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 = 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}");
}

Licencjonowanie offline z Dynamsoft jest odrębnym przepływem pracy. Na podłączonym urządzeniu wykonujesz początkową aktywację online, aby pobrać pakiet licencji, zapisać go, a następnie aktywować urządzenie offline przez odtworzenie tego pakietu za pomocą InitLicenseFromLicenseContent:

// 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}");

Pakiety licencji uzyskane w ten sposób mają okno wygaśnięcia (zwykle od kilku dni do roku) i muszą być odświeżane przed ich wygaśnięciem, co oznacza, że maszyna podłączona do internetu musi regularnie uczestniczyć w tym przepływie pracy.

Aktywacja licencji IronBarcode to pojedyncze zadanie oceniane lokalnie:

// IronBarCode: local validation, no network required
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

Brak kodów błędów do sprawdzenia. Brak zależności od sieci. Brak cyklu odświeżania pakietu licencji. Ta sama linia działa na maszynie deweloperskiej, w pipeline CI/CD, w kontenerze Docker i na serwerze bez dostępu do internetu.

Przykłady zastosowań: aparat vs plik

Dynamsoft i IronBarcodesą zoptymalizowane do różnych podstawowych scenariuszy. Tablica poniżej opisuje to, zamiast deklarować, że jedna z bibliotek jest uniwersalnie lepsza:

ScenariuszCzytnik BarCode DynamsoftIronBarcode
Transmisja na żywo z kamery (30 klatek na sekundę)Zoptymalizowane pod kątem czasu rzeczywistegoNie jest to główny przypadek użycia
Mobilny zestaw SDK (iOS/Android)Dostępny jest pełny zestaw SDKTylko .NET
Przetwarzanie plików po stronie serweraObsługiwane przez CaptureVisionRouterGłówny przypadek użycia
Odczytywanie BarCodes z plików PDFBezpośrednio na Windows; render loop common cross-platformWsparcie native
Wdrożenie w środowisku izolowanymWymaga przepływu pracy offline z pakietem licencjiDziała od razu po uruchomieniu
Docker / kontenery efemeryczneOdświeżenie pakietu licencji na środowiskoPojedyncza zmienna środowiskowa
Licencja offlineBlob zawartości licencji z uprzedniej aktywacji onlineStandardowy klucz licencyjny
API .NET CoreObsługiwane (dodatkowy wzór licencyjny)Obsługiwane
Azure FunctionsSieć wychodząca na pierwszą aktywacjęBrak wymagań sieciowych
Generowanie BarCodeOdczyt tylko w pakiecie Barcode ReaderTak — generowanie i odczyt
Generowanie kodów QRNie w pakiecie Barcode ReaderTak — 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 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);
C#

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();

Porównanie funkcji

FunkcjaCzytnik BarCode DynamsoftIronBarcode
Odczytywanie BarCodeTak — zoptymalizowane pod kątem aparatuTak — zoptymalizowane pod kątem plików i dokumentów
Generowanie BarCodeNieTak
Generowanie kodów QRNieTak — QRCodeWriter
Natywna obsługa plików PDFBezpośrednio na Windows; render loop common cross-platformTak — BarcodeReader.Read(PDF)
Weryfikacja licencjiAktywacja online + okresowe ponowne sprawdzenieLokalny
Odizolowany / offlinePrzepływ pracy z blobem zawartości licencjiStandardowy klucz, działa w trybie offline
Docker / kontenerPrzepływ pracy z pakietem licencji na środowiskoPojedyncza zmienna środowiskowa
Azure FunctionsSieć wychodząca na pierwszą aktywacjęBrak wymagań sieciowych
AWS LambdaSieć wychodząca na pierwszą aktywacjęBrak wymagań sieciowych
Mobilny zestaw SDKDostępne na iOS i AndroidTylko .NET
Kamera działająca w czasie rzeczywistym (30 klatek na sekundę)Główny cel projektuNieprzeznaczone do tego
Kod 128TakTak
Kod QRTak (czytanie)Tak (czytanie i generowanie)
Data MatrixTakTak
PDF417TakTak
AztecTakTak
EAN / UPCTakTak
Zarządzanie instancjaminew CaptureVisionRouter() + Dispose()Statyczne — brak instancji
Odczyt wielu BarCodesExpectedBarcodesCount on BarcodeSettingsExpectMultipleBarcodes = true
Kontrola prędkości czytaniaDopasowanie czasu do templateWyliczenie ReadingSpeed
Czytanie równoległeRęczne wątkowanieMaxParallelThreads
Model cenowyRoczna subskrypcja / negocjowana na zawszeLicencja wieczysta od 749 USD
Obsługa .NET.NET 6.0+ and .NET Framework 3.5+Od .NET 4.6.2 do .NET 9
PlatformyWindows (x86/x64), Linux (x64)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 DynamsoftIronBarcode
LicenseManager.InitLicense(key, out errorMsg)IronBarCode.License.LicenseKey = "key"
errorCode != (int)EnumErrorCode.EC_OK checkNie jest potrzebne
LicenseManager.InitLicenseFromLicenseContent(content, out msg)Nie jest potrzebne
new CaptureVisionRouter()Statyczne — brak instancji
router.Dispose()Nie jest potrzebne
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 via GetSimplifiedSettings()new BarcodeReaderOptions { ... }
settings.Timeout = 100Speed = ReadingSpeed.Balanced
settings.BarcodeSettings.ExpectedBarcodesCount = 1ExpectMultipleBarcodes = false (domyślnie)
router.UpdateSettings(template, settings)Przekazane jako parametr do Read()
Zewnętrzna biblioteka PDF + pętla renderowania stronBarcodeReader.Read("doc.pdf")

Kiedy zespoły się zmieniają

Przetwarzanie dokumentów po stronie serwera, a nie skanowanie kamerą. Najczęstszym scenariuszem migracyjnym jest zespół, który wybrał Dynamsoft ze względu na renomę, zintegrował go, a następnie odkrył, że kamera-centryczne API i krok renderowania PDF powodowały, że przepływy przetwarzania dokumentów były niezręczne. Odczyt kodów kreskowych z przesłanych PDF-ów w aplikacji webowej to kluczowy przypadek użycia, który wymaga dodatkowego przygotowania w Dynamsoft, ale jest pojedynczym wywołaniem w IronBarcode.

Ś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. Aktywacja online Dynamsoft nie działa w tych środowiskach bez przepływu pracy offline z pakietem licencji, co dodaje kroki operacyjne. 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ą.

Docker i kontenery efemeryczne Kubernetes. Wdrożenia kontenerowe, gdzie instancje skalują się często w górę i w dół, sprawiają, że cykle odświeżania pakietu licencji są trudne do zarządzania. Klucz licencyjny IronBarcode działa jako standardowa zmienna środowiskowa bez konieczności rejestracji dla poszczególnych instancji.

Potrzeba generacji oraz odczytu. Pakiet Czytnik BarCode 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ć osiągalne, usunięcie biblioteki renderującej PDF i zastąpienie zarządzania cyklem życia routera statycznymi wywołaniami, zmniejsza liczbę rzeczy, które mogą pójść źle w produkcji.

Wnioski

Dynamsoft Barcode Reader to wysokiej jakości biblioteka, która dobrze pasuje do zamierzonego użytku: skanowanie kodów kreskowych na podstawie kamer w czasie rzeczywistym, 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.

Do przetwarzania dokumentów po stronie serwera — odczytywanie kodów kreskowych z PDF-ów, generacja etykiet kodów kreskowych, działanie w środowiskach odizolowanych lub wdrażanie w efemerycznych kontenerach Docker — architektura biblioteki wymaga więcej ustawień na każdym kroku. Aktywacja licencji online, wzorzec renderowania PDF cross-platformowy, ustawienia timeout optymalizowane dla kamer i przepływ pracy offline z pakietem licencji są konsekwencjami budowania pod kątem kamer 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 zależy od tego, w jakim środowisku faktycznie znajdują się twoje kody kreskowe.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podręczników.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta