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

Spire.Barcode vs IronBarcode: Porównanie bibliotek kodów kreskowych C#

Spire.BarCode wymaga podania typu kodu kreskowego podczas odczytu: scanner.Scan(path, BarCodeType.Code128). Jeśli przetwarzasz dokumenty, w których przychodzące BarCodes mogą mieć dowolny format, musisz napisać pętlę wykrywającą format, zanim będziesz mógł wyodrębnić wartość. Ta pojedyncza decyzja dotycząca API determinuje wszystko, co dotyczy tworzenia procesów skanowania kodów kreskowych za pomocą Spire.BarCode, dlatego warto ją zrozumieć, zanim się na nią zdecydujesz.

Zrozumienie Spire.BarCode

Spire.BarCode to komercyjna biblioteka kodów kreskowych .NET opracowana przez E-iceblue, chińską firmę programistyczną, która produkuje również linie produktów Spire.Doc, Spire.XLS i Spire.PDF. Biblioteka obsługuje generowanie i odczytywanie BarCodes w różnych systemach symboliki 1D i 2D i została zaprojektowana z myślą o integracji z szerszym ekosystemem przetwarzania dokumentów E-iceblue.

E-iceblue wydaje dwa pakiety: FreeSpire.Barcode bezpłatnie oraz Spire.Barcode jako produkt komercyjny. Pakiet bezpłatny jest produktem z trwałymi ograniczeniami, a nie wersją próbną ograniczoną czasowo. Pakiet komercyjny odblokowuje pełny zestaw symboli i usuwa ograniczenia obecne w wersji darmowej, ale wymaga zakupu oddzielnej licencji od każdego innego używanego produktu Spire.

Kluczowe cechy architektury Spire.BARCODE obejmują:

  • Obowiązkowy parametr BarCodeType: Każde wywołanie BarcodeScanner.Scan() wymaga wartości wyliczeniowej BarCodeType. Nie ma przeciążenia, które akceptuje tylko ścieżkę do pliku i wykonuje automatyczne wykrywanie formatu.
  • Model generowania obiektu Settings: Generowanie BarCode opiera się na zmiennym obiekcie BarcodeSettings, który jest przekazywany do instancji BarCodeGenerator, co wymaga przypisania wielu właściwości przed wygenerowaniem jakiegokolwiek wyniku.
  • Brak natywnej obsługi plików PDF: Spire.BarCode nie może odczytywać kodów kreskowych bezpośrednio z plików PDF. Przepływy pracy oparte na plikach PDF wymagają oddzielnego pakietu Spire.PDF, oddzielnej licencji oraz kodu do ręcznego wyodrębniania stron i obrazów napisanego przez programistę.
  • Ograniczenia bezpłatnej wersji FreeSpire.BarCode: Wersja bezpłatna nakłada duże znaki wodne na generowane kody kreskowe, celowo obniża wydajność skanowania, ogranicza dostępny zestaw symboli i wymaga klucza rejestracyjnego uzyskanego od E-iceblue, zanim zostaną wyłączone okna dialogowe z ostrzeżeniami.
  • Integracja z ekosystemem E-iceblue: zespoły już korzystające z Spire.Doc lub Spire.XLS mogą uznać znajomość API i potencjalne ceny pakietowe za korzystne. Zespoły korzystające wyłącznie z Spire.BARCODE ponoszą pełny koszt licencji na produkt, nie czerpiąc korzyści z ekosystemu.
  • Typ zwracanej wartości: BarcodeScanner.Scan() zwraca string[], który nie zawiera metadanych formatu. Wykryty typ nie został uwzględniony w wyniku.

Wymagania dotyczące specyfikacji typu

Funkcja BarcodeScanner.Scan() w Spire.BarCode nie ma nadmiarowego wywołania, które akceptuje wyłącznie ścieżkę do pliku. Każda operacja odczytu wymaga, aby kod wywołujący zadeklarował format kodu kreskowego z wyprzedzeniem. W przypadku przepływów pracy opartych na jednym formacie jest to wykonalne, ale w przypadku przetwarzania dokumentów o mieszanych formatach powoduje to pętlę iteracji kandydatów:

// Spire.Barcode: multi-format detection requires a guessing loop
BarcodeScanner scanner = new BarcodeScanner();
var candidates = new[] { BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417 };

string foundValue = null;
foreach (var type in candidates)
{
    string[] found = scanner.Scan("barcode.png", type);
    if (found.Length > 0)
    {
        foundValue = found[0];
        break;
    }
}
// Spire.Barcode: multi-format detection requires a guessing loop
BarcodeScanner scanner = new BarcodeScanner();
var candidates = new[] { BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417 };

string foundValue = null;
foreach (var type in candidates)
{
    string[] found = scanner.Scan("barcode.png", type);
    if (found.Length > 0)
    {
        foundValue = found[0];
        break;
    }
}
Imports Spire.Barcode

Dim scanner As New BarcodeScanner()
Dim candidates = {BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417}

Dim foundValue As String = Nothing
For Each type In candidates
    Dim found As String() = scanner.Scan("barcode.png", type)
    If found.Length > 0 Then
        foundValue = found(0)
        Exit For
    End If
Next
$vbLabelText   $csharpLabel

Każdy typ dodany do tablicy kandydatów oznacza dodatkowy przebieg skanowania. Wszelkie formaty nieobecne na liście są pomijane bez powiadomienia. Programista jest odpowiedziąlny za prowadzenie wyczerpującego wykazu typów oraz ponowne testowanie za każdym razem, gdy do procesu wprowadzany jest nowy format.

Zrozumienie IronBarcode

IronBarcode to komercyjna biblioteka kodów kreskowych .NET opracowana przez firmę Iron Software. Zapewnia zarówno odczyt, jak i generowanie kodów kreskowych poprzez statyczny model API, który eliminuje potrzebę zarządzania instancjami. Biblioteka jest dostarczana jako pojedynczy pakiet NuGet, który zawiera natywną obsługę przetwarzania plików PDF i obrazów bez konieczności stosowania dodatkowych zależności.

Silnik odczytu IronBarcode wykonuje automatyczne wykrywanie formatów w ponad 50 symbologiach podczas jednego skanowania. Obiekty wynikowe zwracane przez BarcodeReader.Read() obejmują wykryty typ BARCODE, zdekodowaną wartość oraz metadane kontekstowe, takie jak numer strony w przypadku źródeł PDF oraz współrzędne graniczne w obrębie obrazu źródłowego.

Najważniejsze cechy IronBarcode to:

  • Automatyczne wykrywanie formatu: BarcodeReader.Read() nie wymaga parametru typu. Biblioteka identyfikuje symbolikę podczas skanowania i umieszcza ją w obiekcie wynikowym.
  • Obsługa plików PDF w jednym pakiecie: Pliki PDF są akceptowane bezpośrednio przez BarcodeReader.Read() bez dodatkowego pakietu NuGet, licencji lub kodu do ręcznego wyodrębniania stron.
  • Fluent generation API: BarcodeWriter.CreateBarcode() to statyczna metoda fabryczna, która zwraca obiekt łańcuchowy do określania rozmiaru, stylizacji i zapisywania w jednym wyrażeniu.
  • Tryb próbny z pełną funkcjonalnością: Wersja próbna IronBarcode działa z tego samego pakietu co produkt licencjonowany, zapewniając pełną prędkość odczytu, pełną obsługę symboli i kompletny zestaw funkcji. Wynik wygenerowany w trybie próbnym zawiera niewielki znak wodny na krawędzi; nie ma to wpływu na sposób czytania.
  • BarcodeReaderOptions do dostosowania: Prędkość odczytu, wykrywanie wielu BarCodes, wstępne przetwarzanie obrazu oraz filtry oczekiwanej symboliki można konfigurować bez konieczności zmiany produktów biblioteki.
  • Obiekty wyników z metadanymi: Każdy wynik w kolekcji BarcodeResults udostępnia Value, BarcodeType, PageNumber oraz dane regionu obrazu.

Porównanie funkcji

Poniższa tabela podsumowuje ogólne różnice między Spire.BarCode a IronBarcode:

Funkcja Spire.Barcode IronBarcode
Odczytywanie BarCode Tak (wymagańy typ kodu kreskowego) Tak (automatyczne wykrywanie)
Generowanie BarCode'ów Tak Tak
Automatyczne wykrywanie formatowania Nie Tak
Natywna obsługa plików PDF Nie (wymaga Spire.PDF) Tak
Wersja bezpłatna FreeSpire.BarCode (ograniczony dostęp) Tryb próbny (pełna funkcjonalność)
Liczba symboli 39+ (komercyjne) 50+
Model licencji Poziomy licencji na stanowisko i subskrypcja Tytuł wieczny z opcjonalnym wsparciem

Szczegółowe porównanie funkcji

Funkcja Spire.Barcode IronBarcode
Czytanie
Automatyczne wykrywanie formatowania Nie Tak
Wymagany typ kodu kreskowego Tak Nie
Zwraca metadane formatu Nie Tak
Wiele BarCode na jednym obrazie Tak Tak
Kontrola prędkości czytania Nie Tak (BarcodeReaderOptions)
Korekta błędów wspomagana przez ML Nie Tak
Generacja
Model API Obiekt Settings + generator Fabryka statyczna z płynnym łańcuchem
QR kod z niestandardowym logo Tylko poziom komercyjny Wszystkie poziomy
Formaty wyjściowe Obraz (PNG, JPEG, BMP) PNG, JPEG, BMP, SVG, HTML, strumień
Płynne łączenie Nie Tak
Obsługa plików PDF
Odczytuj barcody z plików PDF Wymagane jest Spire.PDF Język ojczysty, bez dodatkowego pakietu
Numer strony w wyniku Ręczne śledzenie Tak
Wymagana dodatkowa licencja Tak (Spire.PDF) Nie
Platforma
.NET Framework Tak Tak
.NET Core / .NET 5+ Tak Tak
Docker / Linux Tak Tak
Symbole
1D (Code128, Code39, EAN, UPC) Tak Tak
2D (QR, DataMatrix, PDF417) Tak Tak
Łączna liczba symboli 39+ (komercyjne) 50+
Licencjonowanie
Wersja bezpłatna FreeSpire.BarCode (z znakiem wodnym, o obniżonej jakości) Tryb próbny (pełna prędkość, mały znak wodny)
Wymagana rejestracja w celu uzyskania dostępu do bezpłatnego pakietu Tak Nie
Model licencji Wielodostępna licencja wieczysta + subskrypcja Licencja wieczysta z opcjonalnym przedłużeniem
Cena początkowa 349 USD (jeden programista) 749 USD (wersja Lite)

Odczytywanie BarCode

Podejście Spire.BarCode

Funkcja BarcodeScanner.Scan() biblioteki Spire.BarCode wymaga podania parametru BarCodeType przy każdym wywołaniu. Wywołanie typu pojedynczego jest właściwe, gdy format jest znany i zagwarantowany:

// Spire.Barcode — type is mandatory
BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("barcode.png", BarCodeType.Code128);

foreach (string value in results)
{
    Console.WriteLine(value);
}
// Spire.Barcode — type is mandatory
BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("barcode.png", BarCodeType.Code128);

foreach (string value in results)
{
    Console.WriteLine(value);
}
Imports Spire.Barcode

Dim scanner As New BarcodeScanner()
Dim results As String() = scanner.Scan("barcode.png", BarCodeType.Code128)

For Each value As String In results
    Console.WriteLine(value)
Next
$vbLabelText   $csharpLabel

Gdy format nie jest znany z góry, jedynym dostępnym podejściem jest iteracja przez typy kandydujące. Każda iteracja to pełne skanowanie, a każdy format nieobecny na liście jest pomijany bez powiadomienia. Wynikiem jest string[], który nie zawiera żadnych informacji o typie, więc dalsze przekierowanie oparte na formacie wymaga dodatkowego zarządzania stanem przez wywołującego.

Podejście IronBarcode

IronBarcode's BarcodeReader.Read() nie wymaga parametru typu. Biblioteka automatycznie wykrywa format we wszystkich obsługiwanych symbolikach w jednym przebiegu. Odczyt BARCODE-ów z obrazów to pojedyncze wywołanie metody, niezależnie od tego, ile różnych formatów może zawierać źródło:

// IronBarcode — auto-detection built in
var results = BarcodeReader.Read("barcode.png");

foreach (var result in results)
{
    Console.WriteLine($"{result.BarcodeType}: {result.Value}");
}
// IronBarcode — auto-detection built in
var results = BarcodeReader.Read("barcode.png");

foreach (var result in results)
{
    Console.WriteLine($"{result.BarcodeType}: {result.Value}");
}
Imports IronBarCode

' IronBarcode — auto-detection built in
Dim results = BarcodeReader.Read("barcode.png")

For Each result In results
    Console.WriteLine($"{result.BarcodeType}: {result.Value}")
Next
$vbLabelText   $csharpLabel

Każdy obiekt wyniku zawiera BarcodeType, Value oraz metadane pozycyjne. Trasowanie w dół oparte na formacie nie wymaga dodatkowego stanu — typ jest obecny w samym wyniku.

Ograniczenia bezpłatnego planu

Spire.BarCode Free Tier

FreeSpire.BarCode umieszcza duży znak wodny z informacją o wersji na wygenerowanych obrazach kodów kreskowych. Znak wodny zakrywa BARCODE w sposób, który sprawia, że nie nadaje się on do użytku produkcyjnego i uniemożliwia rzetelną ocenę jakości generowania. Wydajność skanowania jest celowo obniżona w wersji darmowej, co oznacza, że pomiary przepustowości wykonane podczas oceny nie odzwierciedlają rzeczywistej wydajności komercyjnej wersji Spire.BARCODE. Pakiet darmowy wymaga również klucza rejestracyjnego uzyskanego od E-iceblue, zanim okna dialogowe z ostrzeżeniami zostaną wyłączone podczas działania. Zestaw symboli dostępny w wersji bezpłatnej stanowi podzbiór oferty komercyjnej. Ograniczenia te łącznie oznaczają, że ocena oparta na FreeSpire.BarCode nie odzwierciedla dokładnie tego, co oferuje produkt komercyjny.

Tryb próbny IronBarcode

Wersja próbna IronBarcode to pakiet licencyjny używany bez klucza licencyjnego. Aplikacja Reading działa z pełną prędkością, obsługując wszystkie symbole i bez żadnych ograniczeń w działaniu. Opcje szybkości czytania i dokładności działają identycznie w trybie próbnym i licencjonowanym. Wygenerowany BARCODE w trybie próbnym zawiera niewielki znak wodny na krawędzi obrazu; nie zasłania samego kodu kreskowego. Zachowanie mierzone podczas oceny IronBarcode jest tym samym zachowaniem, które trafia do produkcji.

Aspect FreeSpire.Barcode Wersja próbna IronBarcode
Znaki wodne na wygenerowanym wyniku Duży, obejmuje BarCode Mały, tylko krawędź obrazu
Wydajność czytania Celowo pogorszona jakość Pełna prędkość
Obsługa symboli Ograniczony podzbiór (~20 typów) Pełny zestaw (ponad 50 typów)
Wymagana rejestracja Tak (bezpłatny klucz od E-iceblue) Nie
Dostępne funkcje Ograniczony podzbiór Pełen zestaw funkcji
Termin None 30 dni

Obsługa BarCode w plikach PDF

Podejście Spire.BarCode

Spire.BarCode nie posiada wbudowanej funkcji odczytu plików PDF. Aby wyodrębnić kody kreskowe z pliku PDF, programista musi zainstalować oddzielny pakiet Spire.PDF, zakupić oddzielną licencję Spire.PDF oraz napisać kod ręcznej iteracji stron i wyodrębniania obrazów, zanim będzie można rozpocząć skanowanie kodów kreskowych:

// Spire.Barcode + Spire.PDF: two libraries, two licenses
using Spire.Pdf;

var pdf = new PdfDocument();
pdf.LoadFromFile("document.pdf");

var scanner = new BarcodeScanner();
foreach (PdfPageBase page in pdf.Pages)
{
    var images = page.ExtractImages();
    foreach (var image in images)
    {
        // BarCodeType is still required even here
        string[] results = scanner.Scan(image, BarCodeType.QRCode);
    }
}
// Spire.Barcode + Spire.PDF: two libraries, two licenses
using Spire.Pdf;

var pdf = new PdfDocument();
pdf.LoadFromFile("document.pdf");

var scanner = new BarcodeScanner();
foreach (PdfPageBase page in pdf.Pages)
{
    var images = page.ExtractImages();
    foreach (var image in images)
    {
        // BarCodeType is still required even here
        string[] results = scanner.Scan(image, BarCodeType.QRCode);
    }
}
Imports Spire.Pdf

Dim pdf As New PdfDocument()
pdf.LoadFromFile("document.pdf")

Dim scanner As New BarcodeScanner()
For Each page As PdfPageBase In pdf.Pages
    Dim images = page.ExtractImages()
    For Each image In images
        ' BarCodeType is still required even here
        Dim results As String() = scanner.Scan(image, BarCodeType.QRCode)
    Next
Next
$vbLabelText   $csharpLabel

Ten wzorzec wymaga dwóch pakietów NuGet, dwóch umów licencyjnych oraz kodu do zarządzania stronami napisanego przez programistów. Jeśli BarCodes są osadzone w treści wektorowej, a nie w obrazach rastrowych w pliku PDF, metoda wyodrębniania obrazów może je całkowicie pominąć.

Podejście IronBarcode

IronBarcode obsługuje pliki PDF natywnie, bez żadnych dodatkowych zależności. Odczytywanie BARCODE-ów z dokumentów PDF to pojedyncze wywołanie metody przy użyciu tego samego interfejsu API BarcodeReader.Read(), co w przypadku plików graficznych. Numery stron są zawarte w każdym obiekcie wyniku:

// IronBarcode: native PDF support, no additional library
var results = BarcodeReader.Read("document.pdf");

foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.BarcodeType} = {barcode.Value}");
}
// IronBarcode: native PDF support, no additional library
var results = BarcodeReader.Read("document.pdf");

foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.BarcodeType} = {barcode.Value}");
}
Imports IronBarcode

Dim results = BarcodeReader.Read("document.pdf")

For Each barcode In results
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.BarcodeType} = {barcode.Value}")
Next
$vbLabelText   $csharpLabel

Nie jest wymagańe ręczne wyodrębnianie stron, dodatkowy pakiet ani zakup dodatkowej licencji.

Generation API

Podejście Spire.BarCode

Model generowania Spire.BARCODE opiera się na zmiennym obiekcie konfiguracyjnym BarcodeSettings. Programista instancjonuje ustawienia, indywidualnie przypisuje właściwości, przekazuje obiekt ustawień do BarCodeGenerator, a następnie wywołuje GenerateImage():

// Spire.Barcode generation
using Spire.Barcode;

BarcodeSettings settings = new BarcodeSettings();
settings.Type = BarCodeType.Code128;
settings.Data = "12345678";
settings.ShowText = true;
settings.TextMargin = 5;
settings.BarHeight = 60;
settings.Unit = GraphicsUnit.Pixel;

BarCodeGenerator generator = new BarCodeGenerator(settings);
Image barcodeImage = generator.GenerateImage();
barcodeImage.Save("barcode.png", ImageFormat.Png);
// Spire.Barcode generation
using Spire.Barcode;

BarcodeSettings settings = new BarcodeSettings();
settings.Type = BarCodeType.Code128;
settings.Data = "12345678";
settings.ShowText = true;
settings.TextMargin = 5;
settings.BarHeight = 60;
settings.Unit = GraphicsUnit.Pixel;

BarCodeGenerator generator = new BarCodeGenerator(settings);
Image barcodeImage = generator.GenerateImage();
barcodeImage.Save("barcode.png", ImageFormat.Png);
Imports Spire.Barcode
Imports System.Drawing
Imports System.Drawing.Imaging

Dim settings As New BarcodeSettings()
settings.Type = BarCodeType.Code128
settings.Data = "12345678"
settings.ShowText = True
settings.TextMargin = 5
settings.BarHeight = 60
settings.Unit = GraphicsUnit.Pixel

Dim generator As New BarCodeGenerator(settings)
Dim barcodeImage As Image = generator.GenerateImage()
barcodeImage.Save("barcode.png", ImageFormat.Png)
$vbLabelText   $csharpLabel

Obiekt ustawień, który może ulegać zmianom, oznacza, że konfiguracje mogą być przypadkowo udostępniane między wywołaniami, gdy pojedyncza instancja jest ponownie wykorzystywana w wielu operacjach generowania. Klasa generatora dodaje dodatkowy etap instancjonowania, który nie zawiera własnej logiki konfiguracyjnej.

Podejście IronBarcode

IronBarcode wykorzystuje statyczną metodę fabryczną z opcjonalnym łańcuchem płynnym. Nie ma obiektu ustawień ani instancji generatora do zarządzania:

// IronBarcode generation
using IronBarCode;

BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");

// With sizing:
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("barcode.png");
// IronBarcode generation
using IronBarCode;

BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");

// With sizing:
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("barcode.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128) _
    .SaveAsPng("barcode.png")

' With sizing:
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128) _
    .ResizeTo(400, 100) _
    .SaveAsPng("barcode.png")
$vbLabelText   $csharpLabel

Kody QR z niestandardowymi logo są dostępne we wszystkich poziomach licencji IronBarcode:

var qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest);
qr.AddBrandLogo("logo.png");
qr.SaveAsPng("qr-with-logo.png");
var qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest);
qr.AddBrandLogo("logo.png");
qr.SaveAsPng("qr-with-logo.png");
Dim qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
qr.AddBrandLogo("logo.png")
qr.SaveAsPng("qr-with-logo.png")
$vbLabelText   $csharpLabel

Ceny

Struktura cenowa Spire.BarCode obejmuje cztery poziomy:

Licencja Cena
Pojedynczy programista $349
Licencja na stronę $1,398
OEM $6,990
Subskrypcja 999 USD/rok

Poziomy licencji wieczystej obejmują konkretną wersję. Aby uzyskać stałe aktualizacje i wsparcie techniczne, oprócz Licencji wieczystej wymagańa jest aktywna subskrypcja. Zespół powiększający się z jednego programisty do dwóch przechodzi bezpośrednio z poziomu dla jednego programisty (349 USD) do licencji na witrynę (1398 USD). Jeśli do wyodrębniania kodów BARCODE z plików PDF wymagańe jest również oprogramowanie Spire.PDF, licencja na to oprogramowanie wiąże się z dodatkowymi kosztami.

Licencjonowanie IronBarcode opiera się na trzech poziomach licencji wieczystych:

Licencja Cena Programiści
Lite $749 1
Professional $1,499 10
Nieograniczona $2,999 Nieograniczona

Wszystkie poziomy są bezterminowe z opcją dodania rocznej subskrypcji wsparcia i aktualizacji. Pięcioosobowy zespół korzystający z licencji Site firmy Spire.BarCode (1398 USD) oraz rocznej subskrypcji (999 USD) ponosi w pierwszym roku koszt 2397 USD, co jest porównywalne z ceną IronBarcode Professional wynoszącą 1499 USD za jednorazowy zakup bez konieczności ponoszenia kosztów w drugim roku.

Przewodnik po mapowaniu API

Spire.Barcode IronBarcode
new BarcodeScanner() Static BarcodeReader.Read()
scanner.Scan(path, BarCodeType.X) BarcodeReader.Read(path)
BarCodeType.Code128 (wymagańy parametr) Wykryto automatycznie; no equivalent needed
string[] results BarcodeResults kolekcja
results[0] (string) results[0].Value (ciąg znaków)
new BarcodeSettings() Parametry do BarcodeWriter.CreateBarcode()
settings.Type = BarCodeType.Code128 BarcodeEncoding.Code128 jako drugi parametr
settings.Data = "value" Pierwszy parametr CreateBarcode()
new BarCodeGenerator(settings) Nie jest potrzebne; static factory replaces this
generator.GenerateImage() + image.Save() .SaveAsPng(path) lub .SaveAsJpeg(path)
Spire.PDF (do odczytu w formacie PDF) Nie jest potrzebne; wbudowana natywna obsługa plików PDF
BarcodeSettings.ApplyKey("key") IronBarCode.License.LicenseKey = "key"
Spire.License.LicenseProvider.SetLicenseKey("key") IronBarCode.License.LicenseKey = "key"

Kiedy zespoły rozważają przejście z Spire.BarCode na IronBarcode

Przetwarzanie dokumentów o mieszanym formacie

Zespoły, które zaczynają od jednego znanego formatu BARCODE, często zauważają, że z czasem różnorodność formatów BARCODE rośnie. Aplikacja magazynowa, która zaczynała od etykiet Code128, może otrzymywać dostawy od dostawców korzystających z kodów DataMatrix, GS1-128 lub QR. Każdy nowy format wprowadzony do przepływu pracy wymaga aktualizacji tablicy kandydatów w pętli odgadywania typu, ponownego przetestowania logiki wykrywania oraz potwierdzenia, że żaden istniejący format nie został wyparowany przez kolejność iteracji. Kiedy różnorodność formatów osiąga punkt, w którym nakłady na utrzymanie tej pętli stają się powtarzającym się kosztem rozwoju, zespoły oceniają, czy automatyczne wykrywanie całkowicie wyeliminowałoby to obciążenie.

Integracja z PDF

W aplikacjach obsługujących duże ilości dokumentów często zdarza się, że BarCodes muszą być wyodrębniane z plików PDF, a nie z pojedynczych obrazów. W przepływie pracy Spire.BarCode przejście to wymaga nabyćia licencji Spire.PDF, zintegrowania drugiego pakietu oraz napisania infrastruktury do iteracji stron i wyodrębniania obrazów, zanim będzie można przystąpić do odczytu kodów kreskowych. Zespoły, które nie przewidziały tego wymogu przy początkowym zakupie, muszą teraz zarządzać dwiema licencjami na produkty i dwoma interfejsami API w celu wykonania zadania, które koncepcyjnie należy do odczytu kodów kreskowych. Odkrycie, że obsługa plików PDF wymaga osobnego zakupu, jest częstym powodem ponownej oceny wyboru produktu.

Ograniczenia dotyczące bezpłatnego poziomu

Zespoły, które przetestowały FreeSpire.BarCode, a następnie zakupiły licencję komercyjną, czasami zgłaszają, że produkt komercyjny zachowuje się inaczej niż sugerowały to wyniki testów. Jest to zamierzone działanie: bezpłatna wersja celowo obniża wydajność odczytu i ogranicza zestaw symboli, co oznacza, że testy porównawcze i testy pokrycia formatów przeprowadzone podczas oceny nie mają zastosowania w przypadku wdrożenia komercyjnego. Kiedy zespół odkrywa tę rozbieżność po zakupie, często szuka alternatyw, których zachowanie w wersji próbnej jest reprezentatywne dla zachowania w środowisku produkcyjnym.

Zmniejszenie liczby produktów

Organizacje, które standaryzują swój stos technologiczny, czasami identyfikują Spire.BarCode jako jeden z elementów rosnącego asortymentu produktów E-iceblue, z których każdy ma własny koszt licencji i cykl odnowienia. Jeśli głównym motorem działania Spire.BarCode jest odczytywanie kodów kreskowych w ramach procesu przetwarzania dokumentów — a nie głęboka integracja z Spire.Doc lub Spire.XLS — zespoły oceniają, czy pojedyncza, samodzielna biblioteka kodów kreskowych zmniejszyłaby zarówno złożoność licencjonowania, jak i zakres wsparcia technicznego.

Typowe kwestie związane z migracją

Usunięcie parametru BarCodeType

Każde wywołanie scanner.Scan() w kodzie źródłowym Spire.BarCode zawiera argument BarCodeType. Zastąpienie tych wywołań przez BarcodeReader.Read() całkowicie usuwa parametr typu. Pętle odgadywania typów — bloki foreach, które iterują przez potencjalne wartości BarCodeType — można całkowicie usunąć; Pojedyncze wywołanie BarcodeReader.Read() zastępuje całą pętlę.

Aktualizacja typu zwracanej wartości

Funkcja Scan() biblioteki Spire.BarCode zwraca string[]. IronBarcode zwraca kolekcję BarcodeResults. Należy zaktualizować miejsca wywołań, które przypisują string[] lub przekazują wyniki do metod oczekujących tego typu. Pobieranie wartości jako tablicy odbywa się za pomocą .Select(r => r.Value).ToArray(); Dostęp do pierwszego wyniku odbywa się za pomocą .First()?.Value.

Usunięcie pakietu Spire.PDF

Jeśli Spire.PDF został zainstalowany wyłącznie w celu obsługi wyodrębniania kodów kreskowych z plików PDF, można go usunąć po migracji do IronBarcode. Wszystkie importy using Spire.Pdf; i bloki iteracji stron podręcznika zostały zastąpione pojedynczym wywołaniem BarcodeReader.Read("file.pdf"). Jeśli Spire.PDF jest używane do innych operacji na dokumentach poza wyodrębnianiem kodów BARCODE, należy je zachować i zastąpić jedynie ścieżki kodu związane z kodami BARCODE.

Zmiany w przestrzeni nazw

Zastąp using Spire.Barcode; przez using IronBarCode;. Wyliczenie BarCodeType jest zastępowane przez BarcodeEncoding podczas generowania i nie wymaga odpowiednika podczas odczytu. Inicjalizacja licencji zmienia się z BarcodeSettings.ApplyKey() lub Spire.License.LicenseProvider.SetLicenseKey() na pojedyncze przypisanie właściwości IronBarCode.License.LicenseKey podczas uruchamiania aplikacji.

Dodatkowe możliwości IronBarcode

Poniższe funkcje IronBarcode nie zostały uwzględnione w powyższych porównaniach:

  • Zbiorcze odczytywanie obrazów: BarcodeReader.Read() akceptuje tablice ścieżek plików, obiekty Stream oraz instancje Bitmap, umożliwiając przetwarzanie zbiorcze bez ręcznego przechodzenia w pętli przez kolekcję danych wejściowych.
  • BarCodeReaderOptions: Prędkość odczytu, wykrywanie wielu kodów kreskowych, maksymalna liczba kandydatów oraz przetwarzanie wstępne w celu poprawy jakości obrazu można skonfigurować za pomocą pojedynczego obiektu opcji przekazanego do Read().
  • Wyjście SVG i HTML: BarcodeWriter.CreateBarcode() obsługuje .SaveAsSvg() i .SaveAsHtmlFile() oprócz formatów obrazów rastrowych, umożliwiając generowanie BARCODE-ów, które można osadzać w sieci.
  • Kod QR z logo: QRCodeWriter.CreateQrCode() obsługuje AddBrandLogo() na wszystkich poziomach licencji, umożliwiając umieszczenie niestandardowego obrazu w środku kodu QR bez wpływu na niezawodność skanowania przy odpowiednich poziomach korekcji błędów.
  • Wyjście strumieniowe i tablica bajtów: Wygenerowane BARCODES można eksportować jako Stream lub byte[] w celu bezpośredniego zapisania lub zapisania w odpowiedzi HTTP bez pliku pośredniego.
  • GS1-128 i symbologie strukturalne: IronBarcode obsługuje strukturalne symbologie GS1 wykraczające poza zakres dostępny w komercyjnej wersji Spire.BARCODE.

Zgodność z platformą .NET i gotowość na przyszłość

IronBarcode obsługuje .NET Framework 4.6.2 i nowsze wersje, .NET Core 3.1 oraz wszystkie wersje od .NET 5 do .NET 9, a aktualizacje zapewniające kompatybilność z .NET 10 są spodziewane w miarę zbliżania się terminu premiery w 2026 roku. Biblioteka IronBarcode została przetestowana na systemach Windows, Linux i macOS i działa w kontenerach Docker bez konieczności dodatkowej konfiguracji zależności natywnych. Spire.BarCode obsługuje również wdrażanie .NET na wielu platformach, chociaż jego konfiguracje dla systemów Linux i Docker mogą wymagać dodatkowej konfiguracji bibliotek natywnych w zależności od używanej wersji. Regularne wydania IronBarcode gwarantują, że nowe funkcje języka C# i ulepszenia środowiska uruchomieniowego .NET są włączane wraz z aktualizacjami zapewniającymi zgodność z platformami.

Wnioski

Spire.BarCode i IronBarcode podchodzą do problemu odczytu kodów kreskowych z zasadniczo różnych perspektyw. Spire.BarCode nakłada na użytkownika odpowiedziąlność za znajomość formatów — każda operacja skanowania wymaga od programisty wcześniejszego zadeklarowania symboliki, co jest wykonalnym ograniczeniem w przepływach pracy opartych na formatach zamkniętych, a w tych opartych na formatach otwartych stanowi obciążenie związane z utrzymaniem. IronBarcode umieszcza wykrywanie formatu wewnątrz biblioteki IronBarcode, nie wymagając parametru typu i zwracając wykryty format jako część wyniku.

Spire.BarCode to rozsądny wybór dla aplikacji przetwarzających jeden gwarantowany format kodów kreskowych, szczególnie gdy zespół jest już zaangażowany w ekosystem produktów E-iceblue. Model generowania obiektów ustawień jest znany programistom preferującym jawną konfigurację, a licencja komercyjna jest konkurencyjna w przypadku projektów realizowanych przez pojedynczego programistę. Zespoły, które mogą zagwarantować BarCodeType.Code128 przy każdym wywołaniu, nie ponoszą żadnych praktycznych kosztów związanych z obowiązkowym parametrem typu.

IronBarcode lepiej nadaje się do zastosowań, w których różnorodność formatów jest nieprzewidywalna lub rośnie, gdzie wyodrębnianie kodów kreskowych z plików PDF jest podstawowym wymogiem, a dokładność oceny ma znaczenie. Wersja próbna działa z pełną prędkością produkcyjną i pełnym zestawem symboli, dzięki czemu wyniki testów wydajności i testów pokrycia formatów przeprowadzonych podczas oceny mają bezpośrednie zastosowanie w wdrożeniu produkcyjnym. Wbudowana obsługa formatu PDF eliminuje potrzebę stosowania dodatkowej biblioteki i związanych z tym kosztów licencji. Dla zespołów rozważających IronBarcode jako alternatywę dla Spire.BarCode, przegląd alternatyw dla Spire.BarCode dostarcza dodatkowego kontekstu dotyczącego porównania.

Ostateczna decyzja zależy od przewidywalności formatu i zakresu przepływu pracy. System magazynowy z ustalonym standardem etykiet Code128 i bez dokumentów źródłowych w formacie PDF nie ma praktycznego powodu, aby preferować automatyczne wykrywanie IronBarcode. Proces przetwarzania dokumentów, który pobiera kody kreskowe od zewnętrznych dostawców, obsługuje różne symbole i odczytuje załączniki PDF, uzna obowiązkowy parametr typu oraz wymóg posiadania dwóch bibliotek PDF za stałe koszty utrzymania, które IronBarcode eliminuje.

Często Zadawane Pytania

Czym jest Spire.BarCode?

Spire.BarCode to biblioteka kodów kreskowych .NET służąca do generowania i odczytywania kodów kreskowych w aplikacjach C#. Jest to jedna z kilku alternatyw rozważanych przez programistów przy wyborze rozwiązania do obsługi kodów kreskowych w projektach .NET.

Jakie są główne różnice między Spire.BarCode a IronBarcode?

IronBarcode wykorzystuje statyczne, bezstanowe API, które nie wymaga zarządzania instancjami, podczas gdy Spire.BarCode zazwyczaj wymaga utworzenia instancji i konfiguracji przed użyciem. IronBarcode zapewnia również natywną obsługę plików PDF, automatyczne wykrywanie formatów oraz licencjonowanie za pomocą jednego klucza we wszystkich środowiskach.

Czy licencja na IronBarcode jest łatwiejsza do uzyskania niż na Spire.BARCODE?

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 obsługuje wszystkie formaty kodów kreskowych obsługiwane przez Spire.BarCode?

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.

W jaki sposób IronBarcode radzi sobie z przetwarzaniem wsadowym w porównaniu z Spire.BarCode?

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 mogę przetestować IronBarcode przed zakupem, w przeciwieństwie do Spire.BARCODE?

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óżnica w cenie między Spire.BarCode 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 migracja z Spire.BarCode do IronBarcode jest prosta?

Migracja z Spire.BarCode do IronBarcode polega przede wszystkim na zastąpieniu wywołań API opartych na instancjach statycznymi metodami IronBarcode, usunięciu standardowych fragmentów kodu dotyczących licencji oraz aktualizacji nazw właściwości wyników. Większość migracji wiąże się raczej z redukcją kodu niż z jego dodawaniem.

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