IRONSOFTWAREHOME
FILMY

Migracja zQRCoderdo IronBarcode

Curtis Chau
Curtis Chau
Updated: 1 sierpnia 2026

Ten przewodnik jest przeznaczony dla zespołów programistów, których projekty rozpoczęły się odQRCoderi rozrosły się do tego stopnia, że wymagają funkcji wykraczających poza generowanie kodów QR.QRCoderto dobrze utrzymana biblioteka wysokiej jakości w swoim zakresie zastosowań, a migracja nie ma wpływu na jej jakość. Jest to odpowiedź na wymagania — rozszerzenie formatu, odczyt BARCODE, integracja z PDF — które wykraczają poza zakres funkcji, do których został zaprojektowany QRCoder. Niniejszy przewodnik obejmuje kompletną ścieżkę techniczną odQRCoderdo IronBarcode: wymianę pakietów, zmiany przestrzeni nazw, tłumaczenie kodu dla każdego popularnego wzorca, mapowanie odpowiedników API oraz rozwiązania problemów pojawiających się podczas przejścia.

Dlaczego warto przejść z QRCoder

**Wymagania dotyczące formatu Beyond QR:**QRCodergeneruje wyłącznie kody QR. Projekty, które rozwijają się do wymagań etykiet Code 128 dla logistyki, kodów EAN-13 do identyfikacji produktów w detalicznym handlu,DataMatrixdo serializacji farmaceutycznej lubPDF417do zgodności z dokumentami rządowymi, muszą wprowadzić oddzielną bibliotekę dla każdego dodatkowego formatu. Wraz ze wzrostem liczby wymaganych formatów rośnie również liczba niezależnych pakietów, interfejsów API i obowiązków związanych z utrzymaniem.

**Wymagania dotyczące odczytu kodów kreskowych:**QRCodernie posiada API do odczytu kodów kreskowych — z założenia jest to biblioteka służąca wyłącznie do generowania kodów. Każda aplikacja, która musi dekodować kody QR z przychodzących obrazów, weryfikować kody BarCode na zeskanowanych dokumentach lub przetwarzać etykiety wysyłkowe, musi opróczQRCoderdodać dedykowaną bibliotekę do odczytu. Ta druga biblioteka ma własny interfejs API, własny cykl aktualizacji i własne problemy z kompatybilnością przy każdej aktualizacji .NET.

Obsługa wielu bibliotek: Realistyczny schemat akumulacji dla projektu opartego na QRCoderze obejmujeQRCoderdo generowania kodów QR, bibliotekę BARCODE-ów 1D do etykiet wysyłkowych oraz bibliotekę odczytu do dekodowania. Zarządzanie trzema lub czterema niezależnymi pakietami oznacza śledzenie oddzielnych informacji o wydaniu, rozwiązywanie konfliktów wersji w przypadku aktualizacji któregokolwiek z nich oraz utrzymywanie znajomości wielu interfejsów API w całym zespole programistów. Obciążenie związane z utrzymaniem rośnie z czasem w sposób, który nie jest widoczny w początkowej wycenie integracji.

Obsługa plików PDF: Osadzanie barcode'ów w dokumentach PDF lub wyodrębnianie barcode'ów z przychodzących plików PDF wykracza poza zakres funkcji QRCoder. Procesy przetwarzania dokumentów — obsługa faktur, generowanie etykiet z szablonów PDF, raportowanie zgodności — napotykają tę barierę już na wczesnym etapie. Należy dodać dedykowaną bibliotekę PDF obokQRCoderlub architektura musi kierować generowanie BarCode'ów i generowanie plików PDF przez oddzielne podsystemy.

Podstawowy problem

QRCoder skutecznie rozwiązuje problem generowania kodów QR. W momencie, gdy jakiekolwiek wymaganie wykracza poza możliwości QR, kod źródłowy musi zacząć pobierać dodatkowe pakiety, aby wypełnić każdą lukę:

//QRCoderhandles QR generation well — but no further
using QRCoder;
using System.IO;

var generator = new QRCodeGenerator();
var qrCodeData = generator.CreateQrCode("SHIP-12345", QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrCodeData);
File.WriteAllBytes("qr.png", qrCode.GetGraphic(10));

// Now the shipping team asks for Code 128 — add NetBarcode
// Now the warehouse needs to scan barcodes — add ZXing.Net
// Now a report needs a barcode in a PDF — add a PDF library
// Each addition: new namespace, new API, new maintenance cycle
C#

IronBarcode łączy generowanie, odczyt i integrację z PDF w ramach jednego API:

//IronBarcode— one library covers all of the above
using IronBarCode;

// Generate QR
BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.QRCode)
    .SaveAsPng("qr.png");

// Generate Code 128 — same API
BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128)
    .SaveAsPng("label.png");

// Read a barcode from an image — built in
var results = BarcodeReader.Read("incoming.png");
C#

##IronBarcode a QRCoder: porównanie funkcji

FunkcjaQRCoderIronBarcode
Generowanie kodów QRTak — doskonałeTak
Micro QRTakNie
Kod 128 / Kod 39NieTak
EAN-13 / UPC-ANieTak
DataMatrixNieTak
PDF417NieTak
AztecNieTak
Łączna liczba formatów150+
Odczytywanie BarCodeNieTak — automatyczne wykrywanie
Ekstrakcja BarCode z plików PDFNieTak
Wstawianie BarCode do plików PDFNieTak
Osadzanie logoTakTak
Dostosowanie kolorówTakTak
Wyjście SVGTakTak
Pomocniki PayloadGeneratorTakNie — ręczne tworzenie ciągów znaków
Brak zależności zewnętrznychTakSamodzielny
LicencjaMIT — bez ograniczeńKomercyjny — poziom Lite obejmuje jednego programistę

Szybki start: Migracja zQRCoderdo IronBarcode

Krok 1: Zastąp pakiet NuGet

UsuńQRCoderz projektu:

dotnet remove package QRCoder
SHELL

Zainstaluj IronBarcode:

dotnet add package IronBarcode
SHELL

Jeśli w projekcie używano ZXing.Net wraz zQRCoderdo odczytu BARCODE, ten pakiet również można usunąć na tym etapie:

dotnet remove package ZXing.Net
SHELL

Krok 2: Aktualizacja przestrzeni nazw

Zastąp import przestrzeni nazwQRCoderprzestrzenią nazw IronBarcode:

// Before (QRCoder)
using QRCoder;

// After (IronBarcode)
using IronBarCode;

Krok 3: Inicjalizacja licencji

Dodaj inicjalizację licencji przy starcie aplikacji — Program.cs, Startup.cs, lub konstruktora statycznego:

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

Dostępny jest bezpłatny klucz próbny bez konieczności rejestracji. Wdrożenia produkcyjne wymagają zakupu licencji.

Przykłady migracji kodu

Podstawowe generowanie kodów QR

Najczęściej stosowany wzorzecQRCoderwymaga trzech obiektów: instancji QRCodeGenerator, obiektu pośredniego QRCodeData i klasy renderera, takiej jak PngByteQRCode. W IronBarcode ten łańcuch zastępuje pojedyncze wywołanie statyczne.

Podejście QRCoder:

using QRCoder;

public class BarcodeService
{
    private readonly QRCodeGenerator _generator = new QRCodeGenerator();

    public byte[] GenerateQR(string content)
    {
        var qrCodeData = _generator.CreateQrCode(content, QRCodeGenerator.ECCLevel.M);
        var qrCode = new PngByteQRCode(qrCodeData);
        return qrCode.GetGraphic(10); // 10px per module
    }
}

Podejście IronBarcode:

using IronBarCode;

public class BarcodeService
{
    public byte[] GenerateQR(string content)
    {
        return BarcodeWriter.CreateBarcode(content, BarcodeEncoding.QRCode)
            .ResizeTo(200, 200)
            .ToPngBinaryData();
    }
}

BarcodeWriter to klasa statyczna — nie wymaga instancji i nie ma obiektu danych pośrednich. Metoda ResizeTo(width, height) zastępuje całość pixele-na-moduł integer, któreQRCoderakceptuje w GetGraphic. GdzieQRCoderokreśla rozmiar wyjścia poprzez liczbę modułów (np. GetGraphic(10) dla obrazu 10px na moduł),IronBarcode przyjmuje absolutne wymiary w pikselach.

Zapisywanie kodów QR do pliku

QRCoder oddziela bajty w pamięci od danych wyjściowych pliku dopiero na etapie końcowym — łańcuch renderowania pozostaje ten sam.IronBarcode wykorzystuje różne metody terminali w tym samym łańcuchu.

Podejście QRCoder:

using QRCoder;
using System.IO;

var generator = new QRCodeGenerator();
var qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var pngBytes = new PngByteQRCode(qrCodeData).GetGraphic(10);
File.WriteAllBytes("output.png", pngBytes);

Podejście IronBarcode:

using IronBarCode;

// Save directly — no intermediate byte array needed
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .ResizeTo(300, 300)
    .SaveAsPng("output.png");

// Or obtain bytes for in-memory use
byte[] pngBytes = BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .ResizeTo(300, 300)
    .ToPngBinaryData();

Metoda SaveAsPng jest terminalem, który zapisuje bezpośrednio na dysk. ToPngBinaryData zwraca byte[] do strumieniowania, odpowiedzi HTTP lub przechowywania w bazie danych.

Wyjście SVG

Podejście QRCoder:

using QRCoder;
using System.IO;

var generator = new QRCodeGenerator();
var qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
string svgContent = new SvgQRCode(qrCodeData).GetGraphic(10);
File.WriteAllText("output.svg", svgContent);

Podejście IronBarcode:

using IronBarCode;

BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsImage("output.svg");

Klasa renderera SvgQRCode i jego wywołanie GetGraphic łączą się w jedną terminalną metodę SaveAsImage (przekazanie rozszerzenia .svg daje wyjście w formacie SVG).

Mapowanie poziomów korekty błędów

QRCoder wymaga jawnego wyboru ECC przy każdym wywołaniu CreateQrCode za pomocą wyliczenia QRCodeGenerator.ECCLevel.IronBarcode stosuje rozsądne domyślne ustawienia przy użyciu BarcodeWriter.CreateBarcode i daje możliwość jawnej kontroli przez QRCodeWriter.QrErrorCorrectionLevel.

Podejście QRCoder:

using QRCoder;

var generator = new QRCodeGenerator();

// Medium — suitable for most generation without logos
var dataMedium = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);

// High — required when a logo will occlude part of the code
var dataHigh = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H);

Podejście IronBarcode:

using IronBarCode;

// Default — equivalent to Medium, applied automatically
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsPng("default-ecc.png");

// Explicit level via QRCodeWriter
var qr = QRCodeWriter.CreateQrCode(
    "https://example.com",
    500,
    QRCodeWriter.QrErrorCorrectionLevel.Highest
);
qr.SaveAsPng("high-ecc.png");

Odwzorowanie poziomów jest następujące: ECCLevel.LLow, ECCLevel.MMedium, ECCLevel.QHigh, ECCLevel.HHighest.

Obie biblioteki obsługują osadzanie logo w kodach QR.QRCoderkieruje to poprzez klasę renderera QRCode (nie PngByteQRCode) z parametrami System.Drawing.Bitmap.IronBarcode dostarcza QRCodeWriter.CreateQrCodeWithLogo() jako dedykowaną metodę fabryczną akceptującą ścieżki do plików zarówno dla URL, jak i logo. Przewodnik po dostosowywaniu stylu kodów QR obejmuje opcje dotyczące rozmiaru logo, jego położenia oraz kombinacji kolorów.

Podejście QRCoder:

using QRCoder;
using System.Drawing;
using System.Drawing.Imaging;

var generator = new QRCodeGenerator();
// ECCLevel.H is required — the logo occludes part of the code
var qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H);

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", ImageFormat.Png);

Podejście IronBarcode:

using IronBarCode;

QRCodeWriter.CreateQrCodeWithLogo("https://example.com", "logo.png", 500)
    .SaveAsPng("qr-logo.png");

Zależność System.Drawing.Bitmap została usunięta — CreateQrCodeWithLogo akceptuje ciągi ścieżek plików zarówno dla zawartości, jak i obrazu logo. Korekcja błędów jest automatycznie ustawiana na poziom wymagany do osadzania logo; nie jest potrzebna żadna konfiguracja ECC.

Migracja PayloadGenerator.WiFi

Formaty standardowe WiFi QR generowane przezQRCodersą tworzone przez PayloadGenerator.WiFi. Format wyjściowy jest publicznym standardem (WIFI:T:{auth};S:{ssid};P:{password};;) zdefiniowanym przez specyfikację kodów QR. Podczas migracji ciągi te można tworzyć bezpośrednio.

Podejście QRCoder:

using QRCoder;

var wifi = new PayloadGenerator.WiFi(
    ssid: "OfficeNetwork",
    password: "SecurePass123",
    authenticationMode: PayloadGenerator.WiFi.Authentication.WPA
);
// wifi.ToString() produces: WIFI:T:WPA;S:OfficeNetwork;P:SecurePass123;;

var generator = new QRCodeGenerator();
var qrData = generator.CreateQrCode(wifi.ToString(), QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrData);
System.IO.File.WriteAllBytes("wifi.png", qrCode.GetGraphic(10));

Podejście IronBarcode:

using IronBarCode;

// Construct the standard WiFi QR string directly
string wifiPayload = "WIFI:T:WPA;S:OfficeNetwork;P:SecurePass123;;";
BarcodeWriter.CreateBarcode(wifiPayload, BarcodeEncoding.QRCode)
    .ResizeTo(300, 300)
    .SaveAsPng("wifi.png");

Dla zespołów używających wielu typów PayloadGenerator (vCard, CalendarEvent, Geo, SMS), podejście jest takie samo: zidentyfikuj sformatowany ciąg, który każdy generator produkcji przy użyciu wyniku .ToString(), a następnie skonstruuj ten ciąg bezpośrednio lub za pomocą małej statycznej metody pomocniczej.

Odnośnik do dokumentacji APIQRCoderdla IronBarcode

QRCoderIronBarcodeUwagi
new QRCodeGenerator()Klasa statyczna — brak instancjiBarcodeWriter nie wymaga instancji
qrGenerator.CreateQrCode(data, ECCLevel.M)BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)Bezpośrednie zastąpienie
new PngByteQRCode(qrCodeData)Nie jest potrzebneRenderowanie jest częścią łańcucha płynnego
qrCode.GetGraphic(20) zwracanie byte[].ToPngBinaryData()Rozmiar za pomocą .ResizeTo(w, h)
Wzorzec File.WriteAllBytes(path, bytes).SaveAsPng(path)Metoda terminalna na GeneratedBarcode
new SvgQRCode(qrCodeData).GetGraphic(10).SaveAsImage(path)Przekaż rozszerzenie .svg dla wyjścia SVG
new QRCode(qrCodeData).GetGraphic(...)QRCodeWriter.CreateQrCode(data, size, level)Służy do dostosowywania logo i kolorów
QRCodeGenerator.ECCLevel.LQRCodeWriter.QrErrorCorrectionLevel.Low
QRCodeGenerator.ECCLevel.MQRCodeWriter.QrErrorCorrectionLevel.MediumDomyślnie, jeśli nie określono inaczej
QRCodeGenerator.ECCLevel.QQRCodeWriter.QrErrorCorrectionLevel.High
QRCodeGenerator.ECCLevel.HQRCodeWriter.QrErrorCorrectionLevel.HighestWymagane do osadzenia logo
PayloadGenerator.WiFi(...).ToString()"WIFI:T:WPA;S:{ssid};P:{pass};;"Tworzenie standardowego ciągu znaków bezpośrednio
PayloadGenerator.ContactData(...).ToString()"BEGIN:VCARD\n..."vCard to standard publiczny
Brak API do odczytuBarcodeReader.Read(path)Nowa funkcja — brak oddzielnej biblioteki
Tylko format QRPonad 50 formatów za pomocą BarcodeEncoding.*Nowa funkcja

Typowe problemy związane z migracją i ich rozwiązania

Problem 1: Zmiana formatu ciągu znaków w PayloadGenerator

QRCoder: PayloadGenerator.WiFi, PayloadGenerator.ContactData i inne pomocnicze automatycznie tworzą sformatowane ciągi. Kod przekazuje wynik .ToString() obiektu pomocniczego do CreateQrCode.

Rozwiązanie: Zidentyfikuj ciąg, jaki generuje każdy rodzaj PayloadGenerator — jego format jest udokumentowany w specyfikacji kodów QR i łatwy do odtworzenia. Dla WiFi: WIFI:T:WPA;S:{ssid};P:{password};;. Dla vCard: standardowe bloki BEGIN:VCARD / END:VCARD. Napisz statyczne metody pomocnicze, jeśli wiele miejsc wywołania używa tego samego typu ładunku:

public static string WifiPayload(string ssid, string password, string auth = "WPA")
    => $"WIFI:T:{auth};S:{ssid};P:{password};;";

Problem 2: Mapowanie enum ECCLevel

QRCoder: QRCodeGenerator.ECCLevel to zagnieżdżona enum z wartościami L, M, Q, H. Jest to wymagany parametr przy każdym wywołaniu CreateQrCode.

Rozwiązanie: Przypisz każdą wartość do jej odpowiednika QRCodeWriter.QrErrorCorrectionLevel podczas korzystania z trasy QRCodeWriter. Podczas korzystania z BarcodeWriter.CreateBarcode, poziom ECC domyślnie ustawiony jest na Średni i nie wymaga parametru. Zaktualizuj każde miejsce wywołania:

//QRCoderECCLevel.H →IronBarcode QrErrorCorrectionLevel.Highest
var qr = QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest);

//QRCoderECCLevel.M →IronBarcode default (no parameter needed)
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode);
C#

Problem 3: Usunięcie klasy Renderer

QRCoder: Każdy format wyjściowy wymaga własnej instancji klasy renderera — PngByteQRCode, SvgQRCode, AsciiQRCode, Base64QRCode, QRCode. Te klasy akceptują QRCodeData i udostępniają GetGraphic z różnymi typami zwrotów.

Rozwiązanie: Usuń wszystkie instancje klasy renderera.IronBarcode wbudowuje formatowanie wyjścia w metody terminala łańcucha fluent. Zastąp new PngByteQRCode(data).GetGraphic(n) przez .ToPngBinaryData() po .ResizeTo(). Zastąp new SvgQRCode(data).GetGraphic(n) przez .SaveAsImage(path) (przekazując rozszerzenie .svg). Obiekt pośredni QRCodeData również znika — nie jest potrzebny w IronBarcode.

Problem 4: Usunięcie PngByteQRCode i skalowanie oparte na modułach

QRCoder: PngByteQRCode.GetGraphic(int pixelsPerModule) określa rozmiar wyjścia przez liczbę pikseli na moduł QR. Wymiary gotowego obrazu zależą od liczby modułów, która zmienia się w zależności od długości treści i poziomu ECC.

Rozwiązanie: Zastąp rozmiarowanie oparte na modułach przez ResizeTo(int width, int height) dla absolutnych wymiarów pikseli. Jeśli kod obliczał oczekiwany rozmiar wyjściowy dynamicznie na podstawie liczby modułów, należy przejść na stały rozmiar docelowy, który spełnia wymagania dotyczące wyjścia:

// Before: GetGraphic(20) — output size varies with content
var bytes = new PngByteQRCode(qrData).GetGraphic(20);

// After: fixed 400×400 regardless of content
byte[] bytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)
    .ResizeTo(400, 400)
    .ToPngBinaryData();

Lista kontrolna migracji QRCoder

Zadania przed migracją

Przed wprowadzeniem jakichkolwiek zmian należy sprawdzić kod źródłowy pod kątem wszystkich zastosowań QRCoder:

# Find allQRCodernamespace imports
grep -r "using QRCoder" --include="*.cs" .

# Find all generator and renderer instantiations
grep -r "QRCodeGenerator\|PngByteQRCode\|SvgQRCode\|AsciiQRCode\|QRCode\b" --include="*.cs" .

# Find all PayloadGenerator usages
grep -r "PayloadGenerator\." --include="*.cs" .

# Find ECCLevel references
grep -r "ECCLevel\." --include="*.cs" .

# Find ZXing.Net usage to remove at the same time
grep -r "using ZXing" --include="*.cs" .
SHELL
  • Udokumentuj wszystkie rodzaje PayloadGenerator używane i zanotuj ich formaty wyjściowe.
  • Odnotuj wszystkie używane wartości poziomu ECC oraz miejsca ich wywołania
  • Zidentyfikuj wszelki kod odczytu ZXing.Net, który był sparowany z QRCoderem w celu dekodowania — można go jednocześnie zastąpić
  • Uzyskaj klucz licencyjny IronBarcode(klucze próbne są dostępne bez rejestracji)

Zadania związane z aktualizacją kodu

  1. Uruchom dotnet remove package QRCoder
  2. Uruchom dotnet remove package ZXing.Net, jeśli był używany tylko do odczytu wraz z QRCoder
  3. Uruchom dotnet add package IronBarcode
  4. Dodaj IronBarCode.License.LicenseKey = "YOUR-KEY"; do startu aplikacji
  5. Zastąp wszystkie importy using QRCoder; przez using IronBarCode;
  6. Usuń wszystkie deklaracje instancji new QRCodeGenerator()BarcodeWriter jest statyczne
  7. Zastąp wszystkie wzorce generator.CreateQrCode(data, ECCLevel.X) + łańcuch renderer przez łańcuchy BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)
  8. Zastąp wywołania .GetGraphic(n) przez .ToPngBinaryData() i dodaj .ResizeTo(w, h) przed terminalem
  9. Zastąp wzorce zapisywania File.WriteAllBytes(path, bytes) metodami terminalnymi .SaveAsPng(path)
  10. Zastąp new SvgQRCode(data).GetGraphic(n) przez .SaveAsImage(path) (przekaż rozszerzenie .svg)
  11. Zastąp PayloadGenerator.WiFi(...) i inne instancje pomocnicze sformatowanymi ciągami bezpośrednimi
  12. Przypisz każdą wartość QRCodeGenerator.ECCLevel do jej odpowiednika QRCodeWriter.QrErrorCorrectionLevel
  13. Zastąp dowolne wywołania BarcodeReaderGeneric.Decode(bitmap) w ZXing.Net przez BarcodeReader.Read(path)
  14. Dla osadzania logo zastąp new QRCode(data).GetGraphic(n, ..., logoBitmap) przez QRCodeWriter.CreateQrCodeWithLogo(data, logoPath, size)

Testy po migracji

  • Zeskanuj wszystkie wygenerowane kody QR przy użyciu co najmniej dwóch niezależnych aplikacji do skanowania kodów QR, aby sprawdzić ich czytelność
  • Zweryfikuj, czy kody QR z osadzonym logo są poprawnie skanowane — potwierdź, że poziom korekcji błędów to Highest
  • Porównaj wygląd wygenerowanego kodu z przykładami sprzed migracji, gdzie wymagana jest spójność wyglądu
  • Przetestuj wszystkie zamiany PayloadGenerator — potwierdź, że WiFi, vCard i inne ciągi ładunku są prawidłowo dekodowane na urządzeniach docelowych
  • Jeśli ZXing.Net został również usunięty, zweryfikuj wszystkie ścieżki odczytu kodów kreskowych działające przez BarcodeReader.Read
  • Uruchom aplikację w czystym środowisku, aby upewnić się, że żadne pozostałości odwołań doQRCoderlub ZXing.Net nie powodują błędów wiązania
  • Sprawdź, czy klucz licencyjny IronBarcode został poprawnie załadowany w środowiskach produkcyjnych i testowych

Kluczowe korzyści wynikające z migracji do IronBarcode

Pojedyncze API dla wszystkich operacji na kodach kreskowych: Po migracji każde zadanie związane z kodami kreskowymi — generowanie, odczyt, stemplowanie PDF — używa tej samej przestrzeni nazw IronBarCode i tych samych punktów początkowych. Programiści dołączający do projektu uczą się obsługi jednego interfejsu API zamiast trzech. Sprawdzanie kodu w całym podsystemie BarCode staje się spójne. Wyszukiwanie dokumentacji jest scentralizowane.

Odczyt kodów kreskowych bez drugiej biblioteki: BarcodeReader.Read obsługuje pliki obrazów, strony PDF, strumienie oraz bitmapy w pamięci, z automatycznym wykrywaniem formatu. Funkcja odczytu, która wcześniej wymagała użycia ZXing.Net — wraz z wymaganiami dotyczącymi specyfikacji formatu i kwestiami bezpieczeństwa wątków — jest teraz dostępna natychmiast poprzez jedno wywołanie metody. Przewodnik dotyczący odczytu kodów kreskowych z obrazów obejmuje wykrywanie wielu kodów kreskowych, wstępne przetwarzanie obrazów oraz skanowanie stron PDF.

Rozbudowa formatów bez nowych zależności: Dodanie kodu 128, EAN-13, DataMatrix,PDF417lub innego obsługiwanego formatu po migracji wymaga tylko innej wartości parametru BarcodeEncoding. Nie ma żadnych nowych pakietów do zainstalowania, żadnych nowych interfejsów API do opanowania ani żadnych problemów z kompatybilnością wersji, którymi trzeba by się zajmować. Nowe wymagania dotyczące formatu sprowadzają się do zmiany w jednym wierszu, a nie do integracji nowej biblioteki.

Uproszczone dostosowywanie kodu QR: Osadzanie logo, zmiany kolorów i kontrola strefy spokojnej są dostępne jako nazwane metody na wyniku QRCodeWriter. Zależność System.Drawing.Bitmap, którąQRCoderwymaga do osadzania logo, jest zastąpiona przez prosty ciąg ścieżki pliku. Przewodnik po dostosowywaniu stylu kodów QR zawiera wszystkie dostępne opcje dostosowywania.

Wbudowana integracja z plikami PDF: BarCodes mogą być odczytywane z przychodzących dokumentów PDF i umieszczane w istniejących plikach PDF bez konieczności dodawania biblioteki PDF. W procesach przetwarzania dokumentów, które wcześniej wymagały oddzielnej zależności od formatu PDF, obecnie zintegrowano funkcje BarCode i plików PDF.

Zmniejszone długoterminowe koszty utrzymania: Przejście z trzech lub czterech niezależnych pakietów na jeden eliminuje narastające koszty związane ze śledzeniem wielu cykli wydawniczych, rozwiązywaniem konfliktów między wersjami bibliotek oraz aktualizowaniem wielu zestawów testowych w miarę rozwoju wersji .NET. Koszt utrzymania podsystemu BARCODE sprowadza się do zależności od jednego pakietu.

Zwróć uwagę: NetBarcode,QRCoderi ZXing.NET są zarejestrowanymi znakami towarowymi ich właścicieli. Ta strona nie jest powiązana z, popierana przez, ani sponsorowana przez NetBarcode,QRCoderlub ZXing.NET. Wszystkie nazwy produktów, logo i marki są własnością ich odpowiednich właścicieli. Porównania mają charakter wyłącznie informacyjny i odzwierciedlają informacje dostępne publicznie w momencie pisania.
Curtis Chau
Autor tekstów technicznych

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

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

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

Your trial license will be sent to your email address

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

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

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

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