Jak naprawić orientację kodu kreskowego w C# | IronBarcode
Migracja z Telerik RadBarcode do IronBarcode
Ten przewodnik obejmuje pełną ścieżkę migracji zTelerik RadBarcodedo IronBarcode dla programistów .NET, którzy osiągnęli ograniczenia możliwości RadBarcode i RadBarcodeReader. Obejmuje to wymianę pakietów, aktualizacje przestrzeni nazw, inicjalizację licencji, przykłady migracji na poziomie kodu, Dokumentację API oraz listę kontrolną do weryfikacji zakończenia migracji. Przykłady skupiają się na scenariuszach najczęściej spotykanych podczas migracji kodów kreskowych Telerik: wymianie kontrolki XAML, rozszerzeniu formatów odczytu, wdrożeniu po stronie serwera oraz przetwarzaniu plików PDF.
Dlaczego warto przejść z Telerik RadBarcode
Migracje Telerik RadBarcode są wywoływane przez konkretne wymagania techniczne, których istniejące komponenty nie są w stanie spełnić. Poniższe powody odzwierciedlają warunki najczęściej zgłaszane przez zespoły, które zakończyły lub oceniają tę zmianę.
Granice odczytu 2D: Komponent RadBarcodeReader w WPF i komponent RadBarcodeReader w WinForms korzystają z tego samego silnika odczytu, który jest ograniczony przez enum DecodeType. Ta enum zawiera wpisy dla formatów liniowych 1D — Code128, Code39, EAN13, EAN8, UPCA, UPCE, Codabar, ITF — i nic więcej. Nie ma wpisów dotyczących QR Code, DataMatrix, PDF417 ani Aztec. Kiedy pojawia się nowe wymaganie przetwarzania przychodzących kodów QR lub odczytywania etykiet DataMatrix ze zeskanowanych dokumentów, ograniczenie DecodeType staje się nieprzekraczalną przeszkodą bez dostępnych obejść w rodzinie produktów Telerik.
Fragmentacja kodu platformy: Odczyt z Telerik wymaga zależności od frameworków UI: RadBarcodeReader korzysta z typów WPF (BitmapImage), a RadBarcodeReader korzysta z typów WinForms (System.Drawing.Image). Nie można odwoływać się do tych typów w współdzielonej bibliotece .NET, aplikacji konsolowej, projekcie ASP.NET Core ani serwerze Blazor. Zespół, który chce scentralizować logikę odczytu kodów kreskowych w warstwie usług współdzielonych, nie może tego zrobić przy użyciu typów Telerik — implementacje czytników są trwałe powiązane z odpowiednimi frameworkami UI.
Luka w przetwarzaniu plików PDF: Wiele procesów związanych z BarCode opiera się na dokumentach, a nie na plikach graficznych. Telerik RadBarcodeReader akceptuje wyłącznie obrazy bitmapowe. Odczytanie BarCoda osadzonego na stronie PDF wymaga konwersji strony na obraz przy użyciu oddzielnej biblioteki, a następnie przekazania tego obrazu do czytnika Telerik — co powoduje dodanie zależności, a mimo to uzyskuje się jedynie wyniki 1D. Dla zespołów, których dokumenty są głównie w formacie PDF, to obejście powoduje utrudnienia na każdym etapie przepływu pracy.
Licencjonowanie w ramach subskrypcji: Funkcja BARCODE Telerik nie jest sprzedawana jako samodzielny pakiet. Dostęp do RadBarcode i RadBarcodeReader jest zintegrowany z subskrypcjami zestawów UI specyficznych dla platformy — subskrypcje Telerik UI dla każdej platformy zaczynają się od 749 USD na dewelopera rocznie (Lite tier), a DevCraft UI kosztuje 1 149 USD na dewelopera rocznie dla wszystkich platform łącznie, zgodnie z opublikowanym cennikiem Telerik na 2026 rok. Zespoły, których głównym wymaganiem jest funkcjonalność BarCode i które nie korzystają z innych elementów sterujących Telerik UI, ponoszą pełny koszt Suite za komponent, który stanowi niewielką część zakupionego produktu.
Podstawowy problem
Najbardziej wyraźnym przejawem ograniczenia odczytu w Telerik jest to, że komponent generujący format nie może go przesłać w obie strony przez czytnik:
// Telerik — generates a QR code, then cannot read it back
var qrBarcode = new RadBarcode();
qrBarcode.Value = "https://example.com/order/4821";
qrBarcode.Symbology = new QRCode { ErrorCorrectionLevel = ErrorCorrectionLevel.H };
// Save to file...
// Attempt to read the same QR code:
var reader = new RadBarcodeReader();
// DecodeType.QR does not exist — QR cannot be added to this list
reader.DecodeTypes = new[] { DecodeType.Code128, DecodeType.EAN13 };
var bitmap = new BitmapImage(new Uri("qr-output.png", UriKind.Absolute));
var result = reader.Decode(bitmap);
// result == null — always, for any QR code image
// Telerik — generates a QR code, then cannot read it back
var qrBarcode = new RadBarcode();
qrBarcode.Value = "https://example.com/order/4821";
qrBarcode.Symbology = new QRCode { ErrorCorrectionLevel = ErrorCorrectionLevel.H };
// Save to file...
// Attempt to read the same QR code:
var reader = new RadBarcodeReader();
// DecodeType.QR does not exist — QR cannot be added to this list
reader.DecodeTypes = new[] { DecodeType.Code128, DecodeType.EAN13 };
var bitmap = new BitmapImage(new Uri("qr-output.png", UriKind.Absolute));
var result = reader.Decode(bitmap);
// result == null — always, for any QR code image
' Telerik — generates a QR code, then cannot read it back
Dim qrBarcode As New RadBarcode()
qrBarcode.Value = "https://example.com/order/4821"
qrBarcode.Symbology = New QRCode With {.ErrorCorrectionLevel = ErrorCorrectionLevel.H}
' Save to file...
' Attempt to read the same QR code:
Dim reader As New RadBarcodeReader()
' DecodeType.QR does not exist — QR cannot be added to this list
reader.DecodeTypes = New DecodeType() {DecodeType.Code128, DecodeType.EAN13}
Dim bitmap As New BitmapImage(New Uri("qr-output.png", UriKind.Absolute))
Dim result = reader.Decode(bitmap)
' result == null — always, for any QR code image
IronBarcode wypełnia tę lukę. Generowanie i odczyt odbywa się za pomocą tego samego pakietu, a silnik odczytu automatycznie wykrywa kody QR, DataMatrix, PDF417 i wszystkie inne formaty:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Generate a QR code
BarcodeWriter.CreateBarcode("https://example.com/order/4821", BarcodeEncoding.QRCode)
.SaveAsPng("qr-output.png");
// Read that same QR code back — no format specification needed
var results = BarcodeReader.Read("qr-output.png");
Console.WriteLine(results.First().Value);
// Output: https://example.com/order/4821
// NuGet: dotnet add package IronBarcode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Generate a QR code
BarcodeWriter.CreateBarcode("https://example.com/order/4821", BarcodeEncoding.QRCode)
.SaveAsPng("qr-output.png");
// Read that same QR code back — no format specification needed
var results = BarcodeReader.Read("qr-output.png");
Console.WriteLine(results.First().Value);
// Output: https://example.com/order/4821
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
' Generate a QR code
BarcodeWriter.CreateBarcode("https://example.com/order/4821", BarcodeEncoding.QRCode) _
.SaveAsPng("qr-output.png")
' Read that same QR code back — no format specification needed
Dim results = BarcodeReader.Read("qr-output.png")
Console.WriteLine(results.First().Value)
' Output: https://example.com/order/4821
IronBarcode a Telerik RadBarcode: porównanie funkcji
| Funkcja | Telerik RadBarcode | IronBarcode |
|---|---|---|
| Generowanie kodów kreskowych 1D | Tak (wszystkie platformy) | Tak |
| Generowanie kodów kreskowych 2D | Tak (wszystkie platformy) | Tak |
| Odczytywanie kodów kreskowych 1D | Tylko WPF + WinForms | Tak (wszystkie platformy) |
| Odczytywanie kodów QR | Tylko WPF | Tak (wszystkie platformy) |
| Odczyt DataMatrix | Tylko WPF | Tak (wszystkie platformy) |
| Odczyt PDF417 | Tylko WPF | Tak (wszystkie platformy) |
| Czytanie azteckie | Niedostępne | Tak |
| Odczytywanie plików PDF | Niedostępne | Tak (język ojczysty) |
| Automatyczne wykrywanie formatowania | Nie — wymagany DecodeType | Tak |
| Lektura dotycząca ASP.NET Core | Niedostępne | Tak |
| Lektura dotycząca Blazor | Niedostępne | Tak |
| Docker / Linux – lektura | Niedostępne | Tak |
| Biblioteka usług współdzielonych | Niemożliwe (typy platform) | Tak |
| Statyczne API odczytu | Nie (wymagana instancja) | Tak |
| Samodzielny pakiet NuGet | Nie — Suite UI wymagana | Tak |
| Licencja wieczysta | Dostępny jest wieczysty tier obok subskrypcji | Tak — od $749 (Lite) |
Szybki start
Krok 1: Zastąp pakiet NuGet
Usuń pakiet Telerik UI dla platformy lub platform w swoim projekcie:
# WPF
dotnet remove package Telerik.UI.for.Wpf.60.Xaml
# WinForms
dotnet remove package Telerik.UI.for.WinForms.Common
dotnet remove package Telerik.UI.for.WinForms.Barcode
# Blazor
dotnet remove package Telerik.UI.for.Blazor
# WPF
dotnet remove package Telerik.UI.for.Wpf.60.Xaml
# WinForms
dotnet remove package Telerik.UI.for.WinForms.Common
dotnet remove package Telerik.UI.for.WinForms.Barcode
# Blazor
dotnet remove package Telerik.UI.for.Blazor
Jeśli w projekcie wykorzystywane są również inne kontrolki Telerik z tego samego pakietu, należy pozostawić pakiet na miejscu i przejść do kroku 2. Wywołania API dotyczące kodów kreskowych zostaną usunięte bez usuwania wspólnego pakietu.
Zainstaluj IronBarcode:
dotnet add package IronBarcode
dotnet add package IronBarcode
Jeden pakiet obejmuje WPF, WinForms, ASP.NET Core, Blazor Server, aplikacje konsolowe, Docker, Azure Functions oraz AWS Lambda. Pełne informacje o kompatybilności platformy dokumentują dokładne wersje .NET i obsługiwane systemy operacyjne.
Krok 2: Aktualizacja przestrzeni nazw
Usuń importy przestrzeni nazw Telerik BarCode i zastąp je przestrzenią nazw IronBarcode:
// Remove these namespace imports:
// using Telerik.Windows.Controls.Barcode; // WPF reader and generator
// using Telerik.Windows.Controls; // WPF general
// using Telerik.WinControls.UI; // WinForms
// using Telerik.WinControls.UI.Barcode; // WinForms barcode reader
// Add this:
using IronBarCode;
// Remove these namespace imports:
// using Telerik.Windows.Controls.Barcode; // WPF reader and generator
// using Telerik.Windows.Controls; // WPF general
// using Telerik.WinControls.UI; // WinForms
// using Telerik.WinControls.UI.Barcode; // WinForms barcode reader
// Add this:
using IronBarCode;
Imports IronBarCode
Krok 3: Inicjalizacja licencji
Zastąp inicjalizację licencji Telerik przypisaniem klucza IronBarcode podczas uruchamiania aplikacji:
// Remove:
// Telerik.WinControls.TelerikLicenseManager.InstallLicense("key");
// Add at application startup (Program.cs, App.xaml.cs, or composition root):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Remove:
// Telerik.WinControls.TelerikLicenseManager.InstallLicense("key");
// Add at application startup (Program.cs, App.xaml.cs, or composition root):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' Remove:
' Telerik.WinControls.TelerikLicenseManager.InstallLicense("key")
' Add at application startup (Program.vb, App.xaml.vb, or composition root):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Kluczowe zadanie jest wykonywane jednokrotnie w punkcie wejścia aplikacji. Nie ma pliku licencji do wdrożenia, ścieżki inicjalizacji dla poszczególnych platform ani oddzielnej konfiguracji dla WPF i .NET Core.
Przykłady migracji kodu
Generowanie kodu BarCode: kontrolka XAML do API opartego na kodzie
Generacja Telerik w WPF jest deklaratywna — element XAML RadBarcode renderuje się bezpośrednio w drzewie UI. IronBarcode generuje kody kreskowe w kodzie i zwraca obiekt GeneratedBarcode, który można zapisać jako plik lub przekonwertować na BitmapSource do wyświetlenia w WPF.
Podejście Telerik:
<Window xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation">
<telerik:RadBarcode Value="PROD-2026-00184" Symbology="Code128" />
</Window>
<Window xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation">
<telerik:RadBarcode Value="PROD-2026-00184" Symbology="Code128" />
</Window>
@* Blazor — TelerikBarcode renders as a Razor component *@
<TelerikBarcode Value="PROD-2026-00184" Type="@BarcodeType.Code128" />
Podejście IronBarcode:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// Save to file — replaces XAML generation + manual export
BarcodeWriter.CreateBarcode("PROD-2026-00184", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
// Display in WPF — assign to an Image control's Source property
var bitmapSource = BarcodeWriter.CreateBarcode("PROD-2026-00184", BarcodeEncoding.Code128)
.ToBitmapSource();
barcodeImageControl.Source = bitmapSource;
// Serve in Blazor or ASP.NET Core — return as base64 src attribute
byte[] bytes = BarcodeWriter.CreateBarcode("PROD-2026-00184", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.ToPngBinaryData();
string imgSrc = $"data:image/png;base64,{Convert.ToBase64String(bytes)}";
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// Save to file — replaces XAML generation + manual export
BarcodeWriter.CreateBarcode("PROD-2026-00184", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
// Display in WPF — assign to an Image control's Source property
var bitmapSource = BarcodeWriter.CreateBarcode("PROD-2026-00184", BarcodeEncoding.Code128)
.ToBitmapSource();
barcodeImageControl.Source = bitmapSource;
// Serve in Blazor or ASP.NET Core — return as base64 src attribute
byte[] bytes = BarcodeWriter.CreateBarcode("PROD-2026-00184", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.ToPngBinaryData();
string imgSrc = $"data:image/png;base64,{Convert.ToBase64String(bytes)}";
Imports IronBarCode
' Save to file — replaces XAML generation + manual export
BarcodeWriter.CreateBarcode("PROD-2026-00184", BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.SaveAsPng("barcode.png")
' Display in WPF — assign to an Image control's Source property
Dim bitmapSource = BarcodeWriter.CreateBarcode("PROD-2026-00184", BarcodeEncoding.Code128) _
.ToBitmapSource()
barcodeImageControl.Source = bitmapSource
' Serve in Blazor or ASP.NET Core — return as base64 src attribute
Dim bytes As Byte() = BarcodeWriter.CreateBarcode("PROD-2026-00184", BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.ToPngBinaryData()
Dim imgSrc As String = $"data:image/png;base64,{Convert.ToBase64String(bytes)}"
Enum BarcodeEncoding obejmuje te same symbologie co enum Symbology firmy Telerik. Przejście na generowanie kodów QR zmienia jedynie argument enum. Pełen zakres opcji generowania kodów kreskowych 2D, w tym poziomy korekcji błędów QR i wymiary DataMatrix, przedstawiono w dokumentacji IronBarcode wraz z kompletnymi przykładami.
Odczytywanie BarCodes z aplikacji desktopowych
Telerik dostarcza dwie oddzielne klasy czytników dla platform desktopowych — RadBarcodeReader dla WPF i RadBarcodeReader dla WinForms — z różnymi nazwami klas, różnymi nazwami właściwości i różnymi typami wejścia. IronBarcode zastępuje oba pojedynczym statycznym wywołaniem, które działa identycznie w każdym typie projektu.
Podejście Telerik WPF:
Odczyt WPF wymaga instancji RadBarcodeReader, jawnej konfiguracji DecodeType, obiektu BitmapImage załadowanego z URI i wywołania reader.Decode(). Właściwość wyniku to .Text.
using Telerik.Windows.Controls.Barcode;
using System.Windows.Media.Imaging;
public string ReadProductBarcode(string imagePath)
{
var reader = new RadBarcodeReader();
reader.DecodeTypes = new DecodeType[]
{
DecodeType.Code128,
DecodeType.Code39,
DecodeType.EAN13,
DecodeType.EAN8,
DecodeType.UPCA,
DecodeType.UPCE,
DecodeType.Codabar,
DecodeType.ITF
};
var bitmap = new BitmapImage(new Uri(imagePath, UriKind.Absolute));
var result = reader.Decode(bitmap);
return result?.Text ?? "No barcode found";
}
using Telerik.Windows.Controls.Barcode;
using System.Windows.Media.Imaging;
public string ReadProductBarcode(string imagePath)
{
var reader = new RadBarcodeReader();
reader.DecodeTypes = new DecodeType[]
{
DecodeType.Code128,
DecodeType.Code39,
DecodeType.EAN13,
DecodeType.EAN8,
DecodeType.UPCA,
DecodeType.UPCE,
DecodeType.Codabar,
DecodeType.ITF
};
var bitmap = new BitmapImage(new Uri(imagePath, UriKind.Absolute));
var result = reader.Decode(bitmap);
return result?.Text ?? "No barcode found";
}
Imports Telerik.Windows.Controls.Barcode
Imports System.Windows.Media.Imaging
Public Function ReadProductBarcode(imagePath As String) As String
Dim reader = New RadBarcodeReader()
reader.DecodeTypes = New DecodeType() {
DecodeType.Code128,
DecodeType.Code39,
DecodeType.EAN13,
DecodeType.EAN8,
DecodeType.UPCA,
DecodeType.UPCE,
DecodeType.Codabar,
DecodeType.ITF
}
Dim bitmap = New BitmapImage(New Uri(imagePath, UriKind.Absolute))
Dim result = reader.Decode(bitmap)
Return If(result?.Text, "No barcode found")
End Function
Podejście Telerik WinForms:
Klasa WinForms RadBarcodeReader używa innej nazwy, innej nazwy właściwości (DecodeType w liczbie pojedynczej zamiast DecodeTypes w liczbie mnogiej) i przyjmuje System.Drawing.Image zamiast BitmapImage.
using Telerik.WinControls.UI.Barcode;
using System.Drawing;
public string ReadShippingLabel(string imagePath)
{
var reader = new RadBarcodeReader();
reader.DecodeType = new DecodeType[]
{
DecodeType.Code128,
DecodeType.ITF,
DecodeType.EAN13
};
using var image = Image.FromFile(imagePath);
var result = reader.Read(image);
return result?.Text ?? "No barcode found";
}
using Telerik.WinControls.UI.Barcode;
using System.Drawing;
public string ReadShippingLabel(string imagePath)
{
var reader = new RadBarcodeReader();
reader.DecodeType = new DecodeType[]
{
DecodeType.Code128,
DecodeType.ITF,
DecodeType.EAN13
};
using var image = Image.FromFile(imagePath);
var result = reader.Read(image);
return result?.Text ?? "No barcode found";
}
Imports Telerik.WinControls.UI.Barcode
Imports System.Drawing
Public Function ReadShippingLabel(imagePath As String) As String
Dim reader = New RadBarcodeReader()
reader.DecodeType = New DecodeType() {
DecodeType.Code128,
DecodeType.ITF,
DecodeType.EAN13
}
Using image = Image.FromFile(imagePath)
Dim result = reader.Read(image)
Return If(result?.Text, "No barcode found")
End Using
End Function
Podejście IronBarcode:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
public string ReadProductBarcode(string imagePath)
{
var results = BarcodeReader.Read(imagePath);
return results.FirstOrDefault()?.Value ?? "No barcode found";
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;
public string ReadProductBarcode(string imagePath)
{
var results = BarcodeReader.Read(imagePath);
return results.FirstOrDefault()?.Value ?? "No barcode found";
}
Imports IronBarCode
Public Function ReadProductBarcode(imagePath As String) As String
Dim results = BarcodeReader.Read(imagePath)
Return If(results.FirstOrDefault()?.Value, "No barcode found")
End Function
BarcodeReader.Read() to metoda statyczna — nie jest potrzebna instancja czytnika. Akceptuje bezpośrednio ciąg ścieżki do pliku bez potrzeby ładowania BitmapImage lub System.Drawing.Image. Detekcja formatu jest automatyczna dla wszystkich obsługiwanych typów ponad 50. Właściwość wyniku to .Value zamiast .Text. To samo wywołanie działa bez modyfikacji zarówno w aplikacjach WPF, jak i WinForms — nie ma wersji specyficznej dla danej platformy. Odczytuje również kody QR, DataMatrix i wszelkie inne formaty obecne na obrazie, w przeciwieństwie do czytników Telerik, które są ograniczone do formatów 1D.
Odczytywanie kodów QR: wcześniej niemożliwe dzięki Telerik
Jeśli baza kodu zawiera komentarz lub NotSupportedException dokumentujący, że odczyt QR jest niedostępny, to jest jego zamiennik. W Telerik nie ma ścieżki konfiguracyjnej umożliwiającej odczyt kodów QR — ten scenariusz nie ma odpowiednika w Telerik.
Podejście Telerik:
// RadBarcodeReader does not support QR codes.
// DecodeType.QR does not exist in the Telerik enum.
public string ReadQrCode(string imagePath)
{
throw new NotSupportedException(
"Telerik RadBarcodeReader cannot read QR codes. " +
"DecodeType.QR is not a valid enum value.");
}
// RadBarcodeReader does not support QR codes.
// DecodeType.QR does not exist in the Telerik enum.
public string ReadQrCode(string imagePath)
{
throw new NotSupportedException(
"Telerik RadBarcodeReader cannot read QR codes. " +
"DecodeType.QR is not a valid enum value.");
}
' RadBarcodeReader does not support QR codes.
' DecodeType.QR does not exist in the Telerik enum.
Public Function ReadQrCode(imagePath As String) As String
Throw New NotSupportedException("Telerik RadBarcodeReader cannot read QR codes. " & _
"DecodeType.QR is not a valid enum value.")
End Function
Podejście IronBarcode:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
public string ReadQrCode(string imagePath)
{
// QR codes, DataMatrix, PDF417, and Aztec are all detected automatically
var results = BarcodeReader.Read(imagePath);
return results.FirstOrDefault()?.Value ?? "No QR code found";
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;
public string ReadQrCode(string imagePath)
{
// QR codes, DataMatrix, PDF417, and Aztec are all detected automatically
var results = BarcodeReader.Read(imagePath);
return results.FirstOrDefault()?.Value ?? "No QR code found";
}
Imports IronBarCode
Public Function ReadQrCode(imagePath As String) As String
' QR codes, DataMatrix, PDF417, and Aztec are all detected automatically
Dim results = BarcodeReader.Read(imagePath)
Return If(results.FirstOrDefault()?.Value, "No QR code found")
End Function
To samo wywołanie BarcodeReader.Read(), które czyta kody kreskowe EAN-13, czyta kody QR. Nie ma oddzielnej konfiguracji dla formatów 2D. Pełna lista obsługiwanych formatów BARCODE, zarówno do odczytu, jak i generowania, znajduje się w dokumentacji IronBarcode, która obejmuje ponad 50 pozycji wraz z uwagami dotyczącymi poszczególnych formatów.
Odczytywanie BarCodes w punkcie końcowym ASP.NET Core
Telerik nie udostępnia komponentu do odczytu kodów kreskowych dla ASP.NET Core ani Blazor. Jeśli istniejąca aplikacja przekierowuje przesłane obrazy do usługi desktopowej w celu odczytu, ponieważ warstwa internetowa nie posiadała czytnika Telerik, to rozwiązanie zastępuje się bezpośrednim odczytem w warstwie internetowej.
Podejście Telerik:
// No Telerik reading API available in ASP.NET Core.
// Workaround: forward uploaded file to a WPF or WinForms service
// that can reference Telerik.Windows.Controls.Barcode.
[HttpPost("read")]
public async Task<IActionResult> ReadBarcode(IFormFile imageFile)
{
// Must proxy to desktop service — no Telerik reader available here
var bytes = await ReadAllBytesAsync(imageFile);
var result = await _desktopBridgeService.ReadAsync(bytes);
return Ok(result);
}
// No Telerik reading API available in ASP.NET Core.
// Workaround: forward uploaded file to a WPF or WinForms service
// that can reference Telerik.Windows.Controls.Barcode.
[HttpPost("read")]
public async Task<IActionResult> ReadBarcode(IFormFile imageFile)
{
// Must proxy to desktop service — no Telerik reader available here
var bytes = await ReadAllBytesAsync(imageFile);
var result = await _desktopBridgeService.ReadAsync(bytes);
return Ok(result);
}
Imports Microsoft.AspNetCore.Mvc
' No Telerik reading API available in ASP.NET Core.
' Workaround: forward uploaded file to a WPF or WinForms service
' that can reference Telerik.Windows.Controls.Barcode.
<HttpPost("read")>
Public Async Function ReadBarcode(imageFile As IFormFile) As Task(Of IActionResult)
' Must proxy to desktop service — no Telerik reader available here
Dim bytes = Await ReadAllBytesAsync(imageFile)
Dim result = Await _desktopBridgeService.ReadAsync(bytes)
Return Ok(result)
End Function
Podejście IronBarcode:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/barcode")]
public class BarcodeController : ControllerBase
{
[HttpPost("read")]
public IActionResult ReadBarcode(IFormFile imageFile)
{
using var stream = imageFile.OpenReadStream();
var results = BarcodeReader.Read(stream);
return Ok(results.Select(r => new
{
Format = r.BarcodeType.ToString(),
Value = r.Value
}));
}
[HttpGet("generate")]
public IActionResult GenerateBarcode([FromQuery] string data)
{
var bytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.ToPngBinaryData();
return File(bytes, "image/png");
}
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/barcode")]
public class BarcodeController : ControllerBase
{
[HttpPost("read")]
public IActionResult ReadBarcode(IFormFile imageFile)
{
using var stream = imageFile.OpenReadStream();
var results = BarcodeReader.Read(stream);
return Ok(results.Select(r => new
{
Format = r.BarcodeType.ToString(),
Value = r.Value
}));
}
[HttpGet("generate")]
public IActionResult GenerateBarcode([FromQuery] string data)
{
var bytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.ToPngBinaryData();
return File(bytes, "image/png");
}
}
Imports IronBarCode
Imports Microsoft.AspNetCore.Mvc
<ApiController>
<Route("api/barcode")>
Public Class BarcodeController
Inherits ControllerBase
<HttpPost("read")>
Public Function ReadBarcode(imageFile As IFormFile) As IActionResult
Using stream = imageFile.OpenReadStream()
Dim results = BarcodeReader.Read(stream)
Return Ok(results.Select(Function(r) New With {
.Format = r.BarcodeType.ToString(),
.Value = r.Value
}))
End Using
End Function
<HttpGet("generate")>
Public Function GenerateBarcode(<FromQuery> data As String) As IActionResult
Dim bytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.ToPngBinaryData()
Return File(bytes, "image/png")
End Function
End Class
BarcodeReader.Read() akceptuje bezpośrednio Stream, więc przesłany strumień plików jest przekazywany bez zapisywania na dysk. Ten kontroler można wdrożyć na systemie Linux, w środowisku Docker lub w usłudze Azure App Service bez konieczności wprowadzania zmian.
Odczytywanie BarCodes z plików PDF
Telerik nie posiada funkcji odczytu BarCodes z plików PDF. Dodanie odczytu PDF do istniejącej bazy kodu opartej na Telerik wymaga biblioteki renderującej PDF do konwersji stron na obrazy przed ich przekazaniem do RadBarcodeReader. IronBarcode odczytuje pliki PDF bezpośrednio.
Podejście Telerik:
// No direct PDF reading support in RadBarcodeReader.
// Workaround: use a separate PDF library to extract page images
using SomePdfLibrary; // third-party dependency
using Telerik.Windows.Controls.Barcode;
public List<string> ReadBarcodesFromPdf(string pdfPath)
{
var results = new List<string>();
var pages = PdfRenderer.ExtractPages(pdfPath); // third-party call
foreach (var pageImage in pages)
{
var reader = new RadBarcodeReader();
reader.DecodeTypes = new[] { DecodeType.Code128, DecodeType.EAN13 };
var bitmap = ConvertToBitmapImage(pageImage); // conversion required
var result = reader.Decode(bitmap);
if (result != null)
results.Add(result.Text); // 1D only — QR codes on PDF pages are missed
}
return results;
}
// No direct PDF reading support in RadBarcodeReader.
// Workaround: use a separate PDF library to extract page images
using SomePdfLibrary; // third-party dependency
using Telerik.Windows.Controls.Barcode;
public List<string> ReadBarcodesFromPdf(string pdfPath)
{
var results = new List<string>();
var pages = PdfRenderer.ExtractPages(pdfPath); // third-party call
foreach (var pageImage in pages)
{
var reader = new RadBarcodeReader();
reader.DecodeTypes = new[] { DecodeType.Code128, DecodeType.EAN13 };
var bitmap = ConvertToBitmapImage(pageImage); // conversion required
var result = reader.Decode(bitmap);
if (result != null)
results.Add(result.Text); // 1D only — QR codes on PDF pages are missed
}
return results;
}
Imports SomePdfLibrary ' third-party dependency
Imports Telerik.Windows.Controls.Barcode
Public Function ReadBarcodesFromPdf(pdfPath As String) As List(Of String)
Dim results As New List(Of String)()
Dim pages = PdfRenderer.ExtractPages(pdfPath) ' third-party call
For Each pageImage In pages
Dim reader As New RadBarcodeReader()
reader.DecodeTypes = New DecodeType() {DecodeType.Code128, DecodeType.EAN13}
Dim bitmap = ConvertToBitmapImage(pageImage) ' conversion required
Dim result = reader.Decode(bitmap)
If result IsNot Nothing Then
results.Add(result.Text) ' 1D only — QR codes on PDF pages are missed
End If
Next
Return results
End Function
Podejście IronBarcode:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
public List<string> ReadBarcodesFromPdf(string pdfPath)
{
var results = BarcodeReader.Read(pdfPath);
return results.Select(r =>
$"Page {r.PageNumber}: {r.BarcodeType} — {r.Value}").ToList();
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;
public List<string> ReadBarcodesFromPdf(string pdfPath)
{
var results = BarcodeReader.Read(pdfPath);
return results.Select(r =>
$"Page {r.PageNumber}: {r.BarcodeType} — {r.Value}").ToList();
}
Imports IronBarCode
Public Function ReadBarcodesFromPdf(pdfPath As String) As List(Of String)
Dim results = BarcodeReader.Read(pdfPath)
Return results.Select(Function(r) $"Page {r.PageNumber}: {r.BarcodeType} — {r.Value}").ToList()
End Function
Nie jest potrzebna osobna biblioteka PDF. Bez etapu wyodrębniania stron. Bez konwersji obrazów. Przekaż ścieżkę do pliku PDF, a IronBarcode przetworzy wszystkie strony, zwracając wszystkie BarCodes wraz z numerami stron. Wykrywane są zarówno BarCodes 1D, jak i 2D na stronach PDF.
Mapowanie API Telerik RadBarcode do IronBarcode
| Telerik RadBarcode | IronBarcode |
|---|---|
TelerikLicenseManager.InstallLicense("key") |
IronBarCode.License.LicenseKey = "key" |
<telerik:RadBarcode Value="..." Symbology="Code128" /> |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) |
<TelerikBarcode Type="@BarcodeType.Code128" /> |
Generacja po stronie serwera zwracająca ToPngBinaryData() |
Symbology.Code128 |
BarcodeEncoding.Code128 |
Symbology.QRCode |
BarcodeEncoding.QRCode |
new RadBarcodeReader() (WPF) |
Klasa statyczna — nie wymaga instancji |
new RadBarcodeReader() (WinForms) |
Klasa statyczna — nie wymaga instancji |
reader.DecodeTypes = new DecodeType[] { ... } (WPF) |
Automatyczne wykrywanie — nie jest wymagana specyfikacja |
reader.DecodeType = new DecodeType[] { ... } (WinForms) |
Automatyczne wykrywanie — nie jest wymagana specyfikacja |
reader.Decode(bitmapImage) (WPF) |
BarcodeReader.Read(imagePath) |
reader.Read(drawingImage) (WinForms) |
BarcodeReader.Read(imagePath) |
result.Text |
result.Value |
result.Symbology |
result.BarcodeType |
BitmapImage wymagany jako wejście (WPF) |
Akceptowany ciąg ścieżki do pliku, Stream lub tablica bajtów |
System.Drawing.Image wymagany jako wejście (WinForms) |
Akceptowany ciąg ścieżki do pliku, Stream lub tablica bajtów |
| Formaty 1D tylko do odczytu | Ponad 50 formatów, w tym wszystkie typy 2D |
| Tylko do odczytu: WPF i WinForms | Wszystkie platformy .NET |
| Brak obsługi plików PDF | BarcodeReader.Read("file.pdf") — natywny |
Typowe problemy związane z migracją i ich rozwiązania
Problem 1: Zastąpienie kontrolki BarCode XAML
Telerik: <telerik:RadBarcode> to kontrolka wizualna, która renderuje się bezpośrednio w drzewie elementów UI WPF. Nie można jej zastąpić elementem Image bez zmian w kodzie-behind.
Rozwiązanie: Zastąp element <telerik:RadBarcode> kontrolką <Image> i wygeneruj kod kreskowy w kodzie-behind. Powiąż Image.Source z BitmapSource generowanym przez IronBarcode:
// In code-behind or ViewModel
using IronBarCode;
var generated = BarcodeWriter.CreateBarcode(barcodeValue, BarcodeEncoding.Code128)
.ResizeTo(400, 100);
BarcodeImage.Source = generated.ToBitmapSource();
// In code-behind or ViewModel
using IronBarCode;
var generated = BarcodeWriter.CreateBarcode(barcodeValue, BarcodeEncoding.Code128)
.ResizeTo(400, 100);
BarcodeImage.Source = generated.ToBitmapSource();
Imports IronBarCode
' In code-behind or ViewModel
Dim generated = BarcodeWriter.CreateBarcode(barcodeValue, BarcodeEncoding.Code128) _
.ResizeTo(400, 100)
BarcodeImage.Source = generated.ToBitmapSource()
Dla Blazor, zastąp <TelerikBarcode> elementem <img>, którego atrybut src otrzymuje zakodowany w base64 PNG wygenerowany po stronie serwera.
Problem 2: Skutki uboczne usunięcia DecodeType
Telerik: Właściwość DecodeTypes (WPF) lub DecodeType (WinForms) filtruje formaty, które czytnik próbuje wykryć. Usunięcie tego filtra podczas migracji IronBarcode oznacza, że IronBarcode będzie teraz zwracać wyniki dla wszystkich formatów obecnych na obrazie, w tym formatów, które wcześniej były wykluczane przez filtr.
Rozwiązanie: Usuń blok przypisania DecodeType całkowicie. Jeżeli dodatkowo wykryte formaty powodują nieoczekiwane wyniki w dalszej logice — na przykład, jeśli kod zakładał, że zawsze zostanie zwrócony tylko jeden format kodu kreskowego — dodaj opcjonalne filtrowanie za pomocą BarcodeReaderOptions:
using IronBarCode;
var options = new BarcodeReaderOptions
{
ExpectedBarcodeTypes = BarcodeEncoding.Code128 | BarcodeEncoding.EAN13
};
var results = BarcodeReader.Read(imagePath, options);
using IronBarCode;
var options = new BarcodeReaderOptions
{
ExpectedBarcodeTypes = BarcodeEncoding.Code128 | BarcodeEncoding.EAN13
};
var results = BarcodeReader.Read(imagePath, options);
Imports IronBarCode
Dim options As New BarcodeReaderOptions With {
.ExpectedBarcodeTypes = BarcodeEncoding.Code128 Or BarcodeEncoding.EAN13
}
Dim results = BarcodeReader.Read(imagePath, options)
Jest to opcjonalne. Domyślne zachowanie (wykrywanie wszystkich formatów) jest prawidłowe w większości przypadków i daje wyniki, których nie była w stanie zapewnić poprzednia implementacja Telerik.
Problem 3: Porządkowanie TelerikLicenseManager
Telerik: Wywołania Telerik.WinControls.TelerikLicenseManager.InstallLicense(key) pojawiają się przy starcie aplikacji, zazwyczaj w Program.cs (WinForms) lub App.xaml.cs (WPF). Klucz jest często przechowywany w ustawieniach aplikacji, pliku konfiguracyjnym lub zakodowany na stałe w metodzie uruchamiania.
Rozwiązanie: Usuń wywołanie TelerikLicenseManager.InstallLicense(). Zastąp go przypisaniem klucza IronBarcode w tym samym miejscu uruchamiania:
// Remove:
// Telerik.WinControls.TelerikLicenseManager.InstallLicense("TELERIK-KEY");
// Add:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Remove:
// Telerik.WinControls.TelerikLicenseManager.InstallLicense("TELERIK-KEY");
// Add:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' Remove:
' Telerik.WinControls.TelerikLicenseManager.InstallLicense("TELERIK-KEY")
' Add:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Jeśli pakiet Telerik pozostaje zainstalowany (ponieważ inne kontrolki Telerik nie związane z kodami kreskowymi są nadal używane), należy zachować wywołanie TelerikLicenseManager dla tych kontrolek. Usuń to wezwanie tylko wtedy, gdy pakiety Telerik są całkowicie usuwane.
Lista kontrolna migracji Telerik RadBarcode
Zadania przed migracją
Przed wprowadzeniem zmian w kodzie należy sprawdzić kod źródłowy pod kątem wszystkich zastosowań BarCode'ów Telerik:
# License initialization
grep -r "TelerikLicenseManager.InstallLicense" --include="*.cs" .
# XAML generation controls
grep -r "RadBarcode" --include="*.xaml" .
grep -r "TelerikBarcode" --include="*.razor" .
# Code-behind generation references
grep -r "RadBarcode" --include="*.cs" .
grep -r "Symbology\." --include="*.cs" .
# Reading API — WPF
grep -r "RadBarcodeReader" --include="*.cs" .
grep -r "DecodeTypes\." --include="*.cs" .
grep -r "reader\.Decode(" --include="*.cs" .
# Reading API — WinForms
grep -r "BarCodeReader" --include="*.cs" .
grep -r "DecodeType\." --include="*.cs" .
grep -r "reader\.Read(" --include="*.cs" .
# Result property access
grep -r "result\.Text" --include="*.cs" .
grep -r "result\.Symbology" --include="*.cs" .
# License initialization
grep -r "TelerikLicenseManager.InstallLicense" --include="*.cs" .
# XAML generation controls
grep -r "RadBarcode" --include="*.xaml" .
grep -r "TelerikBarcode" --include="*.razor" .
# Code-behind generation references
grep -r "RadBarcode" --include="*.cs" .
grep -r "Symbology\." --include="*.cs" .
# Reading API — WPF
grep -r "RadBarcodeReader" --include="*.cs" .
grep -r "DecodeTypes\." --include="*.cs" .
grep -r "reader\.Decode(" --include="*.cs" .
# Reading API — WinForms
grep -r "BarCodeReader" --include="*.cs" .
grep -r "DecodeType\." --include="*.cs" .
grep -r "reader\.Read(" --include="*.cs" .
# Result property access
grep -r "result\.Text" --include="*.cs" .
grep -r "result\.Symbology" --include="*.cs" .
Proszę udokumentować każde dopasowanie. Zwróć uwagę, które pliki zawierają kontrolki XAML, które zawierają kod odczytu oraz do której platformy należy każdy plik.
Zadania związane z aktualizacją kodu
- Usuń pakiety NuGet Telerik BarCode (lub zachowaj je, jeśli są potrzebne do innych kontrolek)
- Zainstaluj pakiet NuGet
IronBarcodew każdym projekcie, który wymaga funkcjonalności kodów kreskowych - Dodaj
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"przy każdym punkcie wejścia uruchomienia aplikacji - Usuń importy przestrzeni nazw Telerik i dodaj
using IronBarCode - Zastąp elementy XAML
<telerik:RadBarcode>kontrolkami<Image> - Generuj obrazy kodów kreskowych w kodzie-behind przy użyciu
BarcodeWriter.CreateBarcode(...).ToBitmapSource() - Zastąp komponenty Razor
<TelerikBarcode>źródłami base64<img>, generowanymi po stronie serwera - Zastąp instancje
new RadBarcodeReader()statycznymi wywołaniamiBarcodeReader.Read(path) - Zastąp instancje
new RadBarcodeReader()statycznymi wywołaniamiBarcodeReader.Read(path) - Usuń wszystkie
reader.DecodeTypes = new DecodeType[] { ... }andreader.DecodeType = new DecodeType[] { ... }bloki - Zastąp wywołania
reader.Decode(bitmapImage)przezBarcodeReader.Read(imagePath) - Zastąp wywołania
reader.Read(drawingImage)przezBarcodeReader.Read(imagePath) - Zmień nazwę
result.Textnaresult.Valuewe wszystkich punktach dostępu do wyników odczytu - Zmień nazwę
result.Symbologynaresult.BarcodeTypewe wszystkich punktach sprawdzania formatu - Zastąp wartości enum generacji
Symbology.Code128i podobne przezBarcodeEncoding.Code128 - Usuń wywołania
TelerikLicenseManager.InstallLicense()tam, gdzie pakiety Telerik zostały całkowicie usunięte
Testy po migracji
- Sprawdź, czy wszystkie wcześniej odczytane kody kreskowe 1D (Code128, EAN13 itp.) nadal zwracają prawidłowe wartości
- Sprawdź, czy kody QR na obrazkach testowych są teraz odczytywane poprawnie, podczas gdy wcześniej zwracały wartość null
- Sprawdź, czy wygenerowane kody kreskowe (zapisane jako pliki PNG lub dostarczone jako bajty) są widoczne i skanują się poprawnie
- Sprawdź, czy punkty końcowe ASP.NET Core lub Blazor, które wcześniej nie mogły odczytywać danych, teraz działają poprawnie
- Jeśli dodano funkcję odczytu plików PDF, upewnij się, że BarCODE-y na każdej stronie PDF są wykrywane z prawidłowymi numerami stron
- Uruchom polecenia audytu grep z sekcji "Przed migracją", aby upewnić się, że nie pozostała żadna dokumentacja API dla interfejsu kodów kreskowych Telerik
- Potwierdź, że
IronBarCode.License.LicenseKeyjest ustawione przed pierwszym wywołaniemBarcodeReader.Read()lubBarcodeWriter.CreateBarcode()
Kluczowe korzyści wynikające z migracji do IronBarcode
Pełna obsługa formatów 2D: Po migracji formaty QR, DataMatrix, PDF417 i Aztec są odczytywane przez to samo wywołanie API, które już odczytywało Code128 i EAN13. Nie jest wymagana żadna dodatkowa konfiguracja ani oddzielna biblioteka dla formatów 2D. Silnik odczytu automatycznie rozpoznaje format.
Ujednolicone API między platformami: Te same wywołania BarcodeReader.Read() i BarcodeWriter.CreateBarcode() kompilują się i działają identycznie w WPF, WinForms, ASP.NET Core, Blazor aplikacjach konsolowych oraz w kontenerach Docker. Logika BarCode napisana raz w bibliotece usług współdzielonych działa we wszystkich typach projektów w rozwiązaniu bez konieczności modyfikacji.
Natywne przetwarzanie plików PDF:IronBarcode odczytuje kody kreskowe bezpośrednio z plików PDF, przetwarzając wszystkie strony i zwracając wyniki wraz z metadanymi dotyczącymi numerów stron. Przepływy pracy, które wcześniej wymagały biblioteki do renderowania plików PDF oraz etapu odczytu Telerik, zostały skonsolidowane w jednym wywołaniu metody, eliminując zależność od oprogramowania innych firm oraz pośredni etap konwersji obrazu.
Wyeliminowano zależność od subskrypcji w przypadku dostępu do kodów kreskowych: Po migracji funkcja kodów kreskowych jest dostępna w ramach modelu licencji wieczystej IronBarcode. Dalszy dostęp nie wymaga corocznego odnawiania. Zespoły, które wykorzystywały Suite Telerik głównie do obsługi kodów kreskowych, zmniejszają swoje stałe koszty licencji do jednorazowego wydatku.
Uproszczona baza kodu: Blok konfiguracji DecodeType, krok ładowania BitmapImage, wybór klasy czytnika specyficznej dla platformy i łańcuch właściwości result.Text są zastąpione pojedynczym statycznym wywołaniem metody z automatycznym wykrywaniem wyników. Kod, który wcześniej wymagał różnych implementacji dla odczytu WPF i WinForms, zostaje zredukowany do jednej wspólnej implementacji.
Często Zadawane Pytania
Dlaczego warto przejść z Telerik 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 Telerik 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 Telerik 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 Telerik 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 Telerik 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 Telerik?
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 Telerik 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ń.

