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

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

QRCodervs IronBarcode: Gdzie Biblioteka Tylko QR Osiąga Swoje Limity

QRCoder ma jedną wyjątkową zaletę: generuje kody QR w czystym C# bez żadnych zewnętrznych zależności, z nieograniczoną licencjąMITi przemyślanym API, które obsługuje wszystko, od standardowego formatowania danych po różne renderery wyjściowe. Z ponad 60 milionami pobrań NuGet, jego reputacja jest zasłużona. Porównanie z IronBarcode nie jest oceną jakości — jest to kwestia zakresu.IronBarcode obsługuje ponad 50 formatów BARCODE, odczytuje je i zapisuje oraz integruje się z dokumentami PDF za pośrednictwem jednego spójnego interfejsu API. Dla zespołów, których wymagania wykraczają poza generowanie kodów QR, kluczowe znaczenie ma zrozumienie, gdzie celowo kończy się zakres funkcji QRCodera.

Zrozumienie QRCoder

QRCoder został stworzony przez Raffaela Herrmanna w 2013 roku, a obecnie jest utrzymywany przez Shane32. Biblioteka jest napisana w całości w języku C# i nie ma żadnych zewnętrznych zależności — nie ma konfliktów wersji SkiaSharp, nie ma problemów z licencjami komercyjnymi ImageSharp, nie ma też natywnych plików binarnych do wdrożenia. Działa na każdej platformie, na której działa .NET.

LicencjaMITjest rzeczywiście nieograniczona. W przeciwieństwie do niektórych popularnych bibliotek, w których przekroczenie progu przychodów powoduje konieczność uzyskania licencji komercyjnej,QRCodernie zawiera żadnych ukrytych ograniczeń komercyjnych. To rozróżnienie ma znaczenie dla zespołów tworzących aplikacje komercyjne.

Klasa PayloadGenerator dodaje znaczącą praktyczną wartość: obsługuje powszechne formaty danych kodów QR — dane uwierzytelniania WiFi, wizytówki (vCard), zdarzenia kalendarza, wiadomości SMS i punkty geolokacyjne — dzięki czemu programiści nie muszą zapamiętywać formatu dla każdego standardu. Różnorodność rendererów jest również duża w wielu typach wyjściowych.

Kluczowe cechy architektury:

  • Zero zależności zewnętrznych: czysty C# bez wymagań dotyczących środowiska uruchomieniowego innych firm, co upraszcza wdrażanie w środowiskach kontenerowych lub o ograniczonym dostępie
  • LicencjaMITbez ograniczeń dotyczących przychodów: prawdziwie bezpłatna do użytku komercyjnego bez progów przychodów ani warunków komercyjnych
  • PayloadGenerator Helpers: wbudowane formatatory dla standardów WiFi, vCard, CalendarEvent, SMS, Geo i innych popularnych standardów danych QR
  • Różnorodność rendererów: bajty PNG, ciąg znaków SVG, grafika ASCII, Base64, BMP oraz kilka dodatkowych formatów wyjściowych
  • Pełna kontrola korekcji błędów: dostępne są wszystkie cztery poziomy ECC (L, M, Q, H)
  • Obsługa Micro QR: kompaktowa odmiana kodu QR przeznaczona do etykiet o ograniczonej przestrzeni, niedostępna we wszystkich bibliotekach BarCode
  • Projekt wyłącznie dla kodów QR: Interfejs API obejmuje wyłącznie generowanie kodów QR — bez formatów 1D, bez DataMatrix, bez odczytu kodów BarCode

Projekt wyłącznie z kodem QR

QRCoder oddziela etap tworzenia danych od etapu renderowania. QRCodeGenerator generuje pośredni obiekt QRCodeData, który następnie jest przekazywany do klasy renderera. Ten wzorzec zapewnia precyzyjną kontrolę nad formatem wyjściowym kosztem dodatkowych obiektów:

using QRCoder;
using System.IO;

var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
    "https://example.com",
    QRCodeGenerator.ECCLevel.M
);

// PNG bytes via PngByteQRCode
var pngQR = new PngByteQRCode(qrCodeData);
byte[] pngBytes = pngQR.GetGraphic(20); // 20px per module
File.WriteAllBytes("qr.png", pngBytes);

// SVG string via SvgQRCode
string svgContent = new SvgQRCode(qrCodeData).GetGraphic(10);
File.WriteAllText("qr.svg", svgContent);
using QRCoder;
using System.IO;

var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
    "https://example.com",
    QRCodeGenerator.ECCLevel.M
);

// PNG bytes via PngByteQRCode
var pngQR = new PngByteQRCode(qrCodeData);
byte[] pngBytes = pngQR.GetGraphic(20); // 20px per module
File.WriteAllBytes("qr.png", pngBytes);

// SVG string via SvgQRCode
string svgContent = new SvgQRCode(qrCodeData).GetGraphic(10);
File.WriteAllText("qr.svg", svgContent);
Imports QRCoder
Imports System.IO

Dim qrGenerator As New QRCodeGenerator()
Dim qrCodeData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)

' PNG bytes via PngByteQRCode
Dim pngQR As New PngByteQRCode(qrCodeData)
Dim pngBytes As Byte() = pngQR.GetGraphic(20) ' 20px per module
File.WriteAllBytes("qr.png", pngBytes)

' SVG string via SvgQRCode
Dim svgContent As String = New SvgQRCode(qrCodeData).GetGraphic(10)
File.WriteAllText("qr.svg", svgContent)
$vbLabelText   $csharpLabel

Metoda QRCodeGenerator.CreateQrCode jest jedynym punktem wejścia do tworzenia kodu — nie ma CreateCode128, CreateDataMatrix, ani CreateEAN13. Biblioteka w pełni odpowiada zamierzonemu zakresowi.

Zrozumienie IronBarcode

IronBarcode to komercyjna biblioteka IronBarcode for .NET firmy Iron Software, która obsługuje generowanie i odczytywanie ponad 50 formatów kodów kreskowych za pośrednictwem jednego, spójnego interfejsu API. Zamiast utrzymywać oddzielne biblioteki dla różnych rodzin formatów,IronBarcode udostępnia wszystkie formaty poprzez parametry BarcodeEncoding na tych samych statycznych punktach wejścia BarcodeWriter i BarcodeReader.

Biblioteka korzysta z modelu API statycznego: BarcodeWriter.CreateBarcode nie wymaga konfiguracji instancji, a BarcodeReader.Read akceptuje ścieżki plików, strumienie, tablice bajtów i obiekty System.Drawing.Bitmap z automatycznym wykrywaniem wieloformatowym. Obsługa dokumentów PDF — zarówno odczytywanie BARCODE-ów ze stron PDF, jak i osadzanie BARCODE-ów w plikach PDF — jest dostępna bez zewnętrznych zależności.

Kluczowe cechy:

  • 50+ formatów kodów kreskowych: Kod QR, Code 128, EAN-13, UPC-A, DataMatrix, PDF417, Aztec, MaxiCode i wiele więcej poprzez pojedynczy parametr BarcodeEncoding
  • Zintegrowane API do odczytu: BarcodeReader.Read obsługuje obrazy, pliki PDF i strumienie z automatycznym wykrywaniem formatów — nie ma potrzeby drugiej biblioteki
  • Dostosowanie kodu QR: Osadzanie logo, zmiany koloru i kontrola strefy ciszy poprzez metody QRCodeWriter
  • Integracja z PDF: odczytuj BarCodes ze stron PDF i umieszczaj je w istniejących dokumentach PDF
  • Model API statycznego: Nie wymaga instancji generatora — BarcodeWriter to klasa statyczna
  • Licencja komercyjna: od 749 USD za licencję dla jednego programisty bez ograniczeń dotyczących formatów

Porównanie funkcji

Poniższa tabela podsumowuje podstawowe różnice międzyQRCodera IronBarcode:

Funkcja QRCoder IronBarcode
Generowanie kodów QR Tak — doskonałe Tak
Generowanie kodów kreskowych 1D Nie Tak (ponad 30 formatów)
Inne formaty 2D Nie Tak (DataMatrix, PDF417,Aztecitp.)
Odczytywanie BarCode Nie Tak — automatyczne wykrywanie
Obsługa plików PDF Nie Tak — przeczytaj i zatwierdź
Licencja MIT— prawdziwie darmowe Wersja komercyjna (749 USD dla jednego programisty)

Szczegółowe porównanie funkcji

Funkcja QRCoder IronBarcode
Generacja
Kod QR Tak Tak
Micro QR Tak Nie
Kod 128 Nie Tak
EAN-13 / UPC-A Nie Tak
DataMatrix Nie Tak
PDF417 Nie Tak
Aztec Nie Tak
Łączna liczba formatów 1 50+
Funkcje kodów QR
Korekta błędów (L/M/Q/H) Tak Tak
Osadzanie logo Tak Tak
Dostosowanie kolorów Tak Tak
Wynik w formacie SVG Tak Tak
Wynik w postaci grafiki ASCII Tak Nie
Wynik w formacie Base64 Tak Nie
Pomocniki PayloadGenerator Tak Nie — ręczne tworzenie ciągów znaków
Czytanie
Odkoduj z obrazu Nie Tak
Dekoduj z pliku PDF Nie Tak
Automatyczne wykrywanie formatowania Nie Tak
Integracja
Stemplowanie BarCode w plikach PDF Nie Tak
Brak zewnętrznych zależności Tak Samodzielny
Licencjonowanie
Rodzaj licencji MIT Komercjalne
Ograniczenia dotyczące przychodów None None
Ceny według formatu None None

Generowanie kodów QR

Obie biblioteki generują kody QR, ale ich interfejsy API odzwierciedlają różne filozofie projektowania w zakresie wzajemnych powiązań między etapem generowania a etapem renderowania.

Podejście QRCoder

QRCoder używa wzoru dwufazowego: QRCodeGenerator.CreateQrCode produkuje pośredni obiekt QRCodeData kodujący dane i poziom korekcji błędów, a oddzielna klasa renderera przekształca ten obiekt pośredni w pożądany format wyjściowy. Poziom ECC jest parametrem wymaganym, który nie ma wartości domyślnej — programiści muszą dokonać wyraźnego wyboru:

using QRCoder;
using System.IO;

var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
    "https://example.com",
    QRCodeGenerator.ECCLevel.M
);

var qrCode = new PngByteQRCode(qrCodeData);
byte[] pngBytes = qrCode.GetGraphic(20); // pixels per module
File.WriteAllBytes("qr.png", pngBytes);
using QRCoder;
using System.IO;

var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
    "https://example.com",
    QRCodeGenerator.ECCLevel.M
);

var qrCode = new PngByteQRCode(qrCodeData);
byte[] pngBytes = qrCode.GetGraphic(20); // pixels per module
File.WriteAllBytes("qr.png", pngBytes);
Imports QRCoder
Imports System.IO

Dim qrGenerator As New QRCodeGenerator()
Dim qrCodeData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)

Dim qrCode As New PngByteQRCode(qrCodeData)
Dim pngBytes As Byte() = qrCode.GetGraphic(20) ' pixels per module
File.WriteAllBytes("qr.png", pngBytes)
$vbLabelText   $csharpLabel

Ten wzór ma tę zaletę, że pozwala na ponowne użycie obiektu qrCodeData dla wielu formatów wyjściowych bez ponownego generowania danych kodu. Klasy rendererów obejmują PngByteQRCode, SvgQRCode, AsciiQRCode, Base64QRCode, i BitmapByteQRCode, wśród innych.

Podejście IronBarcode

IronBarcode łączy generowanie i renderowanie w płynny łańcuch na statycznej klasie BarcodeWriter. Parametr BarcodeEncoding.QRCode wybiera format, a metody terminalne takie jak SaveAsPng lub ToPngBinaryData określają wyjście:

using IronBarCode;

// Single fluent call — no intermediate objects
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .ResizeTo(400, 400)
    .SaveAsPng("qr.png");
using IronBarCode;

// Single fluent call — no intermediate objects
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .ResizeTo(400, 400)
    .SaveAsPng("qr.png");
Imports IronBarCode

' Single fluent call — no intermediate objects
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
    .ResizeTo(400, 400) _
    .SaveAsPng("qr.png")
$vbLabelText   $csharpLabel

W przypadku wymagających jawnej kontroli korekcji błędów, klasa QRCodeWriter oferuje opcje specyficzne dla formatu:

using IronBarCode;

var qr = QRCodeWriter.CreateQrCode(
    "https://example.com",
    500,
    QRCodeWriter.QrErrorCorrectionLevel.Medium
);
qr.SaveAsPng("qr.png");
using IronBarCode;

var qr = QRCodeWriter.CreateQrCode(
    "https://example.com",
    500,
    QRCodeWriter.QrErrorCorrectionLevel.Medium
);
qr.SaveAsPng("qr.png");
Imports IronBarCode

Dim qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Medium)
qr.SaveAsPng("qr.png")
$vbLabelText   $csharpLabel

Przewodnik po tworzeniu kodów 2D IronBarcode obejmuje wszystkie obsługiwane formaty 2D, w tym Kod QR, DataMatrix,PDF417i Aztec, poprzez ten sam punkt wejścia BarcodeWriter.

Dostosowanie kodu QR

Obie biblioteki obsługują osadzanie logo i zmiany kolorów w kodach QR, ale różnią się podejściem do wymaganych typów systemów.

Podejście QRCoder

Osadzanie logoQRCoderprzebiega przez renderer klasy QRCode (odrębny od PngByteQRCode), który udostępnia przeciążenie GetGraphic akceptujące System.Drawing.Bitmap. Oznacza to, że kod wywołujący musi pracować z System.Drawing bezpośrednio, aby załadować plik logo:

using QRCoder;
using System.Drawing;

var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
    "https://example.com",
    QRCodeGenerator.ECCLevel.H // High ECC required when logo occludes part of the code
);

var qrCode = new QRCode(qrCodeData);
var logoBitmap = new Bitmap("logo.png");
var qrBitmap = qrCode.GetGraphic(10, Color.Black, Color.White, logoBitmap);
qrBitmap.Save("qr-logo.png", System.Drawing.Imaging.ImageFormat.Png);
using QRCoder;
using System.Drawing;

var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
    "https://example.com",
    QRCodeGenerator.ECCLevel.H // High ECC required when logo occludes part of the code
);

var qrCode = new QRCode(qrCodeData);
var logoBitmap = new Bitmap("logo.png");
var qrBitmap = qrCode.GetGraphic(10, Color.Black, Color.White, logoBitmap);
qrBitmap.Save("qr-logo.png", System.Drawing.Imaging.ImageFormat.Png);
Imports QRCoder
Imports System.Drawing

Dim qrGenerator As New QRCodeGenerator()
Dim qrCodeData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H) ' High ECC required when logo occludes part of the code

Dim qrCode As New QRCode(qrCodeData)
Dim logoBitmap As New Bitmap("logo.png")
Dim qrBitmap = qrCode.GetGraphic(10, Color.Black, Color.White, logoBitmap)
qrBitmap.Save("qr-logo.png", System.Drawing.Imaging.ImageFormat.Png)
$vbLabelText   $csharpLabel

Dostosowanie koloru następuje w podobny sposób poprzez parametry darkColor i lightColor przeciążenia GetGraphic.

Podejście IronBarcode

IronBarcode udostępnia osadzanie logo i zmiany koloru jako nazwane metody na obiekcie wyniku QRCodeWriter. Metoda AddBrandLogo akceptuje ścieżkę do pliku, a ChangeBarCodeColor przyjmuje wartość Color:

using IronBarCode;
using System.Drawing;

// Logo embedding
var qr = QRCodeWriter.CreateQrCode(
    "https://example.com",
    500,
    QRCodeWriter.QrErrorCorrectionLevel.Highest
);
qr.AddBrandLogo("logo.png");
qr.SaveAsPng("qr-logo.png");

// Colour customisation
var coloredQr = QRCodeWriter.CreateQrCode("https://example.com", 500);
coloredQr.ChangeBarCodeColor(Color.DarkBlue);
coloredQr.SaveAsPng("colored-qr.png");
using IronBarCode;
using System.Drawing;

// Logo embedding
var qr = QRCodeWriter.CreateQrCode(
    "https://example.com",
    500,
    QRCodeWriter.QrErrorCorrectionLevel.Highest
);
qr.AddBrandLogo("logo.png");
qr.SaveAsPng("qr-logo.png");

// Colour customisation
var coloredQr = QRCodeWriter.CreateQrCode("https://example.com", 500);
coloredQr.ChangeBarCodeColor(Color.DarkBlue);
coloredQr.SaveAsPng("colored-qr.png");
Imports IronBarCode
Imports System.Drawing

' Logo embedding
Dim qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
qr.AddBrandLogo("logo.png")
qr.SaveAsPng("qr-logo.png")

' Colour customisation
Dim coloredQr = QRCodeWriter.CreateQrCode("https://example.com", 500)
coloredQr.ChangeBarCodeColor(Color.DarkBlue)
coloredQr.SaveAsPng("colored-qr.png")
$vbLabelText   $csharpLabel

Przewodnik po dostosowywaniu stylu kodów QR szczegółowo omawia rozmiary logo, kombinacje kolorów oraz kontrolę strefy ciszy.

Odczytywanie BarCode

Odczytywanie BarCode stanowi największą różnicę w możliwościach obu bibliotek.

Podejście QRCoder

QRCoder nie posiada API do odczytu kodów kreskowych. Klasa QRCodeGenerator i wszystkie klasy rendererów są tylko do generowania. Nie ma metody dekodowania kodu QR z obrazu, pliku lub strumienia. Aplikacje, które muszą zarówno generować, jak i odczytywać kody QR, muszą dodać oddzielną bibliotekę — zazwyczaj ZXing.Net — z własnym API, własną przestrzenią nazw i własnym cyklem konserwacji:

//QRCoderhas no reading API.
// These methods do not exist:
//   qrGenerator.Decode("image.png");
//   QRCodeReader.Read("image.png");
//
// A separate library (e.g., ZXing.Net) is required for decoding.
//QRCoderhas no reading API.
// These methods do not exist:
//   qrGenerator.Decode("image.png");
//   QRCodeReader.Read("image.png");
//
// A separate library (e.g., ZXing.Net) is required for decoding.
'QRCoder has no reading API.
' These methods do not exist:
'   qrGenerator.Decode("image.png")
'   QRCodeReader.Read("image.png")
'
' A separate library (e.g., ZXing.Net) is required for decoding.
$vbLabelText   $csharpLabel

Jest to decyzja projektowa, a nie przeoczenie —QRCoderjest wyraźnie biblioteką generującą.

Podejście IronBarcode

IronBarcode zawiera interfejs API do odczytu w tym samym pakiecie. BarcodeReader.Read akceptuje pliki obrazów, pliki PDF, strumienie i obiekty System.Drawing.Bitmap. Automatycznie wykrywa formaty BARCODE bez konieczności określania przez użytkownika, jakiego formatu szuka, i zwraca wszystkie BARCODE znalezione na obrazie:

using IronBarCode;

// Reading a QR code — no separate library required
var results = BarcodeReader.Read("qr.png");
foreach (var result in results)
{
    Console.WriteLine(result.Value);       // decoded value
    Console.WriteLine(result.Format);      // QRCode, Code128, EAN13, etc.
}
using IronBarCode;

// Reading a QR code — no separate library required
var results = BarcodeReader.Read("qr.png");
foreach (var result in results)
{
    Console.WriteLine(result.Value);       // decoded value
    Console.WriteLine(result.Format);      // QRCode, Code128, EAN13, etc.
}
Imports IronBarCode

' Reading a QR code — no separate library required
Dim results = BarcodeReader.Read("qr.png")
For Each result In results
    Console.WriteLine(result.Value)       ' decoded value
    Console.WriteLine(result.Format)      ' QRCode, Code128, EAN13, etc.
Next
$vbLabelText   $csharpLabel

Przewodnik dotyczący odczytu BARCODE-ów z obrazów obejmuje odczyt z plików PDF, dokumentów wielostronicowych, strumieni oraz obrazów o niskiej rozdzielczości lub zawierających zakłócenia za pośrednictwem tego samego punktu wejścia.

Zakres formatowania poza QR

Podejście QRCoder

QRCoder generuje wyłącznie kody QR — tak zostało zaprojektowane. Metoda QRCodeGenerator.CreateQrCode jest jedynym punktem wejścia dla generowania, który biblioteka udostępnia. Projekty, które rozpoczynają się od kodów QR, a później wymagają etykiet wysyłkowych w formacie Code 128, kodów produktów EAN-13 lub kodów zgodności farmaceutycznej DataMatrix, muszą wprowadzić drugą bibliotekę, aby obsłużyć każdy dodatkowy format:

using QRCoder;

//QRCoderis limited to QR — other formats require separate packages
var qrGenerator = new QRCodeGenerator();
var qr = qrGenerator.CreateQrCode("scan-to-track", QRCodeGenerator.ECCLevel.M);

// Kod 128 requires a different library (e.g., NetBarcode)
//DataMatrixrequires yet another library
// Reading any format requires yet another library
using QRCoder;

//QRCoderis limited to QR — other formats require separate packages
var qrGenerator = new QRCodeGenerator();
var qr = qrGenerator.CreateQrCode("scan-to-track", QRCodeGenerator.ECCLevel.M);

// Kod 128 requires a different library (e.g., NetBarcode)
//DataMatrixrequires yet another library
// Reading any format requires yet another library
Imports QRCoder

' QRCoder is limited to QR — other formats require separate packages
Dim qrGenerator As New QRCodeGenerator()
Dim qr = qrGenerator.CreateQrCode("scan-to-track", QRCodeGenerator.ECCLevel.M)

' Kod 128 requires a different library (e.g., NetBarcode)
' DataMatrix requires yet another library
' Reading any format requires yet another library
$vbLabelText   $csharpLabel

Podejście IronBarcode

IronBarcode obejmuje wszystkie rodziny formatów poprzez ten sam punkt wejścia BarcodeWriter.CreateBarcode. Przejście z kodu QR na Kod 128 naDataMatrixwymaga tylko zmiany parametru BarcodeEncoding — bez dodatkowych pakietów, nowych przestrzeni nazw, oddzielnych API:

using IronBarCode;

// All formats — one API, one package
BarcodeWriter.CreateBarcode("scan-to-track", BarcodeEncoding.QRCode)
    .SaveAsPng("campaign-qr.png");

BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .SaveAsPng("product-code.png");

BarcodeWriter.CreateBarcode("LOT-ABC-123", BarcodeEncoding.DataMatrix)
    .SaveAsPng("pharma-code.png");
using IronBarCode;

// All formats — one API, one package
BarcodeWriter.CreateBarcode("scan-to-track", BarcodeEncoding.QRCode)
    .SaveAsPng("campaign-qr.png");

BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .SaveAsPng("product-code.png");

BarcodeWriter.CreateBarcode("LOT-ABC-123", BarcodeEncoding.DataMatrix)
    .SaveAsPng("pharma-code.png");
Imports IronBarCode

' All formats — one API, one package
BarcodeWriter.CreateBarcode("scan-to-track", BarcodeEncoding.QRCode) _
    .SaveAsPng("campaign-qr.png")

BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128) _
    .SaveAsPng("shipping-label.png")

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13) _
    .SaveAsPng("product-code.png")

BarcodeWriter.CreateBarcode("LOT-ABC-123", BarcodeEncoding.DataMatrix) _
    .SaveAsPng("pharma-code.png")
$vbLabelText   $csharpLabel

Przewodnik po mapowaniu API

QRCoder IronBarcode
new QRCodeGenerator() Klasa statyczna — nie wymaga instancji
qrGenerator.CreateQrCode(data, ECCLevel.M) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)
new PngByteQRCode(qrCodeData) Nie jest to konieczne — renderowanie jest częścią łańcucha
qrCode.GetGraphic(20) .ToPngBinaryData() z .ResizeTo(w, h)
new SvgQRCode(qrCodeData).GetGraphic(10) .SaveAsSvg(path)
new QRCode(qrCodeData).GetGraphic(...) QRCodeWriter.CreateQrCode(data, size, level)
QRCodeGenerator.ECCLevel.L QRCodeWriter.QrErrorCorrectionLevel.Low
QRCodeGenerator.ECCLevel.M QRCodeWriter.QrErrorCorrectionLevel.Medium
QRCodeGenerator.ECCLevel.Q QRCodeWriter.QrErrorCorrectionLevel.Quartile
QRCodeGenerator.ECCLevel.H QRCodeWriter.QrErrorCorrectionLevel.Highest
PayloadGenerator.WiFi(...).ToString() "WIFI:T:WPA;S:{ssid};P:{pass};;"
Brak API do odczytu BarcodeReader.Read(path)
Tylko format QR 50+ formatów poprzez BarcodeEncoding.*

Kiedy zespoły rozważają przejście zQRCoderna IronBarcode

Dla zespołów, których projekty są wyłącznie oparte na kodach QR i tak pozostaną,QRCoderjest dobrze utrzymywaną biblioteką, która nadal dobrze spełnia swoje zadanie. Poniższe scenariusze opisują warunki, które powodują, że zespoły ponownie oceniają to podejście.

Wymagania dotyczące formatu wykraczają poza QR

Większość wymagań dotyczących kodów kreskowych zaczyna się od kodów QR, aQRCoderniezawodnie radzi sobie z tym początkowym zakresem. Napięcie pojawia się, gdy do rozmowy wkracza drugi format. Zespoły logistyczne, które potrzebują etykiet Kod 128 do wysyłki, operacje detaliczne wymagające kodów produktów EAN-13, procesy farmaceutyczne wymagająceDataMatrixdo serializacji — każdy nowy format zmusza zespół do dodania kolejnej zależności NuGet. Koszt integracji każdej dodatkowej biblioteki obejmuje naukę nowej przestrzeni nazw, monitorowanie nowego cyklu wydawniczego oraz nowy punkt potencjalnego konfliktu wersji podczas aktualizacji Wersji .NET.

Odczytywanie BarCode staje się konieczne

Aplikacja generująca kody QR wychodzące na potrzeby kampanii jest systemem służącym wyłącznie do generowania. Aplikacja, która przetwarza również przesyłki przychodzące, weryfikuje kody produktów w momencie ich dostarczenia lub sprawdza bilety podczas wydarzenia, jest systemem generowania i odczytu.QRCoderz założenia nie posiada funkcji odczytu — tę lukę musi wypełnić druga biblioteka. Wprowadzenie biblioteki odczytu znacznie zmienia ślad integracyjny podsystemu BarCode, zwłaszcza jeśli biblioteka odczytu nakłada własne wymagania dotyczące specyfikacji formatu lub ograniczenia dotyczące bezpieczeństwa wątków.

Obciążenie związane z utrzymaniem wielu bibliotek

Naturalny schemat tworzenia projektu opartego na QRCoderze przebiega w przewidywalny sposób:QRCoderdo generowania kodów QR, biblioteka kodów kreskowych 1D do etykiet wysyłkowych, biblioteka odczytu do dekodowania. Każda biblioteka posiada własną dokumentację, własny cykl wydawania wersji oraz własną historię zmian wprowadzających niekompatybilność. Niewielka aktualizacja wersji .NET dla jednej biblioteki może zbiegać się w czasie z istotną zmianą w innej. Zespoły, które zarządzają tymi zasobami od lat, informują, że ukryty koszt nie wynika z początkowej integracji, ale z narastających kosztów utrzymania w wielu cyklach aktualizacji.

Obsługa dokumentów PDF

Generowanie barcode'ów do osadzenia w raportach PDF lub wyodrębnianie barcode'ów z przychodzących dokumentów PDF w procesie przetwarzania dokumentów nie jest możliwe w QRCoder. Obsługa plików PDF wymaga albo pełnej biblioteki PDF z funkcjami BarCode, albo dedykowanej kombinacji bibliotek. Zespoły tworzące procesy oparte na dokumentach — przetwarzanie faktur, raportowanie zgodności, generowanie etykiet na podstawie szablonów PDF — zauważają, że zakres działaniaQRCoderpokrywa się z wymaganiami dotyczącymi plików PDF już na wczesnym etapie cyklu życia projektu.

Typowe kwestie związane z migracją

Format ciągu znaków PayloadGenerator

Klasy pomocnicze PayloadGenerator wQRCoderprodukują ciągi zgodne z publicznymi standardami ładunku kodów QR. Format WiFi, na przykład, produkuje WIFI:T:WPA;S:NetworkName;P:Password;;. Ciągi te można tworzyć bezpośrednio w IronBarcode bez klasy pomocniczej, ponieważ format jest publicznym standardem udokumentowanym w specyfikacji kodu QR. Zespoły z wieloma użyciami PayloadGenerator powinny planować pisanie małych statycznych metod pomocniczych, które replikuja konstruowanie ciągów.

Mapowanie enumów ECCLevel

QRCoder używa QRCodeGenerator.ECCLevel z wartościami L, M, Q, H.IronBarcode używa QRCodeWriter.QrErrorCorrectionLevel z wartościami Low, Medium, Quartile, i Highest. Mapowanie jest bezpośrednie, ale odniesienia do enumów muszą zostać zaktualizowane we wszystkich miejscach wywołania. Tam, gdzieQRCoderwymagał explicytnego wyboru ECC przy każdym wywołaniu CreateQrCode,IronBarcode stosuje rozsądne domyślne wartości, gdy używana jest ścieżka BarcodeWriter.CreateBarcode.

Usunięcie klasy Renderer

Klasy rendererówQRCoder— PngByteQRCode, SvgQRCode, AsciiQRCode, Base64QRCode, QRCode — stają się niepotrzebne po migracji.IronBarcode wbudowuje renderowanie w płynny łańcuch na GeneratedBarcode, więc wzorzec pośredniego obiektu renderer nie przenosi się. Kod, który instancjuje te klasy rendererów, może być zastąpiony z wezwaniami do metod terminalnych na wyniku BarcodeWriter.

Dodatkowe możliwości IronBarcode

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

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

IronBarcode jest aktywnie rozwijany i regularnie aktualizowany pod kątem obecnych i przyszłych wydań platformy .NET. Biblioteka obsługuje bieżące .NET LTS i ostatnie wydania, z aktualizacjami kompatybilności wdrażanymi, gdy pojawiają się nowe wersje .NET. RównieżQRCoderjest aktywnie utrzymywany i działa na wszystkich obecnych celach .NET; Jego konstrukcja bez zależności sprawia, że kompatybilność z przyszłymi wersjami jest prosta. Obie biblioteki nadają się do długoterminowych projektów .NET. Dla zespołów wybierających model wsparcia komercyjnego IronBarcode zapewnia bezpośredni dostęp do pomocy technicznej oraz priorytetowe rozwiązywanie błędów.

Wnioski

QRCoder i IronBarcode spełniają ten sam podstawowy wymóg — generowanie kodów QR — ale z różnych punktów wyjścia architektonicznych.QRCoderto specjalnie zaprojektowana biblioteka obsługująca jeden format, której zakres działania celowo ogranicza się do kodów QR.IronBarcode to biblioteka obsługująca wiele formatów, która umożliwia generowanie, odczytywanie i integrację z plikami PDF w ponad 50 formatach kodów kreskowych. Nie chodzi tu o porównanie dobrej biblioteki z lepszą; jest to coś pomiędzy narzędziem specjalistycznym a narzędziem ogólnego przeznaczenia.

QRCoder to właściwy wybór dla projektów, w których generowanie kodów QR jest stałym, ograniczonym wymogiem. Jego zerowy ślad zależności, nieograniczona licencja MIT, i pomocnicy PayloadGenerator czynią go doskonałym wyborem dla przepływu rejestracji 2FA, generatora kodów QR w kampanii marketingowej, lub w każdym kontekście, gdzie zakres kodu kreskowego jest definitywnie ustalony. Biblioteka jest dobrze utrzymana, szeroko stosowana i niezawodnie spełnia swoją deklarowaną funkcję. Zespoły o takich cechach nic nie zyskają na zmianie.

IronBarcode staje się bardziej praktycznym wyborem, gdy wymagania projektu dotyczące kodów kreskowych wykraczają — lub prawdopodobnie wykraczać będą — poza generowanie kodów QR. Aplikacje, które muszą odczytywać kody z przychodzących przesyłek lub zeskanowanych dokumentów, generować etykiety Kod 128 wraz z kampaniami QR lub tworzyć BARCODES osadzone w raportach PDF, korzystają z jednego spójnego interfejsu API dla wszystkich tych zadań. Przewodnik po alternatywach dla QRCoder C# zawiera dodatkowe informacje na temat ograniczeń bibliotek obsługujących wyłącznie kody QR w środowiskach produkcyjnych. Ceny licencji zaczynają się od 749 USD i są w pełni opisane na stronie licencyjnej IronBarcode.

Szczera ocena jest taka, że wybór odpowiedniego narzędzia zależy całkowicie od zakresu projektu. W przypadku stałych wymagań dotyczących wyłącznie kodów QR,QRCoderzapewnia wszystko, co jest potrzebne, bez żadnych kosztów. W przypadku wymagań obejmujących wiele formatów, odczyt lub integrację z plikami PDF,IronBarcode eliminuje konieczność zarządzania wieloma bibliotekami o jednym przeznaczeniu w miarę rozwoju projektu.

Często Zadawane Pytania

Czym jest QRCoder.NET?

QRCoder.NET to biblioteka kodów kreskowych .NET służąca do generowania i odczytywania kodów kreskowych w aplikacjach napisanych w języku 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 QRCoder.NET a IronBarcode?

IronBarcode wykorzystuje statyczne, bezstanowe API, które nie wymaga zarządzania instancjami, podczas gdy QRCoder.NET zazwyczaj wymaga utworzenia i konfiguracji instancji 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 QRCoder.NET?

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 QRCoder.NET?

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 QRCoder.NET?

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 QRCoder?

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 QRCoder.NET 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 QRCoder.NET do IronBarcode jest prosta?

Migracja z QRCoder.NET 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