Przejdź do treści stopki
FILMY

Jak dostosowywać i dodawać loga do kodów QR w C# | IronBracode

Migrating fromSyncfusionBarCode to IronBarcode

Ten przewodnik zapewnia pełną ścieżkę migracji z kontrolki kodu kreskowegoSyncfusion— SfBarcode dla WinForms i WPF, SfBarcodeGenerator dla Blazor i MAUI — do IronBarcode. Obejmuje on strukturalne powody, dla których zespoły dokonują tej zmiany, szybki przewodnik krok po kroku dotyczący wymiany pakietów NuGet i konfiguracji licencji, pełne przykłady kodu "przed i po" dla każdego typowego scenariusza oraz listę kontrolną migracji do audytu istniejącej bazy kodu. Jeśli w projekcie wykorzystywane są również inne komponentySyncfusion(tabele, wykresy, harmonogramy), pakiety te i ich rejestracje pozostają bez zmian — zmiany dotyczą wyłącznie kodu związanego z kodami kreskowymi BarCode.

Dlaczego warto przejść zSyncfusionBarCode

Luka w odczycie: SfBarcode i SfBarcodeGenerator to kontrolki generujące bez możliwości odczytu. Nie ma metody .Read() ani .Scan() w żadnej z klas. Gdy projekt wymaga odczytu kodów kreskowych z przesłanych obrazów, zeskanowanych dokumentów lub plików PDF, kontrolka kodów kreskowychSyncfusionnie oferuje żadnego rozwiązania. DokumentacjaSyncfusionwskazuje zespołom rozwiązanie Barcode Reader OPX, które jest oddzielnym produktem komercyjnym, który należy nabyć, licencjonować i utrzymywać niezależnie.

OPX jako płatna nakładka na darmowe oprogramowanie: czytnik BarCode OPX wykorzystuje wewnętrznie ZXing.Net — bibliotekę open source do odczytu kodów kreskowych opublikowaną na licencji Apache 2.0. Apache 2.0 jest licencją liberalną; każdy programista .NET może zainstalować ZXing.Net bezpośrednio za pomocą dotnet add package ZXing.Net i używać go w aplikacjach komercyjnych bez opłat. Pełen przepływ pracySyncfusiondo odczytu i generowania wymaga dwóch oddzielnych produktów Syncfusion, dwóch umów licencyjnych oraz dwóch interfejsów API — podczas gdy możliwość odczytu mogłaby być zaczerpnięta bezpośrednio z bezpłatnej biblioteki, którą opx opakowuje.

Warunki licencji społecznościowej: Licencja społecznościowa firmySyncfusionwymaga spełnienia czterech warunków jednocześnie i w sposób ciągły: roczny przychód brutto poniżej 1 000 000 USD, maksymalnie pięciu programistów, maksymalnie dziesięciu pracowników ogółem oraz łączny pozyskany kapitał zewnętrzny poniżej 3 000 000 USD. Organizacje rządowe nie kwalifikują się do uzyskania licencji niezależnie od wielkości. Naruszenie któregokolwiek z tych warunków powoduje natychmiastowy obowiązek uzyskania licencji komercyjnej. Runda finansowania serii A zazwyczaj powoduje, że w dniu jej zamknięcia zebrany kapitał przekracza 3 000 000 USD, co powoduje naliczenie opłaty licencyjnej niezależnie od wielkości zespołu lub przychodów. Przejście komercyjne przechodzi z $0 do rocznej subskrypcji Essential Studio na każdego dewelopera — a ta subskrypcja obejmuje cały zestaw narzędzi, a nie tylko komponent kodów kreskowych. Opublikowana ścieżkaSyncfusionto niestandardowa oferta od działu sprzedaży.

Rotacja kluczy zależna od wersji: Klucze licencyjneSyncfusionsą powiązane z konkretnymi zakresami wersji Essential Studio. Aktualizacja z wersji 24.x do 25.x wymaga uzyskania nowego klucza z portalu konta, zaktualizowania tego klucza w magazynie sekretów każdego środowiska wdrożeniowego oraz ponownego wdrożenia, aby zapobiec pojawianiu się znaków wodnych wersji próbnej w wynikach produkcyjnych. Dla zespołów o częstym cyklu wydawniczym lub wielu celach wdrożeniowych ta rotacja staje się powtarzającym się obciążeniem operacyjnym, które jest nieproporcjonalne do podstawowego wymogu generowania obrazu BARCODE.

Podstawowy problem

Architektura kontrolkiSyncfusionsprawia, że programowe generowanie plików odbywa się w sposób pośredni. Utworzenie pliku kodu kreskowego za pomocą SfBarcode wymaga wcześniejszego przydzielenia Bitmap, wywoływania DrawToBitmap, a następnie zapisania bitmapy — wzorzec renderowania WinForms, który jest uzależniony od środowiska uruchomieniowego Windows Forms:

//SyncfusionSfBarcode: indirect file output through DrawToBitmap
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-VERSION-SPECIFIC-KEY");

var barcode = new SfBarcode();
barcode.Text = "SHIP-2024-001";
barcode.Symbology = BarcodeSymbolType.Code128A;
barcode.Width = 400;
barcode.Height = 150;

using var bitmap = new Bitmap(barcode.Width, barcode.Height);
barcode.DrawToBitmap(bitmap, barcode.ClientRectangle);
bitmap.Save("shipping-label.png", ImageFormat.Png);
// Reading: not possible — requires separate OPX purchase
//SyncfusionSfBarcode: indirect file output through DrawToBitmap
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-VERSION-SPECIFIC-KEY");

var barcode = new SfBarcode();
barcode.Text = "SHIP-2024-001";
barcode.Symbology = BarcodeSymbolType.Code128A;
barcode.Width = 400;
barcode.Height = 150;

using var bitmap = new Bitmap(barcode.Width, barcode.Height);
barcode.DrawToBitmap(bitmap, barcode.ClientRectangle);
bitmap.Save("shipping-label.png", ImageFormat.Png);
// Reading: not possible — requires separate OPX purchase
Imports Syncfusion.Licensing
Imports System.Drawing
Imports System.Drawing.Imaging

' SyncfusionSfBarcode: indirect file output through DrawToBitmap
SyncfusionLicenseProvider.RegisterLicense("YOUR-VERSION-SPECIFIC-KEY")

Dim barcode As New SfBarcode()
barcode.Text = "SHIP-2024-001"
barcode.Symbology = BarcodeSymbolType.Code128A
barcode.Width = 400
barcode.Height = 150

Using bitmap As New Bitmap(barcode.Width, barcode.Height)
    barcode.DrawToBitmap(bitmap, barcode.ClientRectangle)
    bitmap.Save("shipping-label.png", ImageFormat.Png)
End Using
' Reading: not possible — requires separate OPX purchase
$vbLabelText   $csharpLabel

IronBarcode generuje pliki bezpośrednio i odczytuje je za pomocą tego samego pakietu:

// IronBarcode: direct generation and reading in one package
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

// Generate
BarcodeWriter.CreateBarcode("SHIP-2024-001", BarcodeEncoding.Code128)
    .ResizeTo(400, 150)
    .SaveAsPng("shipping-label.png");

// Read — same package, no additional product required
var results = BarcodeReader.Read("shipping-label.png");
foreach (var result in results)
    Console.WriteLine($"{result.Format}: {result.Value}");
// IronBarcode: direct generation and reading in one package
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

// Generate
BarcodeWriter.CreateBarcode("SHIP-2024-001", BarcodeEncoding.Code128)
    .ResizeTo(400, 150)
    .SaveAsPng("shipping-label.png");

// Read — same package, no additional product required
var results = BarcodeReader.Read("shipping-label.png");
foreach (var result in results)
    Console.WriteLine($"{result.Format}: {result.Value}");
Imports IronBarCode

' IronBarcode: direct generation and reading in one package
License.LicenseKey = "YOUR-LICENSE-KEY"

' Generate
BarcodeWriter.CreateBarcode("SHIP-2024-001", BarcodeEncoding.Code128) _
    .ResizeTo(400, 150) _
    .SaveAsPng("shipping-label.png")

' Read — same package, no additional product required
Dim results = BarcodeReader.Read("shipping-label.png")
For Each result In results
    Console.WriteLine($"{result.Format}: {result.Value}")
Next
$vbLabelText   $csharpLabel

IronBarcode aSyncfusionBarCode: porównanie funkcji

Funkcja SyncfusionBarCode IronBarcode
Generowanie BarCode'ów Tak — kontrolki interfejsu użytkownika (WinForms, WPF, Blazor, MAUI) Tak — statyczne API, wszystkie środowiska
Odczytywanie BarCode Nie — wymagany jest oddzielny czytnik BarCode OPX Tak — ten sam pakiet
Produkt do odczytu plików OPX wykorzystuje bibliotekę ZXing.Net (Apache 2.0) Tak Nie dotyczy
Wyjście w formacie PDF z kodem kreskowym BarCode Nie — wymaga dodatkowo Syncfusion.PDF Tak — SaveAsPdf() wbudowany
Odczytywanie BarCodes z plików PDF Nie Tak — native
Generowanie po stronie serwera / bezinterfejsowe Wymaga środowiska uruchomieniowego WinForms (DrawToBitmap) Natywny — bez zależności od interfejsu użytkownika
Wdrożenie w środowisku Docker / Linux Ograniczone Pełne wsparcie
Minimalny interfejs API .NET Core Nieobsługiwane bezpośrednio Pełne wsparcie
Kod QR z osadzonym logo Nie Tak — .AddBrandLogo()
Automatyczne wykrywanie formatu podczas odczytu Nie dotyczy Tak
Społeczność / poziom darmowy Licencja społecznościowa (cztery warunki równoczesne) 30-dniowy okres próbny (tylko znak wodny)
Model licencji komercyjnej Roczna subskrypcja (Essential Studio) Wieczysta (jednorazowa, zobacz ironsoftware.com/csharp/barcode/licensing)
Zakres klucza licencyjnego Specyficzne dla wersji, aktualizowane wraz z głównymi aktualizacjami NuGet Wersja stabilna w ramach głównej wersji
Kroki rejestracji platformy 3–4 kroki (RegisterLicense + AddSyncfusionBlazor + ConfigureSyncfusionCore + importy Razor) Jedna linia, wszystkie platformy
Zakres formatów 1D Code 128, Code 39, EAN, UPC, Codabar i inne Wszystkie formatySyncfusionPlus PDF417, Aztec, MaxiCode, GS1, USPS IMb i ponad 50 innych
Zakres formatów 2D Kod QR, DataMatrix QR Code, DataMatrix, PDF417, Micro PDF417, Aztec, MaxiCode

Szybki start

Krok 1: Zastąp pakiety NuGet

Usuń pakiet kodów kreskowychSyncfusiondla używanej platformy. Jeśli projekt jest przeznaczony dla wielu platform, uruchom usuwanie dla każdej z nich:

# Blazor
dotnet remove package Syncfusion.Blazor.BarcodeGenerator

# WinForms
dotnet remove package Syncfusion.SfBarcode.Windows

# WPF
dotnet remove package Syncfusion.SfBarcode.WPF

# MAUI
dotnet remove package Syncfusion.Maui.Barcode
# Blazor
dotnet remove package Syncfusion.Blazor.BarcodeGenerator

# WinForms
dotnet remove package Syncfusion.SfBarcode.Windows

# WPF
dotnet remove package Syncfusion.SfBarcode.WPF

# MAUI
dotnet remove package Syncfusion.Maui.Barcode
SHELL

Jeśli po usunięciu pakietu BarCode w projekcie nie pozostały żadne inne pakiety Syncfusion, usuń również pakiet licencyjny:

dotnet remove package Syncfusion.Licensing
dotnet remove package Syncfusion.Licensing
SHELL

Zainstaluj IronBarcode— jeden pakiet dla wszystkich platform:

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

Krok 2: Aktualizacja przestrzeni nazw

Usuń przestrzenie nazwSyncfusionBarCode i dodaj przestrzeń nazw IronBarcode:

// Remove these (barcode-specific; leave others if non-barcodeSyncfusioncontrols remain)
using Syncfusion.Windows.Forms.Barcode;
using Syncfusion.Licensing;
// @using Syncfusion.Blazor.BarcodeGenerator  (in _Imports.razor)

// Add this
using IronBarCode;
// Remove these (barcode-specific; leave others if non-barcodeSyncfusioncontrols remain)
using Syncfusion.Windows.Forms.Barcode;
using Syncfusion.Licensing;
// @using Syncfusion.Blazor.BarcodeGenerator  (in _Imports.razor)

// Add this
using IronBarCode;
Imports IronBarCode
$vbLabelText   $csharpLabel

Krok 3: Inicjalizacja licencji

Usuń rejestrację licencjiSyncfusioni konfigurację platformy z sekcji uruchamiania aplikacji. Następnie dodaj pojedynczy wiersz licencji IronBarcode w tym samym miejscu:

// Remove from Program.cs / App.xaml.cs / MauiProgram.cs:
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-VERSION-SPECIFIC-KEY");
builder.Services.AddSyncfusionBlazor();         // Blazor only — remove if no otherSyncfusioncontrols
builder.ConfigureSyncfusionCore();              // MAUI only — remove if no otherSyncfusioncontrols

// Add at the same startup point:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Remove from Program.cs / App.xaml.cs / MauiProgram.cs:
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-VERSION-SPECIFIC-KEY");
builder.Services.AddSyncfusionBlazor();         // Blazor only — remove if no otherSyncfusioncontrols
builder.ConfigureSyncfusionCore();              // MAUI only — remove if no otherSyncfusioncontrols

// Add at the same startup point:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' Remove from Program.vb / App.xaml.vb / MauiProgram.vb:
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-VERSION-SPECIFIC-KEY")
builder.Services.AddSyncfusionBlazor()         ' Blazor only — remove if no other Syncfusion controls
builder.ConfigureSyncfusionCore()              ' MAUI only — remove if no other Syncfusion controls

' Add at the same startup point:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

W przypadku potoków CI/CD i kontenerów Docker należy zapisać klucz w zmiennej środowiskowej:

IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
Imports System

IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
$vbLabelText   $csharpLabel

Przykłady migracji kodu

WinForms SfBarcode do BarcodeWriter

Migracja WinForms eliminuje DrawToBitmap i zastępuje ją bezpośrednim łańcuchem wyjściowym pliku. WzórSyncfusionwymaga wcześniejszego przydziału Bitmap o znanych wymiarach;IronBarcode oblicza wymiary w ramach wywołania generującego.

Podejście firmy Syncfusion:

using Syncfusion.Windows.Forms.Barcode;
using System.Drawing;
using System.Drawing.Imaging;

Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-VERSION-SPECIFIC-KEY");

var barcode = new SfBarcode();
barcode.Text = "ORD-20240315-001";
barcode.Symbology = BarcodeSymbolType.Code128A;
barcode.BarHeight = 100;
barcode.NarrowBarWidth = 1;
barcode.ShowText = true;
barcode.Width = 400;
barcode.Height = 150;

using var bitmap = new Bitmap(barcode.Width, barcode.Height);
barcode.DrawToBitmap(bitmap, barcode.ClientRectangle);
bitmap.Save("order-label.png", ImageFormat.Png);
using Syncfusion.Windows.Forms.Barcode;
using System.Drawing;
using System.Drawing.Imaging;

Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-VERSION-SPECIFIC-KEY");

var barcode = new SfBarcode();
barcode.Text = "ORD-20240315-001";
barcode.Symbology = BarcodeSymbolType.Code128A;
barcode.BarHeight = 100;
barcode.NarrowBarWidth = 1;
barcode.ShowText = true;
barcode.Width = 400;
barcode.Height = 150;

using var bitmap = new Bitmap(barcode.Width, barcode.Height);
barcode.DrawToBitmap(bitmap, barcode.ClientRectangle);
bitmap.Save("order-label.png", ImageFormat.Png);
Imports Syncfusion.Windows.Forms.Barcode
Imports System.Drawing
Imports System.Drawing.Imaging

Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-VERSION-SPECIFIC-KEY")

Dim barcode As New SfBarcode()
barcode.Text = "ORD-20240315-001"
barcode.Symbology = BarcodeSymbolType.Code128A
barcode.BarHeight = 100
barcode.NarrowBarWidth = 1
barcode.ShowText = True
barcode.Width = 400
barcode.Height = 150

Using bitmap As New Bitmap(barcode.Width, barcode.Height)
    barcode.DrawToBitmap(bitmap, barcode.ClientRectangle)
    bitmap.Save("order-label.png", ImageFormat.Png)
End Using
$vbLabelText   $csharpLabel

Podejście IronBarcode:

using IronBarCode;

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

BarcodeWriter.CreateBarcode("ORD-20240315-001", BarcodeEncoding.Code128)
    .ResizeTo(400, 150)
    .AddBarcodeText()
    .SaveAsPng("order-label.png");
using IronBarCode;

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

BarcodeWriter.CreateBarcode("ORD-20240315-001", BarcodeEncoding.Code128)
    .ResizeTo(400, 150)
    .AddBarcodeText()
    .SaveAsPng("order-label.png");
Imports IronBarCode

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

BarcodeWriter.CreateBarcode("ORD-20240315-001", BarcodeEncoding.Code128) _
    .ResizeTo(400, 150) _
    .AddBarcodeText() _
    .SaveAsPng("order-label.png")
$vbLabelText   $csharpLabel

BarcodeSymbolType.Code128A mapuje się do BarcodeEncoding.Code128. Sekwencja DrawToBitmap + Bitmap.Save redukuje się do .SaveAsPng(). Jeśli kod kreskowy musi być wyświetlony wewnątrz komponentu WinForms PictureBox zamiast być zapisany na dysku, użyj .ToPngBinaryData() do załadowania obrazu do kontrolki. Pełen zakres formatów kodów kreskowych 1D w IronBarcode znacznie wykracza poza listę obsługiwanych formatów przez kontrolkę Syncfusion.

Blazor SfBarcodeGenerator do minimalnego punktu końcowego API

Migracja do Blazora to raczej zmiana strukturalna niż zamiana linii po linii. SfBarcodeGenerator to komponent Razor, który renderuje się w przeglądarce przez warstwę JavaScript Syncfusion.IronBarcode nie posiada komponentu Razor; Jest to biblioteka po stronie serwera. Wzorzec zastępczy to minimalny punkt końcowy API na serwerze, który zwraca bajty kodu kreskowego, odwołujące się w stronie Razor jako źródło obrazu.

Podejście firmy Syncfusion:

@page "/fulfillment"
@using Syncfusion.Blazor.BarcodeGenerator

<SfBarcodeGenerator
    Width="300px"
    Height="150px"
    Type="BarcodeType.Code128"
    Value="@orderNumber">
    <BarcodeGeneratorDisplayText Visibility="true"></BarcodeGeneratorDisplayText>
</SfBarcodeGenerator>

@code {
    private string orderNumber = "ORD-20240315-001";
}

Podejście IronBarcode:

Dodaj punkt końcowy generowania w Program.cs:

using IronBarCode;

app.MapGet("/barcode/{value}", (string value) =>
{
    var bytes = BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128)
        .ResizeTo(300, 150)
        .AddBarcodeText()
        .ToPngBinaryData();

    return Results.File(bytes, "image/png");
});
using IronBarCode;

app.MapGet("/barcode/{value}", (string value) =>
{
    var bytes = BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128)
        .ResizeTo(300, 150)
        .AddBarcodeText()
        .ToPngBinaryData();

    return Results.File(bytes, "image/png");
});
Imports IronBarCode

app.MapGet("/barcode/{value}", Function(value As String)
    Dim bytes = BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128) _
        .ResizeTo(300, 150) _
        .AddBarcodeText() _
        .ToPngBinaryData()

    Return Results.File(bytes, "image/png")
End Function)
$vbLabelText   $csharpLabel

Odwołaj się do punktu końcowego w komponencie Razor:

@page "/fulfillment"

<img src="/barcode/@orderNumber" alt="Order barcode: @orderNumber" />

@code {
    private string orderNumber = "ORD-20240315-001";
}

Ten punkt końcowy można testować niezależnie, można go ponownie wykorzystać z dowolnego klienta HTTP i jest on zgodny z Blazor Server, Blazor WebAssembly z hostowanym backendem API oraz dowolnym innym frontendem internetowym.

Generowanie kodów QR

KomponentSyncfusionQR jest również renderowany przez przeglądarkę bez ścieżki wyjściowej po stronie serwera.IronBarcode generuje kody QR po stronie serwera z bezpośrednim wypisem do pliku.

Podejście firmy Syncfusion:

@using Syncfusion.Blazor.BarcodeGenerator

<SfQRCodeGenerator
    Width="300px"
    Height="300px"
    Value="https://example.com/product/ABC-123">
    <QRCodeGeneratorDisplayText Visibility="false">
    </QRCodeGeneratorDisplayText>
</SfQRCodeGenerator>

Podejście IronBarcode:

using IronBarCode;

// Standard QR code
QRCodeWriter.CreateQrCode("https://example.com/product/ABC-123", 300,
    QRCodeWriter.QrErrorCorrectionLevel.High)
    .SaveAsPng("product-qr.png");

// QR code with embedded brand logo — not available in Syncfusion
QRCodeWriter.CreateQrCode("https://example.com/product/ABC-123", 500,
    QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .AddBrandLogo("company-logo.png")
    .SaveAsPng("product-qr-branded.png");
using IronBarCode;

// Standard QR code
QRCodeWriter.CreateQrCode("https://example.com/product/ABC-123", 300,
    QRCodeWriter.QrErrorCorrectionLevel.High)
    .SaveAsPng("product-qr.png");

// QR code with embedded brand logo — not available in Syncfusion
QRCodeWriter.CreateQrCode("https://example.com/product/ABC-123", 500,
    QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .AddBrandLogo("company-logo.png")
    .SaveAsPng("product-qr-branded.png");
Imports IronBarCode

' Standard QR code
QRCodeWriter.CreateQrCode("https://example.com/product/ABC-123", 300, QRCodeWriter.QrErrorCorrectionLevel.High) _
    .SaveAsPng("product-qr.png")

' QR code with embedded brand logo — not available in Syncfusion
QRCodeWriter.CreateQrCode("https://example.com/product/ABC-123", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest) _
    .AddBrandLogo("company-logo.png") _
    .SaveAsPng("product-qr-branded.png")
$vbLabelText   $csharpLabel

Zastąpienie czytania OPX

Jeśli w projekcie używano czytnika kodów kreskowych BarCode OPX — lub odłożono wymóg odczytu do przyszłego zakupu OPX —IronBarcode zastępuje tę zależność pakietem, który jest już zainstalowany. Brak produktu dodatkowego, brak drugiej licencji.

PodejścieSyncfusion(BarCode Reader OPX):

// Requires separateSyncfusionBarCode Reader OPX purchase
// OPX wraps ZXing.Net internally (Apache 2.0 — free to use directly)
using Syncfusion.BarcodeReader;

var reader = new BarcodeReader();
var results = reader.ReadBarcodes("warehouse-scan.png");
foreach (var result in results)
    Console.WriteLine($"Value: {result.Value}");
// Requires separateSyncfusionBarCode Reader OPX purchase
// OPX wraps ZXing.Net internally (Apache 2.0 — free to use directly)
using Syncfusion.BarcodeReader;

var reader = new BarcodeReader();
var results = reader.ReadBarcodes("warehouse-scan.png");
foreach (var result in results)
    Console.WriteLine($"Value: {result.Value}");
Imports Syncfusion.BarcodeReader

Dim reader As New BarcodeReader()
Dim results = reader.ReadBarcodes("warehouse-scan.png")
For Each result In results
    Console.WriteLine($"Value: {result.Value}")
Next
$vbLabelText   $csharpLabel

Podejście IronBarcode:

using IronBarCode;

// Included in the same NuGet package as generation — no second product required
var results = BarcodeReader.Read("warehouse-scan.png");
foreach (var result in results)
{
    Console.WriteLine($"Format: {result.Format}");
    Console.WriteLine($"Value: {result.Value}");
    Console.WriteLine($"Confidence: {result.Confidence}%");
}
using IronBarCode;

// Included in the same NuGet package as generation — no second product required
var results = BarcodeReader.Read("warehouse-scan.png");
foreach (var result in results)
{
    Console.WriteLine($"Format: {result.Format}");
    Console.WriteLine($"Value: {result.Value}");
    Console.WriteLine($"Confidence: {result.Confidence}%");
}
Imports IronBarCode

' Included in the same NuGet package as generation — no second product required
Dim results = BarcodeReader.Read("warehouse-scan.png")
For Each result In results
    Console.WriteLine($"Format: {result.Format}")
    Console.WriteLine($"Value: {result.Value}")
    Console.WriteLine($"Confidence: {result.Confidence}%")
Next
$vbLabelText   $csharpLabel

Dokumentacja dotycząca odczytu kodów kreskowych obejmuje odczyt z tablic bajtów dla procedur obsługi przesyłania, dostosowanie szybkości w stosunku do dokładności oraz wykrywanie wielu kodów kreskowych.

Generowanie BarCode'ów w formacie PDF

Kontrolki BarCodeSyncfusionnie mają ścieżki wyjściowej PDF.IronBarcode traktuje PDF jako format wyjściowy pierwszej klasy.

Podejście firmy Syncfusion:

// Nie direct path — requires combining Syncfusion.Barcode.WinForms and Syncfusion.Pdf
// Step 1: Generate to Bitmap via DrawToBitmap
// Step 2: LoadSyncfusionPDF document
// Step 3: Insert bitmap as image element
// Two packages, two APIs, two license obligations
// Nie direct path — requires combining Syncfusion.Barcode.WinForms and Syncfusion.Pdf
// Step 1: Generate to Bitmap via DrawToBitmap
// Step 2: LoadSyncfusionPDF document
// Step 3: Insert bitmap as image element
// Two packages, two APIs, two license obligations
' Nie direct path — requires combining Syncfusion.Barcode.WinForms and Syncfusion.Pdf
' Step 1: Generate to Bitmap via DrawToBitmap
' Step 2: LoadSyncfusionPDF document
' Step 3: Insert bitmap as image element
' Two packages, two APIs, two license obligations
$vbLabelText   $csharpLabel

Podejście IronBarcode:

using IronBarCode;

// Generate directly to PDF — no secondary library required
BarcodeWriter.CreateBarcode("PALLET-2024-0891", BarcodeEncoding.Code128)
    .ResizeTo(400, 150)
    .SaveAsPdf("pallet-label.pdf");

// Read barcodes from an existing PDF
var pdfResults = BarcodeReader.Read("shipping-manifest.pdf");
foreach (var result in pdfResults)
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
using IronBarCode;

// Generate directly to PDF — no secondary library required
BarcodeWriter.CreateBarcode("PALLET-2024-0891", BarcodeEncoding.Code128)
    .ResizeTo(400, 150)
    .SaveAsPdf("pallet-label.pdf");

// Read barcodes from an existing PDF
var pdfResults = BarcodeReader.Read("shipping-manifest.pdf");
foreach (var result in pdfResults)
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
Imports IronBarCode

' Generate directly to PDF — no secondary library required
BarcodeWriter.CreateBarcode("PALLET-2024-0891", BarcodeEncoding.Code128) _
    .ResizeTo(400, 150) _
    .SaveAsPdf("pallet-label.pdf")

' Read barcodes from an existing PDF
Dim pdfResults = BarcodeReader.Read("shipping-manifest.pdf")
For Each result In pdfResults
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}")
Next
$vbLabelText   $csharpLabel

Przewodnik po generowaniu plików PDF z kodami kreskowymi obejmuje wielostronicowe pliki PDF oraz osadzanie kodów kreskowych obok innych treści dokumentu.

SyncfusionBarCode API do IronBarcode Mapping Reference

Syncfusion IronBarcode
SyncfusionLicenseProvider.RegisterLicense("KEY") IronBarCode.License.LicenseKey = "key"
builder.Services.AddSyncfusionBlazor() Nie jest wymagane
builder.ConfigureSyncfusionCore() Nie jest wymagane
new SfBarcode() BarcodeWriter.CreateBarcode() (statyczny)
barcode.Text = "value" Pierwszy parametr CreateBarcode()
barcode.Symbology = BarcodeSymbolType.Code128A BarcodeEncoding.Code128
barcode.Symbology = BarcodeSymbolType.QRBarcode QRCodeWriter.CreateQrCode()
barcode.BarHeight = 100 .ResizeTo(width, 100)
barcode.ShowText = true .AddBarcodeText()
barcode.DrawToBitmap(bitmap, rect) .SaveAsPng(path)
Ręczne BitmapMemoryStream .ToPngBinaryData()
<SfBarcodeGenerator Type="BarcodeType.Code128" Value="..."> BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128) w punkcie końcowym API
<SfQRCodeGenerator Value="..."> QRCodeWriter.CreateQrCode(value, size) w punkcie końcowym API
BarcodeType.Code128 (enum Blazor) BarcodeEncoding.Code128
Czytnik kodów kreskowych OPX (oddzielny produkt, wykorzystujący bibliotekę ZXing.Net) BarcodeReader.Read(path) — natywnie, ten sam pakiet
Brak odczytu API w kontroli BarcodeReader.Read(path)
Brak możliwości generowania plików PDF .SaveAsPdf(path)
Brak możliwości odczytu plików PDF BarcodeReader.Read("document.pdf")

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

Problem 1: Znak wodny wersji próbnej po aktualizacji NuGet

Syncfusion: Aktualizacja z Essential Studio 24.x do 25.x powoduje unieważnienie istniejącego klucza licencyjnego. Wszelkie dane wyjściowe wygenerowane przed aktualizacją magazynu kluczy będą zawierały znak wodny wersji próbnej. Jest to cicha awaria — aplikacja nadal działa, ale generuje wyniki niezgodne z wymaganiami.

Rozwiązanie: Po aktualizacji pakietu IronBarcode NuGet klucz licencyjny nie zmienia się w ramach tej samej wersji głównej. W przypadku wydania wersji z drobnymi zmianami lub poprawkami nie jest wymagana aktualizacja ani ponowne wdrożenie. Podczas aktualizacji do nowej głównej wersji należy zaktualizować klucz raz w punkcie wejścia aplikacji:

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

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Problem 2: Funkcja DrawToBitmap nie działa w środowiskach bezinterfejsowych

Syncfusion: SfBarcode.DrawToBitmap zależy od potoku renderowania Windows Forms. W procesie ASP.NET Core, Azure Function lub kontenerze Docker na Linuxie, wywołanie DrawToBitmap spowoduje rzucenie InvalidOperationException lub wygenerowanie pustej bitmapy, ponieważ nie ma pętli komunikatów Windows Forms.

Rozwiązanie: Zastąp BarcodeWriter.CreateBarcode().IronBarcode generuje kody w kodzie zarządzanym bez żadnych zależności od środowiska uruchomieniowego interfejsu użytkownika:

// Works in ASP.NET Core, Azure Functions, Docker on Linux, console apps
var bytes = BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128)
    .ResizeTo(400, 150)
    .ToPngBinaryData();
// Works in ASP.NET Core, Azure Functions, Docker on Linux, console apps
var bytes = BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128)
    .ResizeTo(400, 150)
    .ToPngBinaryData();
' Works in ASP.NET Core, Azure Functions, Docker on Linux, console apps
Dim bytes = BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128) _
    .ResizeTo(400, 150) _
    .ToPngBinaryData()
$vbLabelText   $csharpLabel

Problem 3: SfBarcodeGenerator nie ma wyjścia po stronie serwera

Syncfusion: SfBarcodeGenerator to komponent Razor bez powierzchni API po stronie serwera. Próby użycia go w akcji kontrolera lub usłudze działającej w tle nie znajdą żadnej odpowiedniej metody do generowania bajtów kodu kreskowego BarCode.

Rozwiązanie: Utwórz minimalny punkt końcowy API, który generuje kod kreskowy po stronie serwera i zwraca go jako odpowiedź HTTP. Odniesienie do punktu końcowego z komponentu Razor za pomocą tagu <img src="...">:

app.MapGet("/barcode/{value}", (string value) =>
{
    var bytes = BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128)
        .ResizeTo(300, 150)
        .ToPngBinaryData();
    return Results.File(bytes, "image/png");
});
app.MapGet("/barcode/{value}", (string value) =>
{
    var bytes = BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128)
        .ResizeTo(300, 150)
        .ToPngBinaryData();
    return Results.File(bytes, "image/png");
});
Imports Microsoft.AspNetCore.Builder
Imports Microsoft.AspNetCore.Http

app.MapGet("/barcode/{value}", Function(value As String)
                                   Dim bytes = BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128) _
                                       .ResizeTo(300, 150) _
                                       .ToPngBinaryData()
                                   Return Results.File(bytes, "image/png")
                               End Function)
$vbLabelText   $csharpLabel

Problem 4: Brak możliwości odczytu (nie zakupiono OPX)

Syncfusion: Projekty, w których odłożono odczyt kodów BARCODE, ponieważ nie zakupiono jeszcze OPX, nie mają kodu do odczytu, który należałoby przenieść. Dodanie możliwości odczytu od podstaw wymaga zakupu OPX, integracji oraz nowej Umowy licencyjnej.

Rozwiązanie: Odczyt kodów kreskowych IronBarcode jest zawarty w tym samym pakiecie. Nie jest wymagane żadne zamówienie ani dodatkowa licencja. Dodaj BarcodeReader.Read(path) zawsze, gdy potrzebny jest odczyt:

var results = BarcodeReader.Read("incoming-scan.png");
var results = BarcodeReader.Read("incoming-scan.png");
Dim results = BarcodeReader.Read("incoming-scan.png")
$vbLabelText   $csharpLabel

Problem 5: Wygaśnięcie licencji społecznościowej podczas migracji

Syncfusion: Zespół korzystający z licencji Community, który przekroczy dowolny próg kwalifikacyjny w okresie migracji — w tym zamknie rundę finansowania — może zauważyć, że kontrolkiSyncfusionprzestaną generować prawidłowe wyniki przed zakończeniem migracji.

Rozwiązanie: 30-dniowy okres próbny IronBarcode umożliwia pełną ocenę bez żadnych warunków dotyczących przychodów, liczby pracowników czy kapitału. Na wygenerowanym wyniku pojawia się znak wodny wersji próbnej; Aktywacja zakupionego klucza licencyjnego powoduje jego usunięcie. W modelu licencyjnym IronBarcode nie ma ograniczeń dotyczących wielkości organizacji.

Lista kontrolna migracji BarCode Syncfusion

Zadania przed migracją

Przeprowadź audyt kodu źródłowego, aby zlokalizować każdy plik odwołujący się do BarCODE-a Syncfusion:

grep -r "SyncfusionLicenseProvider.RegisterLicense\|AddSyncfusionBlazor\|ConfigureSyncfusionCore" --include="*.cs" .
grep -r "new SfBarcode\(\)\|SfBarcodeGenerator\|SfQRCodeGenerator" --include="*.cs" --include="*.razor" .
grep -r "BarcodeSymbolType\.\|BarcodeType\." --include="*.cs" --include="*.razor" .
grep -r "DrawToBitmap\|barcode\.Text\s*=" --include="*.cs" .
grep -r "Syncfusion\.Barcode\|Syncfusion\.Blazor\.BarcodeGenerator" --include="*.csproj" .
grep -r "SyncfusionLicenseProvider.RegisterLicense\|AddSyncfusionBlazor\|ConfigureSyncfusionCore" --include="*.cs" .
grep -r "new SfBarcode\(\)\|SfBarcodeGenerator\|SfQRCodeGenerator" --include="*.cs" --include="*.razor" .
grep -r "BarcodeSymbolType\.\|BarcodeType\." --include="*.cs" --include="*.razor" .
grep -r "DrawToBitmap\|barcode\.Text\s*=" --include="*.cs" .
grep -r "Syncfusion\.Barcode\|Syncfusion\.Blazor\.BarcodeGenerator" --include="*.csproj" .
SHELL

Przed napisaniem jakiegokolwiek kodu migracyjnego należy udokumentować następujące kwestie:

  • Wypisz każdy plik, który wywołuje SyncfusionLicenseProvider.RegisterLicense
  • Wypisz każde utworzenie SfBarcode i przypisywanie jego właściwości
  • Wypisz każde użycie komponentu Razor <SfBarcodeGenerator> i <SfQRCodeGenerator>
  • Wypisz każde wywołanie DrawToBitmap i ścieżkę zapisu lub wyświetlania w dół strumienia
  • Sprawdź, czy zainstalowany jest program BarCode Reader OPX; jeśli tak, wymień wszystkie wezwania do odczytu

Zadania związane z aktualizacją kodu

  1. Usuń pakiety NuGet z kodami BARCODESyncfusiondla każdej platformy w projekcie
  2. Usuń pakiet NuGet Syncfusion.Licensing, jeśli nie pozostają żadne inne kontrolki Syncfusion
  3. Zainstaluj pakiet NuGet IronBarcode
  4. Zastąp SyncfusionLicenseProvider.RegisterLicense("KEY") za pomocą IronBarCode.License.LicenseKey = "KEY" w punkcie wejścia aplikacji
  5. Usuń builder.Services.AddSyncfusionBlazor(), jeśli nie pozostają żadne inne kontrolki Syncfusion
  6. Usuń builder.ConfigureSyncfusionCore(), jeśli nie pozostają żadne inne kontrolki Syncfusion
  7. Usuń @using Syncfusion.Blazor i @using Syncfusion.Blazor.BarcodeGenerator z _Imports.razor, jeśli dotyczy
  8. Zastąp using Syncfusion.Windows.Forms.Barcode i using Syncfusion.Licensing za pomocą using IronBarCode
  9. Zastąp każdy blok new SfBarcode() + przypisania właściwości + DrawToBitmap za pomocą BarcodeWriter.CreateBarcode(value, BarcodeEncoding.X).ResizeTo(w, h).SaveAsPng(path)
  10. Zastąp BarcodeSymbolType.Code128A (i odpowiedniki) za pomocą BarcodeEncoding.Code128
  11. Zastąp BarcodeType.Code128 (enum Blazor) za pomocą BarcodeEncoding.Code128
  12. Zastąp każdy komponent Razor <SfBarcodeGenerator> komponentem API minimalnym i odniesieniem <img src="..."> w komponencie
  13. Zastąp każdy komponent Razor <SfQRCodeGenerator> komponentem API QRCodeWriter.CreateQrCode() i odniesieniem <img src="...">
  14. Zastąp wszystkie wywołania odczytu Barcode Reader OPX za pomocą BarcodeReader.Read(path)
  15. Dodaj BarcodeReader.Read(path) zawsze, gdy wcześniej brakowało możliwości odczytu z powodu braku zakupu OPX

Testy po migracji

  • Sprawdź, czy wygenerowane obrazy BarCode nadają się do skanowania, używając skanera sprzętowego lub aplikacji do odczytu.
  • Sprawdź, czy po aktywacji klucza licencyjnego na wygenerowanym pliku nie pojawiają się żadne znaki wodne wersji próbnej
  • Potwierdź, że BarcodeReader.Read() zwraca oczekiwaną wartość i format dla każdego używanego typu kodu kreskowego
  • Przetestuj wyjście PDF za pomocą .SaveAsPdf(), aby potwierdzić, że wymiary strony i kodu kreskowego odpowiadają wymaganiom projektowym
  • Przetestuj bezpośrednio minimalny punkt końcowy API Blazor (przez przeglądarkę lub klienta HTTP) przed testowaniem w komponencie Razor
  • Sprawdź, czy wdrożenie w środowisku Docker i Linux daje identyczne wyniki jak na komputerach programistycznych z systemem Windows
  • Przeprowadź ostateczny audyt grep, aby potwierdzić brak pozostałych odniesień do SfBarcode, SfBarcodeGenerator, DrawToBitmap, BarcodeSymbolType, lub SyncfusionLicenseProvider

Kluczowe korzyści wynikające z migracji do IronBarcode

Ujednolicone generowanie i odczyt: Po migracji zarówno generowanie, jak i odczyt działają za pośrednictwem jednego pakietu NuGet na jednej licencji. Nie ma potrzeby zakupu dodatkowego produktu, nauki obsługi kolejnego interfejsu API ani korzystania z opakowania ZXing.Net, które pochłania budżet licencyjny, który można by przeznaczyć na bezpośrednią bibliotekę open source.

Eliminacja rotacji kluczy specyficznej dla wersji: Klucze licencyjne IronBarcode zachowują ważność w przypadku aktualizacji pomniejszych i poprawek w ramach głównej wersji. Całkowicie eliminuje się nakłady operacyjne związane z uzyskiwaniem nowego klucza, aktualizowaniem sekretów w każdym środowisku wdrożeniowym oraz ponownym wdrażaniem w celu usunięcia znaków wodnych wersji próbnej przy każdej większej Aktualizacji wersji NuGet.

Wdrożenie niezależne od platformy: Ten sam pakiet IronBarcode i ten sam interfejs API generowania działają w aplikacjach desktopowych WinForms, usługach ASP.NET Core, Azure Functions, aplikacjach konsolowych oraz kontenerach Docker na systemie Linux. Zależność środowiska uruchomieniowego Windows Forms wprowadzonego przez DrawToBitmap jest usunięta, a wdrożenia Blazor przenoszą się z przeglądarek komponentów na API po stronie serwera, które jest niezależnie testowalne i agnostyczne dla klienta.

Natywna obsługa plików PDF: Generowanie i odczyt plików PDF odbywa się w sposób natywny. Tworzenie pliku PDF z kodem kreskowym nie wymaga już koordynacji dwóch produktów Syncfusion; Odczytywanie BarCodes z manifestów PDF i dokumentów wysyłkowych nie wymaga już oddzielnego etapu ekstrakcji plików PDF.

Przewidywalna ekonomika licencji: Model licencji wieczystej IronBarcode nie nakłada żadnych limitów dotyczących przychodów, liczby pracowników ani kapitału. Zespoły, które przekroczyły warunki kwalifikacyjne licencjiSyncfusionCommunity License — lub które przewidują, że tak się stanie — przechodzą na model licencyjny, w którym rozwój organizacji nie powoduje konieczności dostosowania się do nowych warunków.

Zwróć uwagęSyncfusion i ZXing.NET to zarejestrowane znaki towarowe ich odpowiednich właścicieli. Ta strona nie jest powiązana z, wspierana ani sponsorowana przezSyncfusionlub 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.

Często Zadawane Pytania

Dlaczego warto przejść z Syncfusion BarCode na IronBarcode?

Typowe powody to uproszczenie licencjonowania (eliminacja złożoności związanej z SDK i kluczem uruchomieniowym), zniesienie limitów przepustowości, uzyskanie natywnej obsługi plików PDF, usprawnienie wdrażania w środowisku Docker/CI/CD oraz ograniczenie powtarzalnego kodu API w kodzie produkcyjnym.

Jak zastąpić wywołania API Syncfusion za pomocą IronBarcode?

Zastąp standardowe fragmenty kodu dotyczące tworzenia instancji i licencjonowania wyrażeniem IronBarCode.License.LicenseKey = "key". Zastąp wywołania czytnika wyrażeniem BarcodeReader.Read(path), a wywołania zapisu wyrażeniem BarcodeWriter.CreateBarcode(data, encoding). Metody statyczne nie wymagają zarządzania instancjami.

Jak bardzo zmienia się kod podczas migracji z Syncfusion BarCode do IronBarcode?

Większość migracji skutkuje zmniejszeniem liczby linii kodu. Usuwane są standardowe fragmenty dotyczące licencji, konstruktory instancji oraz jawna konfiguracja formatów. Podstawowe operacje odczytu/zapisu są mapowane na krótsze odpowiedniki w IronBarcode z bardziej przejrzystymi obiektami wynikowymi.

Czy podczas migracji muszę mieć zainstalowane zarówno Syncfusion BarCode, jak i IronBarcode?

Nie. Większość migracji polega na bezpośredniej wymianie, a nie na równoległym działaniu. Należy migrować po jednej klasie usługowej na raz, zastąpić odwołanie do NuGet oraz zaktualizować wzorce instancjonowania i wywoływania API przed przejściem do kolejnej klasy.

Jaka jest nazwa pakietu NuGet dla IronBarcode?

Pakiet nosi nazwę „IronBarcode” (z wielkimi literami B i C). Zainstaluj go za pomocą polecenia „Install-Package IronBarcode” lub „dotnet add package IronBarcode”. Dyrektywa using w kodzie to „using IronBarcode;”.

W jaki sposób IronBarcode upraszcza wdrażanie Docker w porównaniu z Syncfusion BarCode?

IronBarcode to pakiet NuGet bez zewnętrznych plików SDK ani konfiguracji licencji. W Dockerze należy ustawić zmienną środowiskową IRONBARCODE_LICENSE_KEY, a pakiet zajmie się weryfikacją licencji podczas uruchamiania.

Czy IronBarcode automatycznie wykrywa wszystkie formaty kodów kreskowych po migracji z Syncfusion?

Tak. IronBarcode automatycznie wykrywa symbole we wszystkich obsługiwanych formatach. Wyraźne wyliczenie typów kodów kreskowych nie jest wymagane. Jeśli format jest już znany, a wydajność ma znaczenie, BarcodeReaderOptions pozwala ograniczyć obszar wyszukiwania w celu optymalizacji.

Czy IronBarcode może odczytywać BarCodes z plików PDF bez oddzielnej biblioteki?

Tak. BarCodeReader.Read("document.pdf") przetwarza pliki PDF natywnie. Wyniki obejmują PageNumber, Format, Value i Confidence dla każdego znalezionego kodu kreskowego. Nie jest wymagany żaden zewnętrzny etap renderowania pliku PDF.

W jaki sposób IronBarcode obsługuje równoległe przetwarzanie kodów kreskowych?

Metody statyczne IronBarcode są bezstanowe i bezpieczne dla wątków. Użyj Parallel.ForEach bezpośrednio na listach plików bez zarządzania instancjami dla poszczególnych wątków. BarcodeReaderOptions.MaxParallelThreads kontroluje wewnętrzny limit wątków.

Jakie właściwości wyników ulegają zmianie podczas migracji z Syncfusion BarCode do IronBarcode?

Typowe zmiany nazw: BarcodeValue staje się Value, BarcodeType staje się Format. Wyniki IronBarcode zawierają również Confidence i PageNumber. Funkcja wyszukiwania i zamiany w całym rozwiązaniu obsługuje zmiany nazw w istniejącym kodzie przetwarzania wyników.

Jak skonfigurować licencjonowanie IronBarcode w potoku CI/CD?

Zapisz IronBarcode_LICENSE_KEY jako sekret potoku i przypisz IronBarCode.License.LicenseKey w kodzie uruchamiającym aplikację. Jeden sekret obejmuje wszystkie środowiska, w tym środowisko programistyczne, testowe, przejściowe i produkcyjne.

Czy IronBarcode obsługuje generowanie kodów QR z niestandardowym stylem?

Tak. Funkcja QRCodeWriter.CreateQrCode() obsługuje niestandardowe kolory za pomocą ChangeBarCodeColor(), osadzanie logo za pomocą AddBrandLogo(), konfigurowalne poziomy korekcji błędów oraz wiele formatów wyjściowych, w tym PNG, JPG, PDF i strumień.

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