Altbilgi içeriğine atla
VIDEOLAR

Blazor'da Barkod Tarayıcı Nasıl Kullanılır | IronBarcode

Spire.Barcode'dan IronBarcode'a Geçiş

Spire.Barcode'un BarcodeScanner.Scan() her çağrısında bir BarCodeType argümanı gerektirir. Bir kod tabanı, çeşitli belge kaynaklarını, yeni tedarikçi etiketlerini ve yeni barkod formatlarını ele almak için büyüdükçe, bu tasarım, zamanla bakım maliyeti biriktiren tür tahmin döngüleri üretir. Bu kılavuz, Spire.Barcode'dan IronBarcode'a tüm yolu kapsar: ekiplerin bu geçişi neden yaptığı, gerçekleştirmek için mekanik adımlar ve her ortak işlem için öncesi ve sonrası kod modelleri.

Spire.Barcode'dan Neden Geçilmeli

Format Belirleme Ek Yükü: Spire.Barcode'daki her BarcodeScanner.Scan() çağrısı, çağıran kodun sağlaması gereken bir BarCodeType numaralandırma değeri gerektirir. Bilinmeyen veya karışık format kaynaklarından barkod işleyen uygulamalar, olası türlerin bir aday listesini koruması ve bir eşleşme bulunana kadar onu tekrarlaması gerekir. İş akışına eklenen her format, aday dizini güncellemeyi, algılama mantığını yeniden test etmeyi ve yineleme sırasının bir formatın diğerini gölgelememesine neden olmadığını kontrol etmeyi gerektirir. Bu aşinalık, format çeşitliliği ile orantılı olarak büyür.

Ücretsiz Katman Değerlendirme Kısıtlamaları: FreeSpire.Barcode, okuma performansını kasıtlı olarak düşürür ve ticari ürünle karşılaştırıldığında kullanılabilir semboloji setini sınırlar. FreeSpire.Barcode değerlendirmesi sırasında yapılan karşılaştırmalar ve format kapsamı testleri ticari Spire.Barcode'un davranışını temsil etmez. Ücretsiz katman değerlendirmesine dayalı bir satın alma taahhüdünde bulunan ekipler, satın alma sonrası, ürünün üretimde farklı davrandığını keşfedebilirler — özellikle throughput ve desteklenen sembolojiler etrafında.

PDF İki Kütüphane Gerektiriyor: Spire.Barcode, PDF dosyalarından doğrudan barkod okuyamaz. PDF tabanlı iş akışları, kendi lisansına sahip ayrı bir Spire.PDF paketi gerektirir, ayrıca sayfalarda gezinmek, her sayfadan resim çıkarmak ve bu resimleri barkod tarayıcıya beslemek için geliştirici yazımı kod gereklidir. Konsept olarak barkod okumaya ait olan bir görev, iki ürün, iki lisans anlaşması ve önemli altyapı koduna bölünmüştür.

Dönüş Tipi Karmaşıklığı: BarcodeScanner.Scan(), sadece kodlanmış değerleri içeren string[] döndürür. Algılanan barkod formatı dönüşte dahil edilmemiştir. Sonuçları formata göre yönlendirmesi gereken uygulamalar — örneğin, QR kod değerlerini bir işlemciye ve Code128 değerlerini diğerine göndermek —, sonucu üreten bir yineleme adımından türetilen ayrı bir tür değişkeni tutması gerekecektir, bu ise taramanın ötesinde ek durum yönetimi gerektirir.

Temel Sorun

Tip-tahmin döngüsü, zorunlu BarCodeType kısıtlamasının en belirgin belirtisidir. Çoklu kaynaklardan dokümanları işleyen bir Spire.Barcode kod tabanında, bu desen tekrarlanır:

// Spire.Barcode: growing candidate loop with silent misses
BarcodeScanner scanner = new BarcodeScanner();
var candidates = new[] { BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417 };

string foundValue = null;
foreach (var type in candidates)
{
    string[] found = scanner.Scan("barcode.png", type);
    if (found.Length > 0)
    {
        foundValue = found[0];
        break;
    }
}
// Spire.Barcode: growing candidate loop with silent misses
BarcodeScanner scanner = new BarcodeScanner();
var candidates = new[] { BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417 };

string foundValue = null;
foreach (var type in candidates)
{
    string[] found = scanner.Scan("barcode.png", type);
    if (found.Length > 0)
    {
        foundValue = found[0];
        break;
    }
}
Imports Spire.Barcode

Dim scanner As New BarcodeScanner()
Dim candidates = {BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417}

Dim foundValue As String = Nothing
For Each type In candidates
    Dim found As String() = scanner.Scan("barcode.png", type)
    If found.Length > 0 Then
        foundValue = found(0)
        Exit For
    End If
Next
$vbLabelText   $csharpLabel

IronBarcode döngüyü tamamen ortadan kaldırır. Format algılama kütüphaneye dahil edilmiştir:

// IronBarcode: single call, all formats, type included in result
var results = BarcodeReader.Read("barcode.png");

foreach (var result in results)
{
    Console.WriteLine($"{result.Format}: {result.Value}");
}
// IronBarcode: single call, all formats, type included in result
var results = BarcodeReader.Read("barcode.png");

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

' IronBarcode: single call, all formats, type included in result
Dim results = BarcodeReader.Read("barcode.png")

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

IronBarcode vs Spire.Barcode: Özellik Karşılaştırması

Özellik Spire.Barcode IronBarcode
Otomatik format algılama Hayır Evet
BarCodeType parametresi gereklidir Evet Hayır
Sonuçta format meta verisi Hayır Evet
Yerel PDF okuma Hayır (Spire.PDF gerektirir) Evet
PDF için ek kütüphane Ayrı lisans (Spire.PDF) None
Ücretsiz katman okuma performansı Kasıtlı olarak düşürülmüş Tam hız
Ücretsiz katman filigranları Büyük, barkodu kaplar Küçük, sadece kenar
Ücretsiz katman semolojileri ~20 tür 50+ tür
Ücretsiz katman için kayıt gereklidir Evet Hayır
Üretim API modeli Ayar nesnesi + üretici Akıcı zincir ile statik fabrika
Özel logolu QR kodu Yalnızca ticari seviye Tüm seviyeler
Okuma dönüş tipi string[] BarcodeResults (tip meta verisi ile)
Semboloji sayısı 39+ (ticari) 50+
Lisans modeli Koltuk başına süresiz + abonelik Opsiyonel yenilemeyle süresiz

Hızlı Başlangıç

Adım 1: NuGet Paketini Değiştirin

Mevcut Spire paketini veya kullanılan paketleri kaldırın:

# Remove whichever variant is installed
dotnet remove package FreeSpire.Barcode
# or
dotnet remove package Spire.Barcode

# If Spire.PDF was installed only for barcode extraction, remove it as well
dotnet remove package Spire.PDF
# Remove whichever variant is installed
dotnet remove package FreeSpire.Barcode
# or
dotnet remove package Spire.Barcode

# If Spire.PDF was installed only for barcode extraction, remove it as well
dotnet remove package Spire.PDF
SHELL

Barkod çıkarımı dışında başka doküman işlemleri için Spire.PDF kullanılıyorsa, bu koruyun ve sadece barkodla ilgili kod yollarını kaldırın.

IronBarcode'u kurun:

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

Adım 2: Ad Alanlarını Güncelleyin

Tüm Spire ad alanı ithalatlarınıIronBarcode ad alanı ile değiştirin:

// Remove:
using Spire.Barcode;
using Spire.Pdf;

// Add:
using IronBarCode;
// Remove:
using Spire.Barcode;
using Spire.Pdf;

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

Adım 3: Lisansa İzin Verin

Spire lisans başlatmasını uygulama başlatma noktasında tek bir IronBarcode özelliği atama ile değiştirin. Lisans anahtar biçimleri ve dağıtım seçenekleri için IronBarcode lisanslama sayfasını görün:

// Remove (FreeSpire registration):
Spire.Barcode.BarcodeSettings.ApplyKey("your-free-key");

// Remove (commercial Spire license):
Spire.License.LicenseProvider.SetLicenseKey("your-commercial-key");

// Add (IronBarcode):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Remove (FreeSpire registration):
Spire.Barcode.BarcodeSettings.ApplyKey("your-free-key");

// Remove (commercial Spire license):
Spire.License.LicenseProvider.SetLicenseKey("your-commercial-key");

// Add (IronBarcode):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' Remove (FreeSpire registration):
Spire.Barcode.BarcodeSettings.ApplyKey("your-free-key")

' Remove (commercial Spire license):
Spire.License.LicenseProvider.SetLicenseKey("your-commercial-key")

' Add (IronBarcode):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Docker ve CI ortamları için, lisans anahtarı bir ortam değişkeninden sağlanabilir:

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

Kod Göç Örnekleri

Bilinen Bir Format Barkodunu Okuma

Spire.Barcode'da tek bir format okuma, tipi açıkça belirleyerek geçer ve bir string[] alır.

Spire.Barcode Yaklaşımı:

using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("shipping-label.png", BarCodeType.Code128);

if (results.Length > 0)
{
    ProcessShipment(results[0]);
}
using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("shipping-label.png", BarCodeType.Code128);

if (results.Length > 0)
{
    ProcessShipment(results[0]);
}
Imports Spire.Barcode

Dim scanner As New BarcodeScanner()
Dim results As String() = scanner.Scan("shipping-label.png", BarCodeType.Code128)

If results.Length > 0 Then
    ProcessShipment(results(0))
End If
$vbLabelText   $csharpLabel

IronBarcode Yaklaşımı:

using IronBarCode;

var results = BarcodeReader.Read("shipping-label.png");

if (results.Any())
{
    ProcessShipment(results.First().Value);
}
using IronBarCode;

var results = BarcodeReader.Read("shipping-label.png");

if (results.Any())
{
    ProcessShipment(results.First().Value);
}
Imports IronBarCode

Dim results = BarcodeReader.Read("shipping-label.png")

If results.Any() Then
    ProcessShipment(results.First().Value)
End If
$vbLabelText   $csharpLabel

BarCodeType parametresi kaldırılır. Eğer alt akış mantığı tespit edilen formatı doğrulamalıysa, results.First().Format bunu ayrı bir durum değişkenine ihtiyaç duymadan sağlar.

Karışık Format Tür Döngüsünü Çökertme

Bir Spire.Barcode kod tabanı belge işleri, meşrutiyet kullanırken ilk ıslandığında, tür tahmini döngüsü, iş akışına yeni formatlar girerken zamanla birikir.

Spire.Barcode Yaklaşımı:

using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
BarCodeType[] candidates = new[]
{
    BarCodeType.Code128,
    BarCodeType.QRCode,
    BarCodeType.DataMatrix,
    BarCodeType.EAN13,
    BarCodeType.PDF417
};

List<string> allValues = new List<string>();
foreach (BarCodeType type in candidates)
{
    string[] found = scanner.Scan("document-scan.png", type);
    allValues.AddRange(found);
}
using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
BarCodeType[] candidates = new[]
{
    BarCodeType.Code128,
    BarCodeType.QRCode,
    BarCodeType.DataMatrix,
    BarCodeType.EAN13,
    BarCodeType.PDF417
};

List<string> allValues = new List<string>();
foreach (BarCodeType type in candidates)
{
    string[] found = scanner.Scan("document-scan.png", type);
    allValues.AddRange(found);
}
Imports Spire.Barcode

Dim scanner As New BarcodeScanner()
Dim candidates As BarCodeType() = {
    BarCodeType.Code128,
    BarCodeType.QRCode,
    BarCodeType.DataMatrix,
    BarCodeType.EAN13,
    BarCodeType.PDF417
}

Dim allValues As New List(Of String)()
For Each type As BarCodeType In candidates
    Dim found As String() = scanner.Scan("document-scan.png", type)
    allValues.AddRange(found)
Next
$vbLabelText   $csharpLabel

IronBarcode Yaklaşımı:

using IronBarCode;

// The entire loop is replaced by a single call
var results = BarcodeReader.Read("document-scan.png");
List<string> allValues = results.Select(r => r.Value).ToList();
using IronBarCode;

// The entire loop is replaced by a single call
var results = BarcodeReader.Read("document-scan.png");
List<string> allValues = results.Select(r => r.Value).ToList();
Imports IronBarCode

' The entire loop is replaced by a single call
Dim results = BarcodeReader.Read("document-scan.png")
Dim allValues As List(Of String) = results.Select(Function(r) r.Value).ToList()
$vbLabelText   $csharpLabel

IronBarcode'un görüntü okuması, tek bir geçişte tüm50+semolojiyi ele alır. Yüksek hacimli toplu işleme ayarlamak için okuma hızının ayarlanması gerektiğinde, BarcodeReaderOptions format özel dallar eklemeden kontrol sağlar:

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("document-scan.png", options);
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("document-scan.png", options);
Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True
}
Dim results = BarcodeReader.Read("document-scan.png", options)
$vbLabelText   $csharpLabel

Uygun ReadingSpeed değerini seçmek için rehberlik almak adına okuma hızı seçenekleri belgelerine bakınız.

Barkod Oluşturma

Spire.Barcode üretimi, bir BarcodeSettings nesnesinin örneklendirilmesini, her bir özelliğin ayrı ayrı atanmasını, ayarların BarCodeGenerator'a geçirilmesini ve herhangi bir dosya yazılmadan önce GenerateImage() çağrılmasını gerektirir.

Spire.Barcode Yaklaşımı:

using Spire.Barcode;

BarcodeSettings settings = new BarcodeSettings();
settings.Type = BarCodeType.Code128;
settings.Data = "SHIP-9842-XZ";
settings.ShowText = true;
settings.TextMargin = 5;
settings.BarHeight = 60;
settings.Unit = GraphicsUnit.Pixel;

BarCodeGenerator generator = new BarCodeGenerator(settings);
Image barcodeImage = generator.GenerateImage();
barcodeImage.Save("shipping-label.png", ImageFormat.Png);
using Spire.Barcode;

BarcodeSettings settings = new BarcodeSettings();
settings.Type = BarCodeType.Code128;
settings.Data = "SHIP-9842-XZ";
settings.ShowText = true;
settings.TextMargin = 5;
settings.BarHeight = 60;
settings.Unit = GraphicsUnit.Pixel;

BarCodeGenerator generator = new BarCodeGenerator(settings);
Image barcodeImage = generator.GenerateImage();
barcodeImage.Save("shipping-label.png", ImageFormat.Png);
Imports Spire.Barcode
Imports System.Drawing
Imports System.Drawing.Imaging

Dim settings As New BarcodeSettings()
settings.Type = BarCodeType.Code128
settings.Data = "SHIP-9842-XZ"
settings.ShowText = True
settings.TextMargin = 5
settings.BarHeight = 60
settings.Unit = GraphicsUnit.Pixel

Dim generator As New BarCodeGenerator(settings)
Dim barcodeImage As Image = generator.GenerateImage()
barcodeImage.Save("shipping-label.png", ImageFormat.Png)
$vbLabelText   $csharpLabel

IronBarcode Yaklaşımı:

using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-9842-XZ", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("shipping-label.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-9842-XZ", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("shipping-label.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("SHIP-9842-XZ", BarcodeEncoding.Code128) _
    .ResizeTo(400, 100) _
    .SaveAsPng("shipping-label.png")
$vbLabelText   $csharpLabel

Değiştirilebilir BarcodeSettings nesnesi ve ayrı BarCodeGenerator örneği, bir akış zinciri ile tek bir statik fabrika çağrısı ile değiştirilir. Ayarların eşzamanlı çağrılarda yanlışlıkla paylaşılması riski yoktur çünkü her CreateBarcode() çağrısı bağımsızdır.

Bir PDF Belgesinden Barkodları Okuma

Spire.Barcode PDF'leri doğrudan okuyamaz. Spire tabanlı yaklaşım, dosyayı açmak, sayfalarında dolaşmak, her sayfadan raster görüntüleri çıkarmak ve daha sonra bu görüntüleri barkod tarayıcıya birer birer geçirmek için ayrı bir Spire.PDF paketi gerektirir.

Spire.Barcode Yaklaşımı:

using Spire.Pdf;
using Spire.Barcode;

var pdf = new PdfDocument();
pdf.LoadFromFile("invoices.pdf");

var scanner = new BarcodeScanner();
var extractedValues = new List<string>();

foreach (PdfPageBase page in pdf.Pages)
{
    Image[] images = page.ExtractImages();
    foreach (Image image in images)
    {
        string[] found = scanner.Scan(image, BarCodeType.QRCode);
        extractedValues.AddRange(found);
    }
}
using Spire.Pdf;
using Spire.Barcode;

var pdf = new PdfDocument();
pdf.LoadFromFile("invoices.pdf");

var scanner = new BarcodeScanner();
var extractedValues = new List<string>();

foreach (PdfPageBase page in pdf.Pages)
{
    Image[] images = page.ExtractImages();
    foreach (Image image in images)
    {
        string[] found = scanner.Scan(image, BarCodeType.QRCode);
        extractedValues.AddRange(found);
    }
}
Imports Spire.Pdf
Imports Spire.Barcode

Dim pdf As New PdfDocument()
pdf.LoadFromFile("invoices.pdf")

Dim scanner As New BarcodeScanner()
Dim extractedValues As New List(Of String)()

For Each page As PdfPageBase In pdf.Pages
    Dim images() As Image = page.ExtractImages()
    For Each image As Image In images
        Dim found() As String = scanner.Scan(image, BarCodeType.QRCode)
        extractedValues.AddRange(found)
    Next
Next
$vbLabelText   $csharpLabel

IronBarcode Yaklaşımı:

using IronBarCode;

var results = BarcodeReader.Read("invoices.pdf");

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

var results = BarcodeReader.Read("invoices.pdf");

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

Dim results = BarcodeReader.Read("invoices.pdf")

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

IronBarcode, PDF belgelerini doğrudan okur ve Spire.PDF veya herhangi bir manuel sayfa yönetimi gerektirmez. Her barkodun çıkarıldığı sayfa numarası, sonuç nesnesinde mevcuttur. PDF okuma kodu değiştirildikten sonra, Spire.PDF paket referansı ve tüm using Spire.Pdf; importları projeden kaldırılabilir.

Spire.Barcode API'sinden IronBarcode için Haritalama Referansı

Spire.Barcode IronBarcode Notlar
new BarcodeScanner() BarcodeReader.Read() (statik) Tarayıcı örneği gerekli değil
scanner.Scan(path, BarCodeType.X) BarcodeReader.Read(path) Tür parametresi kaldırıldı
BarCodeType.Code128 (gereklidir) Otomatik olarak algılanır Eşdeğerinin gereksiz olduğu
BarCodeType.QRCode (gereklidir) Otomatik olarak algılanır Eşdeğerinin gereksiz olduğu
string[] results'dan Scan() BarcodeResults koleksiyonu Değerlere .Value üzerinden erişim
results[0] (dize) results[0].Value
Sonuç üzerinde format bilinmiyor result.Format Sonuç nesnesi içinde tür bulunur
new BarcodeSettings() CreateBarcode() üzerindeki parametreler Ayar nesnesi gerekmez
settings.Type = BarCodeType.X BarcodeEncoding.X ikinci parametre olarak
settings.Data = "value" CreateBarcode()'nin ilk parametresi
new BarCodeGenerator(settings) Gerekli değil Statik fabrika onu değiştirir
generator.GenerateImage() .SaveAsPng() / .SaveAsJpeg() Format-spesifik çıkış yöntemleri
BarcodeSettings.ApplyKey("key") IronBarCode.License.LicenseKey = "key" Başlangıçta bir kez ayarla
Spire.License.LicenseProvider.SetLicenseKey("key") IronBarCode.License.LicenseKey = "key" Aynı tek satır değişimi
Spire.PDF (PDF okuma için) Gerekli değil Yerel PDF desteği yerleşiktir

Yaygın Göç Sorunları ve Çözümleri

Sorun 1: BarCodeType Parametresi Kaldırma

Spire.Barcode: scanner.Scan(path, BarCodeType.Code128) — tip argümanı, yöntem imzası tarafından gereklidir. Onu kaldırmak bir derleme hatası oluşturur.

Çözüm: Tüm çağrıyı BarcodeReader.Read(path) ile değiştirin. Her türlü varlığı bulmak için kod tabanında BarCodeType. araması yapın. Tip-tahmin döngüleri (bir BarCodeType[] aday dizisi üzerinde yineleme yapan foreach blokları) tamamen silinebilir; döngü, tek bir BarcodeReader.Read() çağrısıyla değiştirilir.

Sorun 2: string[] Dönüş Türü

Spire.Barcode: Scan(), string[] döndürür. Bunu bir string[] değişkenine atayan veya string[] bekleyen bir metoda geçiren alt akış kodu, geçişten sonra derlenemeyecektir.

Çözüm: Çağrı noktalarını BarcodeResults ile çalışacak şekilde güncelleyin. Düz bir dize dizisi elde etmek için .Select(r => r.Value).ToArray() kullanın. İlk sonuca erişmek için .First()?.Value kullanın. Eğer tespit edilen format alt akışta gerekiyorsa, sonuç nesnesindeki .Format aracılığıyla erişilebilir — ayrı bir durum değişkeni gerekmez.

// If a plain string array is needed:
string[] texts = BarcodeReader.Read("barcode.png")
    .Select(r => r.Value)
    .ToArray();

// If only the first value is needed:
string first = BarcodeReader.Read("barcode.png").First()?.Value;
// If a plain string array is needed:
string[] texts = BarcodeReader.Read("barcode.png")
    .Select(r => r.Value)
    .ToArray();

// If only the first value is needed:
string first = BarcodeReader.Read("barcode.png").First()?.Value;
Imports System.Linq

' If a plain string array is needed:
Dim texts As String() = BarcodeReader.Read("barcode.png") _
    .Select(Function(r) r.Value) _
    .ToArray()

' If only the first value is needed:
Dim first As String = BarcodeReader.Read("barcode.png").FirstOrDefault()?.Value
$vbLabelText   $csharpLabel

Sorun 3: Spire.PDF Paketi Temizliği

Spire.Barcode: PDF okuma iş akışları, sayfa erişimi ve görüntü çıkarımı için Spire.PDF'e bağlıdır. Proje, paketi referans verir ve using Spire.Pdf; importları ve PdfDocument / PdfPageBase kullanımları birden fazla dosyada yayılmıştır.

Çözüm: Tüm PDF barkod çıkarım kodunu BarcodeReader.Read("file.pdf") ile değiştirdikten sonra, paketi kaldırmadan önce artık Spire.Pdf referansları olmadığını doğrulamak için bir grep denetimi çalıştırın:

grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "Spire\.Pdf\|PdfPageBase\|ExtractImages" --include="*.cs" .
grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "Spire\.Pdf\|PdfPageBase\|ExtractImages" --include="*.cs" .
SHELL

Yalnızca tüm referanslar temizlendiğinde paketi kaldırın:

dotnet remove package Spire.PDF
dotnet remove package Spire.PDF
SHELL

Sorun 4: Ad Alanı Değişiklikleri

Spire.Barcode: Spire.Barcode isim alanı BarcodeScanner, BarcodeSettings, BarCodeGenerator ve BarCodeType içerir. IronBarCode isim alanı BarcodeReader, BarcodeWriter, BarcodeEncoding ve BarcodeReaderOptions içerir.

Çözüm: using Spire.Barcode; yerine toplamda using IronBarCode; kullanın. Üretimde kullanılan BarCodeType numaralandırması, BarcodeEncoding ile değiştirilir. Okumada kullanılan BarCodeType numaralandırmasının IronBarcode eşdeğeri yoktur — sadece kaldırılır, çünkü format algılama otomatiktir.

Spire.Barcode Geçiş Kontrol Listesi

Geçiş Öncesi Görevler

Değişiklikler yapmadan önce Spire.Barcode kullanımını belirlemek için kod tabanını denetleyin:

grep -r "using Spire.Barcode" --include="*.cs" .
grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "BarcodeScanner\|BarcodeSettings\|BarCodeGenerator\|BarCodeType\." --include="*.cs" .
grep -r "ApplyKey\|SetLicenseKey" --include="*.cs" .
grep -r "ExtractImages\|PdfPageBase" --include="*.cs" .
grep -r "using Spire.Barcode" --include="*.cs" .
grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "BarcodeScanner\|BarcodeSettings\|BarCodeGenerator\|BarCodeType\." --include="*.cs" .
grep -r "ApplyKey\|SetLicenseKey" --include="*.cs" .
grep -r "ExtractImages\|PdfPageBase" --include="*.cs" .
SHELL
  • BarCodeType aday dizilerini içeren tüm dosyaları belgeleyin (kaldırılacak tip-tahmin döngüleri)
  • Scan()'den sonuç alan ve tip güncellemeleri gerekecek olan herhangi bir string[] değişkenini belirleyin
  • Spire.PDF'nin barkod çıkarımından başka işlemlerde kullanılıp kullanılmadığını doğrulayın

Kod Güncelleme Görevleri

  1. FreeSpire.Barcode veya Spire.Barcode NuGet paketini kaldırın
  2. Barkod çıkarım, tek kullanım alanıysa Spire.PDF NuGet paketini kaldırın
  3. IronBarcode NuGet paketini kurun
  4. Tüm using Spire.Barcode;'leri using IronBarCode; ile değiştirin
  5. Artık gereksiz olan tüm using Spire.Pdf; importlarını kaldırın
  6. Lisans başlatmalarını değiştirin: ApplyKey() veya SetLicenseKey() ile IronBarCode.License.LicenseKey = "key"
  7. Tüm new BarcodeScanner() örneklemelerini kaldırın
  8. Tüm scanner.Scan(path, BarCodeType.X) çağrılarını BarcodeReader.Read(path) ile değiştirin
  9. Tür tahmin foreach döngülerini silin; her biri için tek bir BarcodeReader.Read() çağrısıyla değiştirin
  10. PDF sayfa yineleme ve resim çıkartım bloklarını kaldırın; BarcodeReader.Read("file.pdf") ile değiştirin
  11. string[] sonuç atamalarını .Value veya .Select(r => r.Value).ToArray() kullanarak güncelleyin
  12. new BarcodeSettings() bloklarını BarcodeWriter.CreateBarcode(data, encoding) zincirleriyle değiştirin
  13. Tüm new BarCodeGenerator(settings) örneklemelerini kaldırın
  14. .GenerateImage() + image.Save()'yi .SaveAsPng() veya .SaveAsJpeg() ile değiştirin
  15. Üretimdeki BarCodeType.X numaralandırması değerlerini BarcodeEncoding.X ile değiştirin

Geçiş Sonrası Testler

Aday döngüsüne göre daha önce taranmış tüm formatların BarcodeReader.Read() tarafından düzgün şekilde algılandığını onaylayın

  • Toplu işlem geçişini ölçün ve üretim gereksinimlerini karşıladığını doğrulayın
  • PDF barkod çıkarımının doğru değerler ve sayfa numaraları ürettiğini doğrulayın
  • Üretilen barkod çıktısının kalite ve tarama yeteneğini fiziksel veya yazılım tarayıcı ile doğrulayın
  • Lisans anahtarının tüm dağıtım ortamlarında (yerel ortam, test, üretim, CI/CD) doğru şekilde yüklendiğini kontrol edin
  • Ön Geçiş Görevlerinden grep denetim komutlarını çalıştırarak hiçbir Spire referansı kalmadığını doğrulayın

IronBarcode'a Geçmenin Temel Faydaları

Format Bakım Yükünün Ortadan Kaldırılması: Geçiş sonrasında, bakım yapılacak aday tür listesi ve yeni bir barkod formatı iş akışına girdiğinde güncellenecek tür tahmin döngüsü bulunmaz. BarcodeReader.Read() tüm semboloji setini otomatik olarak yönetir ve tespit edilen format, alt akış yönlendirmesi için her bir sonuç nesnesine dahil edilir.

Taahhüt Öncesi Doğru Değerlendirme:IronBarcode denemesi, lisanslı ürünle aynı ikili dosyadan tam okuma hızında ve tam simgoloji setiyle çalışır. Performans ölçütleri ve format kapsama testleri, deneme değerlendirmesi sırasında doğrudan üretime geçer. Ekipler, değerlendirilen davranışın dağıtılan davranış olduğuna dair güvenle satın alma kararı verebilirler.

Tek Paket PDF Desteği: PDF dosyalarından barkod çıkarımı, resimler için kullanılan aynı BarcodeReader.Read() çağrısı ile ele alınır. İkincil kütüphane, ek lisans ve manuel sayfa yineleme kodu gerekli değildir. Daha önce hem Spire.Barcode hem de Spire.PDF kaynaklarını yöneten takımlar, tüm barkod iş akışı için tek bir bağımlılığa indirgenir.

Format Meta Verili Sonuç Nesneleri: Bir BarcodeResults koleksiyonundaki her bir giriş, kodlanmış değeri, tespit edilen sembolojiyi, PDF girdileri için kaynak sayfa numarasını ve kaynak görüntü içindeki sınır bölgesini taşıyor. Formatlara göre yönlendirme, filtreleme veya günlüğe kaydetme gerektiren uygulamalar, ek durum yönetimi olmadan bu bilgiye sonuç üzerinde sahip olur.

Basitleştirilmiş Üretim API'si: BarcodeWriter.CreateBarcode()'daki statik fabrika deseni, değiştirilebilir BarcodeSettings nesnesini ve ayrı BarCodeGenerator örneğini ortadan kaldırır. Her üretim çağrısı kendi kendine yeterlidir ve eşzamanlı işlemler arasındaki yapılandırma karışıklığı riskini azaltır.

İleriye Dönük Uyumluluk: IronBarcode, .NET çalışma zamanı sürümleriyle uyumlu düzenli güncellemeler alır. .NET 10'un 2026 yılına kadar yaygınlaşmasıyla birlikte, uyumluluk güncellemeleri, her yeni .NET sürümünde kütüphane değişiklikleri gerektirmeden taşınmış kod tabanlarının derlenmeye ve çalışmaya devam etmesini sağlar.

Lütfen dikkate alınSpire, ilgili sahibinin tescilli bir ticari markasıdır. Bu site, e-iceblue ile bağlantılı, onaylanmış veya sponsorlu değildir. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadır.

Sıkça Sorulan Sorular

Neden Spire.Barcode'den IronBarcode'a göç etmeliyim?

Yaygın nedenler arasında lisanslamanın basitleştirilmesi (SDK + runtime anahtar karmaşıklığının kaldırılması), veri geçiş limitlerinin ortadan kaldırılması, yerel PDF desteği kazanılması, Docker/CI/CD dağıtımının iyileştirilmesi ve üretim kodunda API tekrarlama azalması yer alır.

Spire.Barcode API çağrılarını IronBarcode ile nasıl değiştirebilirim?

Örnek oluşturma ve lisanslama tekrarlamalarını IronBarCode.License.LicenseKey = "anahtar" ile değiştirin. Okuyucu çağrılarını BarcodeReader.Read(yol) ile ve yazıcı çağrılarını BarcodeWriter.CreateBarcode(veri, kodlama) ile değiştirin. Statik yöntemler örnek yönetimi gerektirmez.

Spire.Barcode'den IronBarcode'a geçerken kodda ne kadar değişiklik oluyor?

Çoğu geçiş daha az kod satırıyla sonuçlanır. Lisanslama tekrarlamaları, örnek oluşturucular ve açık format yapılandırması kaldırılır. Temel okuma/yazma işlemleri, daha temiz sonuç nesneleriyle daha kısa IronBarcode eşdeğerlerine dönüştürülür.

Geçiş sırasında Spire.Barcode ve IronBarcode'u bir arada tutmam gerekiyor mu?

Hayır. Çoğu geçiş doğrudan değişim yapılır, paralel bir işletim yerine geçer. Bir hizmet sınıfını bir seferde geçirin, NuGet referansını değiştirin ve sonraki sınıfa geçmeden önce başlatma ve API çağrı desenlerini güncelleyin.

IronBarcode için NuGet paketi adı nedir?

Paket 'IronBarCode' (büyük B ve C harfleriyle). 'Install-Package IronBarCode' veya 'dotnet add package IronBarCode' ile kurun. Kodda kullanılan yönerge 'using IronBarCode;' şeklindedir.

IronBarcode, Docker dağıtımını Spire.Barcode'ye kıyasla nasıl kolaylaştırır?

IronBarcode, harici SDK dosyaları veya montajlı lisans yapılandırması olmayan bir NuGet paketidir. Docker'da, IRONBARCODE_LICENSE_KEY ortam değişkenini ayarlayın ve paket lisans doğrulamasını başlangıçta kendi kendine yapar.

Spire.Barcode'den geçiş yaptıktan sonra IronBarcode tüm barkod formatlarını otomatik olarak algılar mı?

Evet. IronBarcode, desteklenen tüm formatlardaki sembolojiyi otomatik olarak algılar. Açık BarcodeTypes sayımı gerekli değildir. Format zaten biliniyorsa ve performans önemliyse, BarcodeReaderOptions arama alanını optimize etmek için sınırlamayı sağlar.

IronBarcode, ayrı bir kütüphane olmadan PDF'lerden barkod okuyabiliyor mu?

Evet. BarcodeReader.Read("document.pdf") PDF dosyalarını yerel olarak işlemler. Sonuçlar her barkod için SayfaNumarası, Format, Değer ve Güven içerir. Harici bir PDF render adımı gerekmez.

IronBarcode, paralel barkod işlemeyi nasıl yönetiyor?

IronBarcode'un statik yöntemleri durumsuz ve thread-safe'dir. Dağıtılmış dosya listeleri üzerinde per-thread örnek yönetimi olmadan doğrudan Parallel.ForEach kullanın. BarcodeReaderOptions.MaxParallelThreads, iç thread bütçesini kontrol eder.

Spire.Barcode'den IronBarcode'a geçerken hangi sonuç özellikleri değişir?

Yaygın yeniden adlandırmalar: BarcodeValue, Value olur; BarcodeType, Format olur. IronBarcode sonuçları ayrıca Güven ve SayfaNumarası ekler. Çözüm çapında arama-değiştirme, mevcut sonuç işleme kodundaki yeniden adlandırmaları ele alır.

Bir CI/CD hattında IronBarcode lisanslamasını nasıl ayarlayabilirim?

IRONBARCODE_LICENSE_KEY'i bir boru hattı sırrı olarak saklayın ve uygulama başlangıç kodunda IronBarCode.License.LicenseKey olarak atayın. Bir sır, geliştirme, test, aşama ve üretim dahil olmak üzere tüm ortamları kapsar.

IronBarcode, özel biçimlendirmeye sahip QR kodu üretimini destekliyor mu?

Evet. QRCodeWriter.CreateQrCode() özelleştirilmiş renkler için ChangeBarCodeColor(), logo yerleştirme için AddBrandLogo(), yapılandırılabilir hata düzeltme seviyeleri ve PNG, JPG, PDF ve akış dahil birden çok çıktı formatını destekler.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara