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

QRCoder.NET vs IronBarcode: Porównanie bibliotek kodów kreskowych C#

Spire.Barcode kontra IronBarcode: Specyfikacja Typu, Wsparcie dla PDF i Porównanie Ceny

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 publikuje dwa pakiety: FreeSpire.Barcode bez oplat 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ą:

  • Obowiazkowy parametr BarCodeType: Kazde wywolanie BarcodeScanner.Scan() wymaga wartosci wyliczeniowej BarCodeType. Nie ma przeciążenia, które akceptuje tylko ścieżkę do pliku i wykonuje automatyczne wykrywanie formatu.
  • Model generacji obiektow ustawien: Generacja kodow kreskowych opiera sie na zmiennym obiekcie BarcodeSettings, ktory jest przekazywany do instancji BarCodeGenerator, wymagajac wielokrotnych przypisan wlasciwosci przed wygenerowaniem jakiejkolwiek produkcji.
  • Brak natywnej obsługi plików PDF: Spire.BarCode nie może odczytywać kodów kreskowych bezpośrednio z plików PDF. Przeplywy oparte na PDF wymagaja oddzielnego pakietu Spire.PDF, oddzielnej licencji oraz recznego kodu do ekstrakcji stron i obrazow napisanego przez programiste.
  • 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 zwrotny: BarcodeScanner.Scan() zwraca string[], ktore nie posiada metadanych formatu. Wykryty typ nie został uwzględniony w wyniku.

Wymagania dotyczące specyfikacji typu

Metoda BarcodeScanner.Scan() w Spire.Barcode nie posiada przeciążenia przyjmującego tylko scież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 iterates through candidate types
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 iterates through candidate types
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 odpowiedzialny 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() zawierają wykryty format, zdekodowaną wartość oraz kontekstowe metadane, takie jak numer strony w przypadku źródeł PDF i współrzędne obszaru w obrazie źródłowym.

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.
  • Jednopakietowa obsługa plików PDF: Pliki PDF są akceptowane bezpośrednio przez BarcodeReader.Read() bez żadnego dodatkowego pakietu NuGet, licencji lub ręcznego kodu ekstrakcji stron.
  • Plynne API generowania: BarcodeWriter.CreateBarcode() to statyczna metoda fabryczna zwracająca obiekt nadający się do łączenia dla automatycznego rozmiaru, stylu i zapisu w jednej ekspresji.
  • 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 precyzyjnego ustawiania: Prędkość odczytu, wielokrotne wykrywanie kodów kreskowych, wstępne przetwarzanie obrazów i oczekiwane filtry rodzajów symboli są konfigurowalne bez zmiany bibliotek.
  • Obiekty wynikowe z metadanymi: Każdy wynik w kolekcji BarcodeResults ujawnia Value, Format, PageNumber oraz dane obszaru 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 (wymagany 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 ~38 (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 ~38 (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 $999/rok (Abonament na Lokalizację) $749 (Lite, wieczysta)

Odczytywanie BarCode

Podejście Spire.BarCode

Metoda BarcodeScanner.Scan() w Spire.Barcode wymaga na każdej wywołaniu parametru BarCodeType. 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. Wynik to string[], który nie przekazuje żadnych informacji o typie, więc dalsze kierowanie na podstawie formatu wymaga dodatkowego zarządzania stanem przez wywołującego.

Podejście IronBarcode

Metoda BarcodeReader.Read() w IronBarcode 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: automatic format detection
var results = BarcodeReader.Read("barcode.png");

foreach (var result in results)
{
    Console.WriteLine($"{result.Format}: {result.Value}");
}
// IronBarcode: automatic format detection
var results = BarcodeReader.Read("barcode.png");

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

' IronBarcode: automatic format detection
Dim results = BarcodeReader.Read("barcode.png")

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

Każdy obiekt wynikowy zawiera Format, Value oraz metadane dotyczące pozycji. 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.

Aspekt 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 Ograniczona podana edycja płatna 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ć ręczny kod iteracji stron i ekstrakcji obrazów przed rozpoczęciem skanowania kodów kreskowych:

// Spire.Barcode + Spire.PDF: separate package and license required
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 for each scan call
        string[] results = scanner.Scan(image, BarCodeType.QRCode);
    }
}
// Spire.Barcode + Spire.PDF: separate package and license required
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 for each scan call
        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 for each scan call
        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 kodów kreskowych z dokumentów PDF to jedno wywołanie metody wykorzystujące to samo API BarcodeReader.Read() używane dla plików obrazów. Numery stron są zawarte w każdym obiekcie wyniku:

// IronBarcode: native PDF reading from the same Read() method
var results = BarcodeReader.Read("document.pdf");

foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} = {barcode.Value}");
}
// IronBarcode: native PDF reading from the same Read() method
var results = BarcodeReader.Read("document.pdf");

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

' IronBarcode: native PDF reading from the same Read() method
Dim results = BarcodeReader.Read("document.pdf")

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

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

Generowanie API

Podejście Spire.BarCode

Model generacji w Spire.Barcode opiera się na zmiennym obiekcie konfiguracyjnym BarcodeSettings. Programista inicjuje ustawienia, przypisuje indywidualne wlasciwości, przekazuje obiekt ustawień do BarCodeGenerator, 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

' IronBarcode generation
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

Opublikowany cennik Spire.Barcode obejmuje licencjonowanie wewnętrzne na lokalizację i poziomy wdrożenia OEM:

Licencja Cena Wdrożenie
Licencja na Lokalizację (tylko do użytku wewnętrznego) $1,398 Jedna lokalizacja
Abonament na Lokalizację (1-roczne aktualizacje/wsparcie) 999 USD/rok Jedna lokalizacja
Abonament dla OEM Dewelopera $3 395/rok Publicznie dostępne / w chmurze / Docker
Abonament na Lokalizację OEM $10 187/rok Publicznie dostępne / w chmurze / Docker (do 10 deweloperów)

Tylko poziomy OEM pozwalają na wdrożenie dla publicznie dostępnych stron internetowych, Docker lub aplikacji w chmurze. Poziom wersji nie-OEM jest ograniczony do użytku wewnętrznego w jednej lokalizacji geograficznej. Jeśli do wyodrębniania kodów BARCODE z plików PDF wymagane jest również oprogramowanie Spire.PDF, licencja na to oprogramowanie wiąże się z dodatkowymi kosztami.

Licencjonowanie IronBarcode używa czterech poziomów wieczystych:

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

Wszystkie poziomy są bezterminowe z opcją dodania rocznej subskrypcji wsparcia i aktualizacji. Pięcioosobowy zespół na Abonamencie na Lokalizację Spire.Barcode płaci $999 co roku za aktualizacje i wsparcie; odpowiedni poziomProfessional IronBarcode obejmuje do dziesięciu programistów za jednorazowe $2,999 bez wymaganej odnowienia.

Przewodnik po mapowaniu API

Spire.Barcode IronBarcode
new BarcodeScanner() Statyczny BarcodeReader.Read()
scanner.Scan(path, BarCodeType.X) BarcodeReader.Read(path)
BarCodeType.Code128 (obowiązkowy parametr) Wykryto automatycznie; Nie jest potrzebny żaden odpowiednik
string[] results kolekcja BarcodeResults
results[0] (ciąg znaków) 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 metody CreateBarcode()
new BarCodeGenerator(settings) Nie jest potrzebne; Statyczna fabryka zastępuje to
generator.GenerateImage() + image.Save() .SaveAsPng(path) albo .SaveAsJpeg(path)
Spire.PDF (do odczytu PDF) Nie jest potrzebne; wbudowana natywna obsługa plików PDF
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 Spire.Barcode niesie argument BarCodeType. Zastąpienie tych wywołań przez BarcodeReader.Read() całkowicie usuwa parametr typu. Pętle zgadywane przez typ — foreach bloki, które przechodzą przez wartość kandydującą BarCodeType — mogą być w pełni usunięte; pojedyncze wywołanie BarcodeReader.Read() zastępuje całą pętlę.

Aktualizacja typu zwracanej wartości

Metoda Scan() w Spire.Barcode zwraca string[].IronBarcode zwraca kolekcję BarcodeResults. Miejsca wywołań, które przypisują się do string[] albo przekazują wyniki do metod oczekujących tego typu, wymagają aktualizacji. Wyodrębnianie wartości jako tablicy wykorzystuje .Select(r => r.Value).ToArray(); dostęp do pierwszego wyniku jest możliwy przez .First()?.Value.

Usunięcie pakietu Spire.PDF

Jeśli Spire.PDF zostal zainstalowany wyłącznie do wsparcia ekstrakcji kodów kreskowych z plików PDF, to może być usunięty po migracji do IronBarcode. Wszystkie importy using Spire.Pdf; oraz bloki ręcznej iteracji stron są zastępowane przez pojedyncze wywołanie BarcodeReader.Read("file.pdf"). Jeśli Spire.PDF jest używany do innych operacji na dokumentach niż ekstrakcja kodów kreskowych, to warto go zachować, a jedynie zastąpić ścieżki kodu związane z kodami kreskowymi.

Zmiany w przestrzeni nazw

Zastąp using Spire.Barcode; przez using IronBarCode;. Enum BarCodeType jest zastępowany przez BarcodeEncoding do generacji i nie wymaga odpowiednika do odczytu. Inicjalizacja licencji zmienia się z Spire.License.LicenseProvider.SetLicenseKey() na pojedyncze przypisanie wlasciwosci 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:

  • Odczyt partii obrazow: BarcodeReader.Read() akceptuje tablice ścieżek do plików, obiektów Stream i instancji Bitmap, umożliwiając przetwarzanie partii bez ręcznego iterowania kolekcji wejściowej.
  • Opcje BarcodeReader: Prędkość odczytu, wykrywanie wielu kodów kreskowych, maksymalna liczba kandydatów oraz wstępne przetwarzanie ulepszające obraz można skonfigurować za pomocą pojedynczego obiektu opcji przekazanego do Read().
  • Wyjście SVG i HTML: BarcodeWriter.CreateBarcode() obsługuje zarówno .SaveAsSvg() jak i .SaveAsHtmlFile() obok formatów rastrowych obrazów, umożliwiając osadzanie kodów kreskowych w Internecie.
  • Kod QR z logo: QRCodeWriter.CreateQrCode() wspiera AddBrandLogo() na wszystkich poziomach licencji, pozwalając na dodanie niestandardowego obrazu do środka kodu QR bez wpływu na niezawodność skanowania przy odpowiednich poziomach korekcji błędów.
  • Strumień i tablica bajtów jako wyjście: Generowane kody kreskowe mogą być eksportowane jako Stream lub byte[] do bezpośredniego magazynowania lub zapisu odpowiedzi HTTP bez pośredniego pliku.
  • 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 Framework4.6.2 i nowsze wersje, .NET Core 3.1 oraz aktualne wydania .NET. Biblioteka jest testowana na systemach Windows, Linux i macOS i działa w kontenerach Dockera bez dodatkowej konfiguracji natywnych zależności. 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 odpowiedzialność 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 płacą żadnych praktycznych kosztów za obowiązkowy parametr 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().

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ę...

Czytaj więcej

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie