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
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
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
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
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
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"
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")
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
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
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
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()
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)
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)
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")
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
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
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
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" .
Yalnızca tüm referanslar temizlendiğinde paketi kaldırın:
dotnet remove package Spire.PDF
dotnet remove package Spire.PDF
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" .
BarCodeTypeaday 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 birstring[]değişkenini belirleyinSpire.PDF'nin barkod çıkarımından başka işlemlerde kullanılıp kullanılmadığını doğrulayın
Kod Güncelleme Görevleri
FreeSpire.BarcodeveyaSpire.BarcodeNuGet paketini kaldırın- Barkod çıkarım, tek kullanım alanıysa
Spire.PDFNuGet paketini kaldırın IronBarcodeNuGet paketini kurun- Tüm
using Spire.Barcode;'leriusing IronBarCode;ile değiştirin - Artık gereksiz olan tüm
using Spire.Pdf;importlarını kaldırın - Lisans başlatmalarını değiştirin:
ApplyKey()veyaSetLicenseKey()ileIronBarCode.License.LicenseKey = "key" - Tüm
new BarcodeScanner()örneklemelerini kaldırın - Tüm
scanner.Scan(path, BarCodeType.X)çağrılarınıBarcodeReader.Read(path)ile değiştirin - Tür tahmin foreach döngülerini silin; her biri için tek bir
BarcodeReader.Read()çağrısıyla değiştirin - PDF sayfa yineleme ve resim çıkartım bloklarını kaldırın;
BarcodeReader.Read("file.pdf")ile değiştirin string[]sonuç atamalarını.Valueveya.Select(r => r.Value).ToArray()kullanarak güncelleyinnew BarcodeSettings()bloklarınıBarcodeWriter.CreateBarcode(data, encoding)zincirleriyle değiştirin- Tüm
new BarCodeGenerator(settings)örneklemelerini kaldırın .GenerateImage()+image.Save()'yi.SaveAsPng()veya.SaveAsJpeg()ile değiştirin- Üretimdeki
BarCodeType.Xnumaralandırması değerleriniBarcodeEncoding.Xile 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.
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.

