Aspose BarCode for .NET vs IronBarcode: C# Barkod Kütüphanesi Karşılaştırması
Aspose.BarCode kullanan her geliştirici, bu satırın bir sürümünü yazmıştır: new BarCodeReader(path, DecodeType.Code128). Formatın görüntüde ne olduğunu bildiğinizde bu gayet iyi çalışır. Bir belge harici bir sistemden geldiğinde, etiket formatını değiştiren bir tedarikçiden veya bir kullanıcı yüklemesi olduğunda, ya bir tahmin yapılır ya da DecodeType.AllSupportedTypes kullanılır ki bu genellikle Aspose'un kendi önerilerine göre daha yavaştır. Format-belirleme gereksinimi bir engel değildir ama kod tabanınızda her okuma işleminde biriken günlük bir sürtüşmedir.
PDF durumu bütçe hikayesidir. PDF belgelerinden barkod işliyorsanız, Aspose.BarCode bunu tek başına yapamaz. Sayfaları önce görüntülere dönüştürmek için Aspose.PDF for .NET gereklidir. Aspose.PDF, halihazırda Aspose.BarCode için ödediğiniz ücretin üstünde bir ayrı abonelik ürünüdür. Çoğu geliştiricinin tek bir görev olarak düşündüğü bir iş akışı için iki abonelik.
IronBarcode, barkod formatını otomatik olarak algılar, PDF'leri tek bir pakette yerel olarak okur ve 749 dolardan başlayan bir süresiz lisans sunar. Bu karşılaştırma, her iki kütüphaneyi de detaylı inceleyerek tam bir sonuç sunar.
Aspose.BarCode'u Anlamak
Aspose yıllardır .NET, Java ve diğer platformlar için belge işleme kütüphaneleri geliştiriyor. Aspose.BarCode, Aspose.Words, Aspose.Cells, Aspose.PDF, Aspose.Slides ve yaklaşık bir düzine diğerleriyle birlikte ailenin birçok ürününden biridir. Aspose.Total için zaten ödeme yapan ekipler için — Aspose ürünlerinin tümünü içeren paket — Aspose.BarCode ilave maliyetsiz gelir. Sadece bir barkod kütüphanesine ihtiyaç duyan ekipler için, abonelik modeli haklı çıkarmak daha zordur.
Aspose.BarCode, herhangi bir ticari .NET barkod kütüphanesindeki en eksiksiz format listelerinden biri olan 80'den fazla barkod sembolojiğini destekler. Bu genişlik kütüphanenin en güçlü satış noktasıdır. API yüzeyi de buna bağlı olarak büyük, ve özelliklerle birlikte API detaylılığı artar. Temel bir Code 128 barkodu oluşturmak, bir BarcodeGenerator örneği oluşturmayı, XDimension, BarHeight ve diğer parametreleri ayarlamayı ve ardından açık bir format argümanı ile Save çağrısını gerektirir. Okuma, arama yapılacak kod çözme türlerinin belirtilmesini ve ardından ReadBarCodes() tarafından döndürülen sonuçların yinelemeli bir şekilde kontrol edilmesini gerektirir. Her iki işlem de doğru bir şekilde çalışır — sadece olması gerekenden daha detaylıdırlar.
Aspose.BarCode'un kilit mimari özellikleri:
- Format-First Okuma Modeli: Her okuma işlemi,
DecodeTypeaçıkça belirtilmesini gerektirir. Geri dönüşDecodeType.AllSupportedTypesgenellikle hedefli bir listeye göre daha yavaştır çünkü kod çözücü, her bilinen semboloji üzerinden sıralı olarak çalışır. - Örnek Tabanlı API: Hem
BarCodeReaderhem deBarcodeGenerator,IDisposable'yi uygulayan örnek nesnelerdir. Bunlar, yerel kaynakları serbest bırakmak içinusingblokları içinde sarılmalıdır. - Yerel PDF Desteği Yoktur: Aspose.BarCode, PDF belgelerini doğrudan açamaz veya render edemez. PDF'lerden barkod okuması, ayrı bir abonelik ürünü olan Aspose.PDF gerektirir.
- Derin Parametre Hiyerarşisi: Özelleştirme, hafızada kalması gereken çok seviyeli bir nesne hiyerarşisi olan
generator.Parameters.Barcode.*özellik zincirleri üzerinden gerçekleştirilir. - Abonelik Lisanslaması: Aspose'un yayınladığı fiyatlara göre, geliştirici başına ve site basamakları yıllık aboneliklerdir; bağımsız bir süresiz seçenek listelenmemiştir.
- Dosya Tabanlı Lisans Aktivasyonu: Üretim dağıtımları, bilinen bir yolda erişilebilen bir
.licdosyası gerektirir ve bu da Docker ve Kubernetes ortamları için bir dağıtım adımı ekler.
Format-Önce Okuma Modeli
Aspose.BarCode'un okuma API'sı, arayanın barkod formatını bildiği varsayımına dayanır:
using Aspose.BarCode.BarCodeRecognition;
var reader = new BarCodeReader("barcode.png", DecodeType.Code128);
foreach (var result in reader.ReadBarCodes())
Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}");
using Aspose.BarCode.BarCodeRecognition;
var reader = new BarCodeReader("barcode.png", DecodeType.Code128);
foreach (var result in reader.ReadBarCodes())
Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}");
Imports Aspose.BarCode.BarCodeRecognition
Dim reader As New BarCodeReader("barcode.png", DecodeType.Code128)
For Each result In reader.ReadBarCodes()
Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}")
Next
Formatı bildiğinizde, bu desen uygundur. Sorun 'formatı bildiğinizde.' Tedarikçi faturalarını işleyen bir satın alma sistemi, her tedarikçinin aynı barkod türünü kullandığını garanti edemez. Kullanıcı yüklemelerini kabul eden bir belge yönetim sistemi, bir tarayıcının hangi formatı kullandığını tahmin edemez. Bu durumlarda, DecodeType.AllSupportedTypes bir geri dönüş olur ve genellikle hedefli bir kod çözme türü listesine göre daha yavaştır.
Dekoderin ayrıca imha edilmesi gerekir:
using var reader = new BarCodeReader("barcode.png", DecodeType.Code128);
using var reader = new BarCodeReader("barcode.png", DecodeType.Code128);
using kullanılmaması bir kaynak sızıntısıdır. BarcodeGenerator ayrıca IDisposable'yi de uygular, ancak bunun elden çıkarılmamasının sonuçları o kadar ağır değildir. Her iki durumda da, statik bir fabrika API'si otomatik olarak yürütülen nesne ömrü yönetiyorsunuz.
IronBarcode Anlama
IronBarcode hem okuma hem de yazma için statik fabrika yöntemlerini kullanır. Konstrükte edilecek, yapılandırılacak veya imha edilecek bir örnek yoktur. Okuma API'si varsayılan olarak format-agnostiktir ve kaynak dosyasının PNG, JPEG, TIFF veya PDF olup olmadığına bakılmaksızın aynı çağrı çalışır.
IronBarcode, .NET geliştirici araçlarına odaklanmış bir şirket olan Iron Software tarafından geliştirildi ve sürdürüldü. Kütüphane, barkod okumanın barkod formatı hakkında önceden bilgi gerektirmemesi ilkesine göre tasarlanmıştır - kütüphanenin algılama motoru, formatı görüntü içeriğinden belirler. Oluşturma için, akıcı bir yöntem zinciri diğer kütüphanelerde yaygın olan çok seviyeli parametre hiyerarşisinin yerini alır.
IronBarcode'un ana özellikleri:
- Otomatik Format Algılama:
BarcodeReader.Read(), arayanın birDecodeTypeeşdeğeri belirtmesini gerektirmeden, görüntü içeriğinden barkod sembolojisini tanımlar. - Statik Durumsuz API: Tüm okuma ve yazma işlemleri statik metodlardır. Yönetilecek atılabilir örneklere ihtiyaç yok, ve API doğal olarak eşzamanlı kullanım için iş parçacığı güvenlidir.
- Yerel PDF Destek:
BarcodeReader.Read("doc.pdf"), ek bir paket veya render adımına ihtiyaç duymadan doğrudan PDF dosyalarından okur. Sonuçlarresult.PageNumberiçerir. - Akıcı Üretim API'si:
BarcodeWriter.CreateBarcode(), zincirlenebilir bir nesne döndürür. Özelleştirme, bir özellik hiyerarşisinden ziyade metod zincirleme kullanır. - Süresiz Lisans Modeli: Tüm katmanlar, yıllık yenileme gereksinimi olmadan tek seferlik satın almalardır.
- Dize Tabanlı Lisans Aktivasyonu: Lisans anahtarı, ortam değişkenleri ve CI/CD gizli yöneticiyle uyumlu
IronBarCode.License.LicenseKeyüzerinden ayarlanır.
Özellik Karşılaştırması
| Özellik | Aspose.BarCode | IronBarcode |
|---|---|---|
| Format algılama | Manuel — DecodeType belirtilmeli veya yavaş AllSupportedTypes kullanılmalıdır |
Desteklenen tüm formatlarda otomatik |
| Sembol sayısı | 80+ | 50+ |
| PDF desteği | Yerel destek yok — ayrı Aspose.PDF lisansı gerektirir | Yerel — BarcodeReader.Read("doc.pdf") pakete entegre |
| Fiyatlandırma modeli | Yalnızca abonelik — yıllık katmanlar $999/yıl'dan | Süresiz $749'dan (tek seferlik) |
| Süresiz lisans | Mevcut değil | Evet, tüm katmanlar |
| API stili | Örnek-tabanlı, söylemli yapılandırma | Statik fabrika yöntemleri, akıcı API |
| IDisposable gereksinimi | Evet — BarCodeReader ve BarcodeGenerator |
Hayır — durumsuz statik metodlar |
| Thread güvenliği | Her iş parçacığı için ayrı örnekler gerekli | Statik API — threading kılavuzu için IronBarcode belgelerine bakın |
Ayrıntılı Özellik Karşılaştırması
| Özellik | Aspose.BarCode | IronBarcode |
|---|---|---|
| Üretim | ||
| API stili | new BarcodeGenerator(EncodeTypes.X, "data") |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.X) |
| Özelleştirme modeli | generator.Parameters.Barcode.* özellik hiyerarşisi |
Akıcı metot zinciri (.ResizeTo(), .ChangeBarCodeColor()) |
| Logolu QR kod | Oluşturmadan sonra manuel GDI+ üstü kaplama | .AddBrandLogo("logo.png") yerleşik |
| Baytlara çıktı | generator.GenerateBarCodeImage() |
.ToPngBinaryData() |
| Renkli barkodlar | generator.Parameters.Barcode.BarColor |
.ChangeBarCodeColor(Color.X) |
| Okuma | ||
| Biçim belirtimi | Gerekli (DecodeType) |
Gerekli değil — otomatik |
| Bilinmeyen-format geri dönüş | DecodeType.AllSupportedTypes (yavaş) |
Aynı çağrı — geri dönüş moduna gerek yok |
| Performans ayarı | QualitySettings parametre seti |
ReadingSpeed enum — üç seviyeli |
| Atılabilir okuyucu | Evet — using var reader = new BarCodeReader(...) |
Hayır — statik çağrı, atılacak nesne yok |
| Sonuç erişimi | Yinele reader.ReadBarCodes() |
Dönüş değeri BarcodeReader.Read() |
| Barkod değer özelliği | result.CodeText |
result.Value |
| Biçim adı özelliği | result.CodeTypeName |
result.Format.ToString() |
| PDF Desteği | ||
| Yerel PDF okuma | Hayır | Evet |
| PDF için gerekli | Aspose.PDF (ayrı abonelik) | Ek paket yok |
| Sonuçlarda sayfa numarası | Yok | result.PageNumber |
| Lisanslama | ||
| Lisans modeli | Sadece abonelik, yıllık yenileme | Süresiz, tek seferlik satın alma |
| Tek geliştirici | $999/yıl | $749 tek seferlik |
| 10 geliştirici | $4,995/yıl (Site lisansı) | $2,999 tek seferlik (Professional) |
| Sınırsız dağıtım (10 geliştirici) | $13,986/yıl (Site OEM) | $5,999 tek seferlik (Sınırsız) |
| PDF desteği dahil | Hayır — ayrı Aspose.PDF aboneliği | Evet |
| Platform ve Uygulama | ||
| Lisans aktivasyonu | .lic dosya yolu |
Dize anahtarı — ortam değişkeni |
| Docker dağıtımı | Görüntüye .lic dosyasını kopyalamalı veya bağlanmalıdır |
Ortam değişkeni — dosya gerekli değil |
| .NET Framework | Evet | Evet (4.6.2+) |
| .NET Core / .NET 5+ | Evet | Evet(.NET Core 3.1+, .NET 5/6/7/8) |
| Windows | Evet | Evet (x64/x86) |
| Linux | Evet | Evet (x64) |
| macOS | Evet | Evet (x64/ARM) |
| Docker | Evet | Evet |
| Azure / AWS Lambda | Evet | Evet |
Oluşturma API'si
Oluşturma API'si, iki kütüphane arasındaki ifadelerinin farklılıklarının günlük kodda en belirgin olduğu yerdir.
Aspose.BarCode Yaklaşımı
Aspose.BarCode, yapılandırma için BarcodeGenerator sınıfı ve Parameters hiyerarşisi kullanır. Minimal bir oluşturma çağrısı üç adım gerektirir - örnekleme, kaydetme çağrısı ve biçim belirtimi. Gerçek kullanım, genellikle generator.Parameters.Barcode.*'a girmeyi gerektirir:
using Aspose.BarCode.Generation;
using System.Drawing;
var generator = new BarcodeGenerator(EncodeTypes.Code128, "ITEM-12345");
// Common customizations require navigating a deep parameter hierarchy
generator.Parameters.Barcode.XDimension.Pixels = 2;
generator.Parameters.Barcode.BarHeight.Pixels = 100;
generator.Parameters.Barcode.CodeTextParameters.Location = CodeLocation.Below;
generator.Parameters.Barcode.CodeTextParameters.Font.FamilyName = "Arial";
generator.Parameters.Barcode.Padding.Left.Pixels = 10;
generator.Parameters.Barcode.Padding.Right.Pixels = 10;
generator.Parameters.BackColor = Color.White;
generator.Parameters.Resolution = 300;
generator.Save("barcode.png", BarCodeImageFormat.Png);
using Aspose.BarCode.Generation;
using System.Drawing;
var generator = new BarcodeGenerator(EncodeTypes.Code128, "ITEM-12345");
// Common customizations require navigating a deep parameter hierarchy
generator.Parameters.Barcode.XDimension.Pixels = 2;
generator.Parameters.Barcode.BarHeight.Pixels = 100;
generator.Parameters.Barcode.CodeTextParameters.Location = CodeLocation.Below;
generator.Parameters.Barcode.CodeTextParameters.Font.FamilyName = "Arial";
generator.Parameters.Barcode.Padding.Left.Pixels = 10;
generator.Parameters.Barcode.Padding.Right.Pixels = 10;
generator.Parameters.BackColor = Color.White;
generator.Parameters.Resolution = 300;
generator.Save("barcode.png", BarCodeImageFormat.Png);
Imports Aspose.BarCode.Generation
Imports System.Drawing
Dim generator As New BarcodeGenerator(EncodeTypes.Code128, "ITEM-12345")
' Common customizations require navigating a deep parameter hierarchy
generator.Parameters.Barcode.XDimension.Pixels = 2
generator.Parameters.Barcode.BarHeight.Pixels = 100
generator.Parameters.Barcode.CodeTextParameters.Location = CodeLocation.Below
generator.Parameters.Barcode.CodeTextParameters.Font.FamilyName = "Arial"
generator.Parameters.Barcode.Padding.Left.Pixels = 10
generator.Parameters.Barcode.Padding.Right.Pixels = 10
generator.Parameters.BackColor = Color.White
generator.Parameters.Resolution = 300
generator.Save("barcode.png", BarCodeImageFormat.Png)
Her özelleştirme generator.Parameters.Barcode.* içine girmeyi gerektirir, bu çok seviyeli bir nesne hiyerarşisidir. Ezberlediğinizde karmaşık değil — ama ezber gerektiriyor.
IronBarcode Yaklaşımı
IronBarcode, parametre hiyerarşisinin yerine akıcı bir yöntem zincirini getirir. Varsayılan ayarlar, çoğu kullanım durumu için doğru sonuçlar üretir ve özelleştirme satır içi ifade edilir.
using IronBarCode;
// Default settings work for most cases
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.SaveAsPng("barcode.png");
// Customization through a fluent chain
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
// Get as bytes instead of saving to disk
byte[] pngData = BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.ToPngBinaryData();
using IronBarCode;
// Default settings work for most cases
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.SaveAsPng("barcode.png");
// Customization through a fluent chain
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
// Get as bytes instead of saving to disk
byte[] pngData = BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.ToPngBinaryData();
Imports IronBarCode
' Default settings work for most cases
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
.SaveAsPng("barcode.png")
' Customization through a fluent chain
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.SaveAsPng("barcode.png")
' Get as bytes instead of saving to disk
Dim pngData As Byte() = BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
.ToPngBinaryData()
QR kodlar için, IronBarcode'un QR oluşturma API'si, elle görüntü kompozisyonu olmadan marka logosu desteği içerir.
using IronBarCode;
using IronSoftware.Drawing;
// With brand logo — built in, no manual image overlay needed
QRCodeWriter.CreateQrCode("https://example.com", 500)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded.png");
// With high error correction (recommended when using a logo)
QRCodeWriter.CreateQrCode(
"https://example.com",
500,
QRCodeWriter.QrErrorCorrectionLevel.Highest)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded-high-ecc.png");
// Colored QR code
QRCodeWriter.CreateQrCode("https://example.com", 300)
.ChangeBarCodeColor(Color.DarkBlue)
.SaveAsPng("qr-colored.png");
using IronBarCode;
using IronSoftware.Drawing;
// With brand logo — built in, no manual image overlay needed
QRCodeWriter.CreateQrCode("https://example.com", 500)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded.png");
// With high error correction (recommended when using a logo)
QRCodeWriter.CreateQrCode(
"https://example.com",
500,
QRCodeWriter.QrErrorCorrectionLevel.Highest)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded-high-ecc.png");
// Colored QR code
QRCodeWriter.CreateQrCode("https://example.com", 300)
.ChangeBarCodeColor(Color.DarkBlue)
.SaveAsPng("qr-colored.png");
Imports IronBarCode
Imports IronSoftware.Drawing
' With brand logo — built in, no manual image overlay needed
QRCodeWriter.CreateQrCode("https://example.com", 500) _
.AddBrandLogo("logo.png") _
.SaveAsPng("qr-branded.png")
' With high error correction (recommended when using a logo)
QRCodeWriter.CreateQrCode( _
"https://example.com", _
500, _
QRCodeWriter.QrErrorCorrectionLevel.Highest) _
.AddBrandLogo("logo.png") _
.SaveAsPng("qr-branded-high-ecc.png")
' Colored QR code
QRCodeWriter.CreateQrCode("https://example.com", 300) _
.ChangeBarCodeColor(Color.DarkBlue) _
.SaveAsPng("qr-colored.png")
Aspose.BarCode, QR kodları için tek çağrılı bir markalı logo yardımcısı göndermez; Belgelendirilmiş yaklaşım, barkod görüntüsünü oluşturmak ve ardından logoyu bunun üzerine kompozit etmektir (örneğin System.Drawing.Graphics ile). IronBarcode'un AddBrandLogo, kompoziti bir çağrıda halleder ve hataları düzeltme düzeltmeyi otomatik olarak ayarlar.
PDF Barkod Okuma
Birçok ekip için, bu en önemli karşılaştırmadır. PDF belgelerinden barkod okuması, ortak bir iş akışıdır: gelen faturalar, PDF olarak kaydedilmiş gönderi etiketleri, taranmış belge arşivleri.
Aspose.BarCode Yaklaşımı
Aspose.BarCode'un yerel PDF desteği yok. Bir PDF ile bir barkod okumak için Aspose, PDF'yi yüklemek ve sayfaları görsellere dönüştürmek için Aspose.PDF'ye ve bu işlenmiş görselleri taramak için Aspose.BarCode'a ihtiyaç duyar. Her ikisi de abonelik ürünleridir. Her ikisi de lisans aktivasyonu gerektirir. Çoğu geliştiricinin tek bir yetenek olarak düşündüğü iki yıllık abonelik ödüyorsunuz.
// Requires both Aspose.PDF (separate license) and Aspose.BarCode
using Aspose.Pdf;
using Aspose.Pdf.Devices;
using Aspose.BarCode.BarCodeRecognition;
using System.IO;
public List<string> ReadBarcodesFromPdf(string pdfPath)
{
var barcodeValues = new List<string>();
// Step 1: Load and render the PDF using Aspose.PDF
var pdfDocument = new Aspose.Pdf.Document(pdfPath);
var resolution = new Resolution(300);
var device = new PngDevice(resolution);
for (int pageNum = 1; pageNum <= pdfDocument.Pages.Count; pageNum++)
{
using var pageStream = new MemoryStream();
device.Process(pdfDocument.Pages[pageNum], pageStream);
pageStream.Seek(0, SeekOrigin.Begin);
// Step 2: Scan the rendered image for barcodes using Aspose.BarCode
using var reader = new BarCodeReader(pageStream, DecodeType.AllSupportedTypes);
foreach (var result in reader.ReadBarCodes())
{
barcodeValues.Add(result.CodeText);
}
}
return barcodeValues;
}
// Requires both Aspose.PDF (separate license) and Aspose.BarCode
using Aspose.Pdf;
using Aspose.Pdf.Devices;
using Aspose.BarCode.BarCodeRecognition;
using System.IO;
public List<string> ReadBarcodesFromPdf(string pdfPath)
{
var barcodeValues = new List<string>();
// Step 1: Load and render the PDF using Aspose.PDF
var pdfDocument = new Aspose.Pdf.Document(pdfPath);
var resolution = new Resolution(300);
var device = new PngDevice(resolution);
for (int pageNum = 1; pageNum <= pdfDocument.Pages.Count; pageNum++)
{
using var pageStream = new MemoryStream();
device.Process(pdfDocument.Pages[pageNum], pageStream);
pageStream.Seek(0, SeekOrigin.Begin);
// Step 2: Scan the rendered image for barcodes using Aspose.BarCode
using var reader = new BarCodeReader(pageStream, DecodeType.AllSupportedTypes);
foreach (var result in reader.ReadBarCodes())
{
barcodeValues.Add(result.CodeText);
}
}
return barcodeValues;
}
Imports Aspose.Pdf
Imports Aspose.Pdf.Devices
Imports Aspose.BarCode.BarCodeRecognition
Imports System.IO
Public Function ReadBarcodesFromPdf(pdfPath As String) As List(Of String)
Dim barcodeValues As New List(Of String)()
' Step 1: Load and render the PDF using Aspose.PDF
Dim pdfDocument As New Aspose.Pdf.Document(pdfPath)
Dim resolution As New Resolution(300)
Dim device As New PngDevice(resolution)
For pageNum As Integer = 1 To pdfDocument.Pages.Count
Using pageStream As New MemoryStream()
device.Process(pdfDocument.Pages(pageNum), pageStream)
pageStream.Seek(0, SeekOrigin.Begin)
' Step 2: Scan the rendered image for barcodes using Aspose.BarCode
Using reader As New BarCodeReader(pageStream, DecodeType.AllSupportedTypes)
For Each result In reader.ReadBarCodes()
barcodeValues.Add(result.CodeText)
Next
End Using
End Using
Next
Return barcodeValues
End Function
Bu, iki lisans kurulumu, iki isim alanından iki using beyanı, bir render kanalı, bellek akışı yönetimi ve iç içe bir döngüdür. Ayrıca DecodeType.AllSupportedTypes kullanır çünkü görüntü alımı noktasında barkodun hangi formatı kullandığını genellikle bilmezsiniz.
IronBarcode Yaklaşımı
IronBarcode, PDF ayrıştırmasını, sayfa işlemesini ve barkod tespitini dahili olarak halleder. Read, sonu .pdf biten bir yolla çağırılır ve bu barkod sonuçlarını döndürür ve her birinin hangi sayfadan geldiğini gösteren result.PageNumber dahil eder. İkinci bir paket yok, ikinci bir lisans yok, işleme kodu yok.
using IronBarCode;
public List<string> ReadBarcodesFromPdf(string pdfPath)
{
var results = BarcodeReader.Read(pdfPath);
return results.Select(r => r.Value).ToList();
}
using IronBarCode;
public List<string> ReadBarcodesFromPdf(string pdfPath)
{
var results = BarcodeReader.Read(pdfPath);
return results.Select(r => 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) r.Value).ToList()
End Function
// With page number context
var results = BarcodeReader.Read("invoice-batch.pdf");
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: [{barcode.Format}] {barcode.Value}");
}
// With page number context
var results = BarcodeReader.Read("invoice-batch.pdf");
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: [{barcode.Format}] {barcode.Value}");
}
Imports System
' With page number context
Dim results = BarcodeReader.Read("invoice-batch.pdf")
For Each barcode In results
Console.WriteLine($"Page {barcode.PageNumber}: [{barcode.Format}] {barcode.Value}")
Next
IronBarcode PDF okuma dokümantasyonu, çok sayfalı toplu işleme ve sayfa aralık filtresi seçeneklerini kapsar.
Bilinmeyen Barkod Formatlarını Okuma
Bir görüntünün hangi barkod formatını içerdiğini bilmediğinizde, iki kütüphane durumu farklı şekilde ele alır.
Aspose.BarCode Yaklaşımı
DecodeType.AllSupportedTypes, format bilinmeyen senaryolar için Aspose'un çözümüdür. Aspose'un kendi belgeleri, hedeflenen bir listeyi belirtmek yerine daha yavaş olduğunu kabul eder, çünkü kod çözücü her bilinen sembolojiyi sıralı olarak çalıştırır. Yüksek hacimli işlem için — bir depo dakikada binlerce etiketi taradığında — bu performans farkı hafife alınamaz.
using Aspose.BarCode.BarCodeRecognition;
using var reader = new BarCodeReader("unknown-format.png");
reader.SetBarCodeReadType(DecodeType.AllSupportedTypes);
foreach (var result in reader.ReadBarCodes())
{
Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}");
}
using Aspose.BarCode.BarCodeRecognition;
using var reader = new BarCodeReader("unknown-format.png");
reader.SetBarCodeReadType(DecodeType.AllSupportedTypes);
foreach (var result in reader.ReadBarCodes())
{
Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}");
}
Imports Aspose.BarCode.BarCodeRecognition
Using reader As New BarCodeReader("unknown-format.png")
reader.SetBarCodeReadType(DecodeType.AllSupportedTypes)
For Each result In reader.ReadBarCodes()
Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}")
Next
End Using
IronBarcode Yaklaşımı
Format bilgisine dayalı bir "yavaş mod" ve "hızlı mod" yok. IronBarcode'un algılaması, görüntü bir Code 128 veya bir DataMatrix içerse de aynı algoritmayı çalıştırır. Performans ve doğruluk arasındaki dengeyi ayarlamak istiyorsanız, ReadingSpeed seçeneği format bilgisi gerektirmeksizin bunu yapar:
using IronBarCode;
// The same call regardless of format — always auto-detects
var results = BarcodeReader.Read("unknown-format.png");
foreach (var result in results)
{
Console.WriteLine($"{result.Format}: {result.Value}");
}
using IronBarCode;
// The same call regardless of format — always auto-detects
var results = BarcodeReader.Read("unknown-format.png");
foreach (var result in results)
{
Console.WriteLine($"{result.Format}: {result.Value}");
}
Imports IronBarCode
' The same call regardless of format — always auto-detects
Dim results = BarcodeReader.Read("unknown-format.png")
For Each result In results
Console.WriteLine($"{result.Format}: {result.Value}")
Next
using IronBarCode;
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
MaxParallelThreads = 4
};
var results = BarcodeReader.Read("document.png", options);
using IronBarCode;
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
MaxParallelThreads = 4
};
var results = BarcodeReader.Read("document.png", options);
Imports IronBarCode
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True,
.MaxParallelThreads = 4
}
Dim results = BarcodeReader.Read("document.png", options)
ReadingSpeed.Faster, verimi önceliklendirir. ReadingSpeed.Detailed, hasarlı veya düşük kontrastlı görüntülerde doğruluğu önceliklendirir. Hiçbiri formatı önceden bilmenizi gerektirmez. Tam tuning parametre dizisi için IronBarcode okuma seçeneklerine bakın.
API Eşleme Başvurusu
| Aspose.BarCode | IronBarcode |
|---|---|
new BarcodeGenerator(EncodeTypes.Code128, "data") |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) |
generator.Save("file.png", BarCodeImageFormat.Png) |
.SaveAsPng("file.png") |
new BarCodeReader(path, DecodeType.Code128) |
BarcodeReader.Read(path) |
DecodeType.AllSupportedTypes (yavaş, kapsamlı tarama) |
Otomatik — her zaman hızlı, tüm formatlar için aynı çağrı |
reader.ReadBarCodes() |
(part of BarcodeReader.Read — returns results directly) |
Yineleme reader.ReadBarCodes() |
Dönüş değeri BarcodeReader.Read |
result.CodeText |
result.Value |
result.CodeTypeName |
result.Format.ToString() |
result.Confidence |
result.Confidence |
Aspose.BarCode + Aspose.PDF for PDF reading |
BarcodeReader.Read("doc.pdf") — tek paket |
license.SetLicense("Aspose.BarCode.lic") |
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY" |
new Aspose.BarCode.Metered() + .SetMeteredKey() |
(not needed — single key covers all environments) |
generator.GenerateBarCodeImage() |
.ToPngBinaryData() veya .SaveAsPng() |
QREncodeMode.Auto + QRErrorLevel.LevelH + manuel logo kaplaması |
QRCodeWriter.CreateQrCode().AddBrandLogo() |
Takımlar Aspose.BarCode'dan IronBarcode'a Geçişi Düşündüğünde
Geliştirme takımlarının IronBarcode'u Aspose.BarCode için bir alternatif olarak değerlendirmesine genellikle birkaç senaryo yol açar.
Abonelik Yenileme Geldiğinde
Yıllık abonelik yenileme, ekiplerin kütüphane kararlarını en sık gözden geçirdiği zamandır. Yığınla Aspose.BarCode'un yer aldığı tek Aspose ürünü ise, geliştirici başına yıllık $999 (veya Site seviyesinde yıllık $4,995) ödeme bar barkod fonksiyonelliği bir karşılaştırmayı teşvik eder. Sohbet genellikle şöyle devam eder: "Her yıl bunun için sonsuza kadar ödeme yapmaktayız. IronBarcode'un maliyeti ne kadar?" Professional katmanı için ($2,999, 10 geliştirici), IronBarcode, Site lisansına karşı ilk yıl içinde kendini amorti eder.
Aspose.Total kullanan ekipler için — Aspose.BarCode'un birçok diğer Aspose ürünleriyle paketlenmiş olduğu süreç — matematik farklıdır. Bu pakette Aspose.BarCode'un marjinal maliyeti sıfıra yaklaşır. Bu takımların geçiş yapması için daha az neden vardır.
PDF Desteği Gereklilik Olduğunda
Birçok projenin başlangıçta görsellerden barkod okuma ile başladığı ve daha sonra bir paydaşın içeriğindeki belgelerin görüntü dosyaları yerine PDF olduğunu fark ettiğinde PDF desteği eklediği görülür. Bu noktada, bir Aspose.BarCode takımı bir karar vermekle karşıya kalır: Aspose.PDF eklemek (başka bir abonelik), üçüncü taraf bir PDF çözümleyici bulmak veya barkod kütüphanesini yeniden değerlendirmek.
Aspose.PDF eklemek anında gereksinimi çözer ancak bu bir ikinci yıllık abonelik anlamına gelir. Üçüncü taraf bir işleyici bulmak bir bağımlılık ve entegrasyon çabası ekler. Barkod kütüphanesini yeniden değerlendirmek ve IronBarcode'un bir kerelik bir ücret karşılığında doğal olarak PDF okuduğunu keşfetmek genellikle sonuçtur.
Üretimde Formatı Bilinmeyen Senaryolar
Son kullanıcıya yönelik uygulamalarda belge yüklemeleri kabul edildiğinde, yüklenen belgenin hangi barkod formatını kullandığını kontrol edemezler. Uygulama Code 128 verilerine dayalı olarak oluşturulduysa ve bir müşteri bir DataMatrix etiketi yüklüyorsa, sabit bir DecodeType.Code128 sessizce hiçbir sonuç vermeden döner. DecodeType.AllSupportedTypes değiştirmek doğru çalışmayı sağlar ancak performans maliyeti getirir.
Bu sorunla karşılaşan ekipler — üretimde yeni formatlar ortaya çıktıkça okuyucu yapılandırmalarına sürekli daha fazla DecodeType değeri eklenir — genellikle yeni bir format kaynağı eklendiğinde güncellenmesi gereken bir listeyi sürdürür. IronBarcode'un otomatik algılaması bu listeyi gereksiz hale getirir.
Bulut ve Konteynerleştirilmiş Dağıtımlar
Aspose.BarCode'un dosya tabanlı lisanslaması bir dağıtım adımı ekler: lisans dosyası, zamanında erişilebilen bir yolda, uygulama tarafından okunabilir olmalıdır. Bir GitOps iş akışında, lisans dosyası ya kaynak kontrolünde (bir güvenlik riski) bulunur ya da monte edilmiş bir gizli hacim üzerinden enjekte edilmelidir. IronBarcode'un anahtar tabanlı yaklaşımı, Kubernetes güvenlikleri ve CI/CD gizli değişkenlerine temiz bir şekilde uyar ve konteyner görüntüsünde yönetilecek bir dosya yoktur.
Genel Geçiş Dikkat Edilmesi Gereken Hususlar
Aspose.BarCode'dan IronBarcode'a geçiş yapan takımlar, öngörülebilir küçük bir teknik ayarlama setiyle karşılaşır.
Özellik Adı Eşleme
Paket değiştirdikten sonra en yaygın derleme hatası, result.CodeText ile result.Value arasında yapılan ad değişikliğidir. Tüm kod tabanında arama yapıldığında, bu hızlıca kapsanır:
grep -r "\.CodeText" --include="*.cs" .
grep -r "\.CodeTypeName" --include="*.cs" .
grep -r "\.CodeText" --include="*.cs" .
grep -r "\.CodeTypeName" --include="*.cs" .
result.CodeText, result.Value olur. result.CodeTypeName, result.Format.ToString() olur. result.Format özelliği, aynı zamanda gerekli olduğunda yazılı karşılaştırmalara izin veren bir BarcodeEncoding enum değeridir.
DecodeType Kaldırma
Kod tabanındaki her DecodeType.* referansı kaldırılabilir:
grep -r "DecodeType\." --include="*.cs" .
grep -r "DecodeType\." --include="*.cs" .
Bilinen bir formatta performansı artırmak için belirli bir DecodeType listelendiyse, ReadingSpeed.Faster içinde BarcodeReaderOptions format bilgisi gereksinimi olmadan benzer bir fayda sağlar.
Lisans Başlatma Değişikliği
Aspose.BarCode, .lic dosyasını license.SetLicense() üzerinden yükler. IronBarcode, bir dize anahtarı kullanır:
IronBarCode.License.LicenseKey =
Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
?? throw new InvalidOperationException("IronBarcode license key not configured");
IronBarCode.License.LicenseKey =
Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
?? throw new InvalidOperationException("IronBarcode license key not configured");
Imports IronBarCode
Imports System
License.LicenseKey = If(Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE"), Throw New InvalidOperationException("IronBarcode license key not configured"))
Depodan ve oluşturma eserlerinden .lic dosyasını kaldırın. Docker'da, COPY Aspose.BarCode.lic satırını kaldırın ve ENV IRONBARCODE_LICENSE girdisini ekleyin.
EncodeTypes'tan BarcodeEncoding'e Eşleme
EncodeTypes.QR, BarcodeEncoding.QRCode ile eşleşir — isim farkı, daha önce göç edilen oluşturma kodundan sonra ekiplerin genellikle ilk derleme hatasıyla karşılaştığı yerdir. Diğer birçok eşleme, dolaysız eşdeğerlerdir ve tutarlı isimlendirilmiştir.
Ek IronBarcode Yetenekleri
Ana karşılaştırma noktalarının ötesinde, IronBarcode, uygulama bağlamına bağlı olarak ilgili olabilecek yetenekler sağlar:
- Resim başına Çoklu Barkod Algılama:
ExpectMultipleBarcodes = truebir görüntüde bulunan tüm barkodları ve her biri için konum koordinatlarını döndürür. - PDF'lere barkod damgalama: Mevcut PDF sayfalarına doğrudan barkod yazın, ayrı bir PDF kütüphanesine ihtiyaç duymadan.
- TIFF çoklu-çerçeve okuma : Çok sayfalı bir TIFF'teki tüm çerçevelerden barkodları tek bir çağrıda okuyun.
- Stilize QR kodları: Renk, logo ve hata düzeltme seviyesi, harici görüntü işleme olmadan akıcı zincir üzerinden ayarlanır.
- Azure Functions ve AWS Lambda desteği: Her iki platformda da sunucusuz dağıtımlar standart lisansla desteklenir.
- İkili veri kodlaması: Veri yükü kullanım durumları için byte dizilerini Data Matrix veya PDF417 barkodlarına doğrudan kodlayın.
.NET Uyumluluğu ve Geleceğe Hazırlık
IronBarcode, .NET Framework 4.6.2+, .NET Core 3.1+, ve .NET 5, 6, 7, ve 8'i destekler. Kütüphane, Microsoft'un .NET sürüm döngüsüyle uyumlu olarak düzenli güncellemeler alır. Aspose.BarCode, karşılaştırılabilir bir .NET sürüm aralığını destekler, dolayısıyla hiçbiri mevcut sürümlerde uyumluluk avantajı sunmaz. Gelecek hazır olma açısından anlamlı fark, lisanslamadır: Bugün satın alınan bir IronBarcode süresiz lisansı, ek maliyet olmadan gelecekteki .NET sürümlerini kapsar; Aspose.BarCode abonelikleri ise güncellenmiş derlemelere erişim için sürekli yenileme gerektirir.
Sonuç
Aspose.BarCode ve IronBarcode, barkod kütüphanesi tasarımında iki farklı felsefeyi temsil eder. Aspose.BarCode, çağıranın formatı belirttiği, nesne ömür sürelerini yönettiği ve her işlemi bir özellik hiyerarşisi aracılığıyla yapılandırdığı açık, örnek tabanlı bir API üzerine kurulmuştur. IronBarcode, algılamayı, nesne ömür döngüsünü ve PDF işlemesini dahili olarak kütüphane tarafından ele alan statik, format-agnostik bir API üzerine kuruludur. Hiçbir yaklaşım doğası gereği doğru değildir — doğru seçim, uygulamanın ihtiyaçlarına bağlıdır.
Aspose.BarCode, zaten Aspose ekosisteminde çalışan ekipler için daha güçlü bir seçimdir. Aspose.Total zaten lisanslanmışsa, Aspose.BarCode marjinal bir maliyet eklemez ve 80+ semboloji listesi, herhangi bir ticari .NET barkod kütüphanesindeki mevcut en genişlerden biridir. Sıradışı formatlar — MaxiCode, DotCode veya IronBarcode'un 50+ listesinde olmayan belirli posta sembolojileri gerektiren uygulamalar için — Aspose.BarCode tek geçerli seçenek olabilir. Olgunluğu ve format genişliği, gerçek güçleridir.
Aspose.BarCode'u bağımsız bir satın alma olarak değerlendiren ekipler için değer hesaplaması daha zor yapılır. Format belirtimi gereksinimi her okuma işlemi için sürtüşme ekler. Yerel PDF desteğinin olmaması, IronBarcode'un temel paketine dahil ettiği bir yetenek için abonelik maliyetini iki katına çıkarır. Ve abonelik modeli, maliyetin yıllık olarak birikmesine neden olur — 10 geliştirici ekip için yılda $4,995 beş yılda $24,975'e ulaşırken,IronBarcode Professional için tek seferlik $2,999 satın alma ile kıyaslanır. IronBarcode'un otomatik algılaması, yerel PDF okuması ve süresiz lisansı, bu üç endişeyi tek bir pakette çözer.
Karar, nihayetinde ekosistem uyumu ve semboloji gereksinimlerine bağlıdır. Aspose ürünlerine derinlemesine entegre olmuş ekipler veya IronBarcode'un desteklediği liste dışındaki formatlara ihtiyaç duyan ekipler Aspose.BarCode'a aittir. Bağımsız bir sürekli lisans, yerel PDF okuma ve her okumada format bilgisi gerektirmeyen bir API isteyen ekipler, IronBarcode'u daha pratik bir seçenek olarak bulacaktır.
Sıkça Sorulan Sorular
Aspose.BarCode for .NET nedir?
Aspose.BarCode for .NET, C# uygulamalarında barkod oluşturma ve okuma için bir .NET barkod kütüphanesidir. Geliştiricilerin .NET projeleri için barkod çözümü seçerken değerlendirdiği birkaç alternatiften biridir.
Aspose.BarCode for .NET ile IronBarcode arasındaki temel farklar nelerdir?
IronBarcode, örnek yönetimi gerektirmeyen statik, durumsuz bir API kullanırken, Aspose.BarCode for .NET genellikle kullanım öncesi örnek oluşturma ve yapılandırmayı gerektirir. IronBarcode ayrıca tüm ortamlarda yerel PDF desteği, otomatik format algılama ve tek anahtar lisans sunar.
IronBarcode, Aspose.BarCode for .NET'e göre lisanslanması daha kolay mı?
IronBarcode hem geliştirme hem de üretim dağıtımlarını kapsayan tek bir lisans anahtarı kullanır. Bu, SDK anahtarlarını çalışma zamanı anahtarlarından ayıran lisanslama sistemlerine kıyasla CI/CD hatlarını ve Docker yapılandırmalarını basitleştirir.
IronBarcode, Aspose.BarCode for .NET'in desteklediği tüm barkod formatlarını destekliyor mu?
IronBarcode, QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztek, EAN-13, UPC-A, GS1 ve daha birçokları dahil olmak üzere 30'dan fazla barkod sembolojisini destekler. Format otomatik algılama, açıkça format sayımını gerektirmez.
IronBarcode doğal PDF barkod okuma desteği sunuyor mu?
Evet. IronBarcode, ayrı bir PDF render kütüphanesi gerektirmeden, BarcodeReader.Read('document.pdf') kullanarak PDF dosyalarından doğrudan barkod okur. Sayfa bazında sonuçlar sayfa numarası, barkod formatı, değeri ve güven puanını içerir.
IronBarcode, Aspose.BarCode for .NET'e kıyasla toplu işlemi nasıl ele alır?
IronBarcode'un statik yöntemleri durum terkibesizdir ve doğal olarak thread-safe'dir, bu da thread başına örnek yönetimi olmadan Parallel.ForEach'in doğrudan kullanımına olanak tanır. Herhangi bir fiyatlandırma seviyesinde bir throughput tavanı yoktur.
IronBarcode hangi .NET sürümlerini destekliyor?
IronBarcode, .NET Framework 4.6.2+, .NET Core 3.1 ve .NET 5, 6, 7, 8 ve 9'u tek bir NuGet paketinde destekler. Platform hedefleri arasında Windows x64/x86, Linux x64 ve macOS x64/ARM bulunur.
Bir .NET projesine IronBarcode'u nasıl kurarım?
IronBarcode'u NuGet üzerinden kurun: Paket Yöneticisi Konsolunda 'Install-Package IronBarCode' komutunu veya CLI'da 'dotnet add package IronBarCode' komutunu çalıştırın. Ek bir SDK yükleyicisi veya çalışma zamanı dosyası gerekmez.
IronBarcode'u satın almadan önce değerlendirebilir miyim, Aspose.BarCode'un aksine?
Evet. IronBarcode'un deneme modu, yalnızca oluşturulan çıktı görüntülerine bir filigran ekleyerek, barkod değerlerini tam olarak döndürür. Satın almadan önce, kendi belgelerinizde okuma doğruluğunu kıyaslayabilirsiniz.
Aspose.BarCode for .NET ile IronBarcode arasındaki fiyat farkı nedir?
IronBarcode, geliştirme ve üretimi kapsayan, sürekli bir tek geliştirici lisansı için $749'dan başlar. Fiyat detayları ve hacim seçenekleri IronBarcode lisanslama sayfasında mevcuttur. Ayrı bir çalışma zamanı lisansı gerekliliği yoktur.
Aspose.BarCode for .NET'ten IronBarcode'a geçiş yapmak kolay mı?
Aspose.BarCode for .NET'ten IronBarcode'a geçiş esas olarak, örnek tabanlı API çağrılarını IronBarcode'un statik yöntemleriyle değiştirmeyi, lisans gerekliliklerini kaldırmayı ve sonuç özelliği adlarını güncellemeyi içerir. Çoğu geçiş, kodun azaltılmasını içerir, eklenmesini değil.
IronBarcode, logolu QR kodları üretebiliyor mu?
Evet. QRCodeWriter.CreateQrCode().AddBrandLogo('logo.png'), konfigüre edilebilir hata düzeltme ile QR koduna yerel olarak bir marka görüntüsü yerleştirir. Renkli QR kodları, ChangeBarCodeColor() ile de desteklenir.

