Aspose.BarCode for .NET ve IronBarcode: C# Barkod Kütüphanesi Karşılaştırması
Aspose.BarCode'u kullanan her geliştirici bu satırın bir versiyonunu yazmıştır: new BarCodeReader(path, DecodeType.Code128). Ne tur bir görüntü formatı olduğunu bilmiyor insan çalıştığında iyi calişir. Bir belge dış bir sistemden geldiğinde, bir tedarikçi etiket formatını değiştirdiğinde veya bir kullanıcı yüklemesi olduğunda, decode tipi listesini tahmin eder veya DecodeType.AllSupportedTypes seçersiniz, bu fark edilir derecede daha yavaştır. Format belirtimi gereksinimi bir durdurucu değildir, ama kod tabanınızdaki her okuma eylemine yayilan günlük bir sürtüşmedir.
PDF hikayesi, bütce hikayesidir. PDF belgelerinden barkod işlerseniz, Aspose.BarCode'un tek başına yapamadiği bir seydir. Önce sayfaları görüntüye cevirmeniz için Aspose.PDF for .NET gerekir. Aspose.PDF, Aspose.BarCode icin zaten ödediğinizin üzerine yıllık 999-4.995 ABD Dolarıdır. Cogu geliştiricinin bir iş olarak dusundugu bir iş akışı için iki abone.
IronBarcode, barkod formatını otomatik olarak algilar, tek bir paket icinde dogal olarak PDF'leri okur, ve $749'dan başlayan kalıcı bir lisans sunar. Bu karşılaştırma her iki kutuphaneyi detaylı olarak inceler, böylece bilgili bir secim yapabilirsiniz.
Aspose.BarCode'u Anlamak
Aspose, yıllardır .NET, Java ve diğer platformlar icin belge işlemi kutuphaneleri uretiyor. Aspose.BarCode, ailenin bircok urunlerinden biri, Aspose.Words, Aspose.Cells, Aspose.PDF, Aspose.Slides ve başka bir düzine ürünle birlikte. Aspose.Total icin zaten ödeme yapan takimlar icin - tüm Aspose urunlerini içeren paket - Aspose.BarCode, marjinal bir maliyet olmadan gelir. Sadece bir barkod kutuphanesine ihtiyaç duyan takimlar icin, abone modeli haklı cikar.
Aspose.BarCode, ticari bir .NET barkod kutuphanesinin en geniş format listesini oluşturan 60'tan fazla barkod semorerini destekler. Bu genişlik, kutuphanin en güclü satis noktasıdır. API yüzeyi, buna baglı olarak buyuktur ve özelliklerle API ayrıntısı artar. Temel bir Code 128 barkodu oluşturmak BarcodeGenerator'ı örneklemeyi, XDimension, BarHeight ve diğer parametreleri ayarlamayı, ardından belirli bir format argümanı ile Save çağırmayı gerektirir. Okuma, aranacak decode türlerini belirlemeyi, ReadBarCodes() çağırmayı ve ardından FoundBarCodes yinelemeyi gerektirir. Her iki işlem de doğru çalışır — sadece gerektiğinden daha ayrıntılıdır.
Aspose.BarCode'un ana mimari özellikleri:
- Format-Öncelikli Okuma Modeli: Her okuma işlemi
DecodeTypebelirtilmesini gerektirir. YedekDecodeType.AllSupportedTypeshedefli bir listeden çok daha yavaştır çünkü decoder her bilinen sembolojiyi sırasıyla çalıştırır. - Örnek Tabanlı API: Hem
BarCodeReaderhem deBarcodeGenerator,IDisposable'i uygulayan örneklenmiş nesnelerdir. Bunlarıusingblokları içine sarmamak, kaynak sızıntılarına yol açar. - Yerli PDF Desteği Yok: Aspose.BarCode doğrudan PDF belgelerini açamaz veya işleyemez. PDF'lerden barkod okumak, yıllık 999$–4.995$ fiyatla ayrı bir abonelik ürünü olan Aspose.PDF'yi gerektirir.
- Derin Parametre Hiyerarşisi: Özelleştirme
generator.Parameters.Barcode.*özellik zincirleri ile ele alınır — ezber gerektiren çok seviyeli bir nesne hiyerarşisi. - Yalnızca Abonelik Lisanslaması: Tüm katmanlar yıllık aboneliklerdir. Bağımsız bir ürün olarak sürekli bir seçenek mevcut değildir.
- Dosya Tabanlı Lisans Aktivasyonu: Üretim dağıtımları belirli bir yolda erişilebilir bir
.licdosyası gerektirir, bu daDockerve Kubernetes ortamları için bir dağıtım adımı ekler.
Format-Öncelikli Okuma Modeli
Aspose.BarCode'un okuma API'si, arayanın barkod formatını bildiğini varsayımı etrafında inşa edilmiştir:
// Aspose.BarCode: must specify format or use slow AllSupportedTypes
using Aspose.BarCode.BarCodeRecognition;
var reader = new BarCodeReader("barcode.png", DecodeType.Code128);
reader.ReadBarCodes();
foreach (var result in reader.FoundBarCodes)
Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}");
// Aspose.BarCode: must specify format or use slow AllSupportedTypes
using Aspose.BarCode.BarCodeRecognition;
var reader = new BarCodeReader("barcode.png", DecodeType.Code128);
reader.ReadBarCodes();
foreach (var result in reader.FoundBarCodes)
Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}");
Imports Aspose.BarCode.BarCodeRecognition
' Aspose.BarCode: must specify format or use slow AllSupportedTypes
Dim reader As New BarCodeReader("barcode.png", DecodeType.Code128)
reader.ReadBarCodes()
For Each result In reader.FoundBarCodes
Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}")
Next
Formatı bildiğinizde bu model iyidir. Sorun "formatı bildiğinizde" ortaya çıkar. Tedarikçinin 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 yedek olarak kullanılır ve hedefli bir çözüm tip listesinden çok daha yavaştır.
Kod çözücü de bertaraf edilmelidir:
using var reader = new BarCodeReader("barcode.png", DecodeType.Code128);
using var reader = new BarCodeReader("barcode.png", DecodeType.Code128);
using kullanmamak bir kaynak sızıntısıdır. BarcodeGenerator ayrıca IDisposable'i uygular, ancak onu serbest bırakmamanın sonuçları daha az ciddidir. Her iki durumda da, bir statik fabrika API'sinin otomatik olarak yöneteceği nesne ömürlerini yönetiyorsunuz.
IronBarcode'u Anlamak
IronBarcode, hem okuma hem de yazma için statik fabrika yöntemleri kullanır. Oluşturulacak, yapılandırılacak veya bertaraf edilecek bir örnek yoktur. Okuma API'si varsayılan olarak format-agnostiktir ve kaynak dosya bir PNG, JPEG, TIFF veya PDF olsa da aynı çağrı çalışır.
IronBarcode, yalnızca .NET geliştirici araçlarına odaklanan Iron Software tarafından geliştirilmekte ve korunmaktadır. Kütüphane, barkod okumanın barkod formatı hakkında önceki bilgi gerektirmemesi gerektiği prensibi etrafında tasarlanmıştır; kütüphanenin algılama motoru formatı görüntü içeriğinden belirler. Üretim için, diğer kütüphanelerde yaygın olan çok seviyeli parametre hiyerarşisinin yerini akıcı bir yöntem zinciri alır.
IronBarcode'un ana özellikleri:
- Otomatik Format Tespiti:
BarcodeReader.Read(), arayanınDecodeTypeeşdeğerini belirtmesini gerektirmeden görüntü içeriğinden barkod sembolojisini tanımlar. - Statik Durumsuz API: Tüm okuma ve yazma işlemleri statik yöntemlerdir. Yönetilecek bertaraf edilebilir örnekler yoktur ve API doğal olarak eşzamanlı kullanım için iş parçacığı güvenlidir.
- Yerel PDF Desteği:
BarcodeReader.Read("doc.pdf"), herhangi ek bir paket veya render adımı olmadan doğrudan PDF dosyalarından okur. Sonuçlarresult.PageNumberiçerir. - Akıcı Jenerasyon API:
BarcodeWriter.CreateBarcode()zincirlenebilir bir nesneyi döndürür. Özelleştirme, bir özellik hiyerarşisi yerine yöntem zincirleme kullanır. - Sürekli Lisans Modeli: Tüm katmanlar, yıllık yenileme gereksinimi olmadan bir defalık satın alma sunar.
- Dizi Tabanlı Lisans Aktivasyonu: Lisans anahtarı, ortam değişkenleri ve CI/CD gizli yöneticileri ile uyumlu olarak
IronBarCode.License.LicenseKeyüzerinden ayarlanır.
Özellik Karşılaştırması
| Özellik | Aspose.BarCode | IronBarcode |
|---|---|---|
| Format tespiti | Manuel — DecodeType belirtmeli veya yavaş AllSupportedTypes kullanmalı |
Desteklenen tüm formatlarda otomatik |
| Sembol sayısı | 60+ | 50+ |
| PDF destegi | Yerli destek yok — ayrı Aspose.PDF lisansı gerektirir | Yerel — BarcodeReader.Read("doc.pdf") pakete gömülü |
| Fiyatlandırma modeli | Yalnızca abonelik — $999-$4,995/yıl | Sürekli $749'dan (tek sefer) |
| Sürekli lisans | Mevcut değil | Evet, tüm seviyeler |
| API tarzi | Örnek tabanlı, detayli yapılandırma | Statik fabrika metodlari, akiskan API |
| IDisposable gereksinimi | Evet — BarCodeReader ve BarcodeGenerator |
Hayır — durumsuz statik yöntemler |
| Is parcacigi guvenligi | Her iş parçacığı için ayrı örnekler gereklidir | Durumsuz — doğal olarak eşzamanlı kullanım için güvenli |
Detayli Özellik Karsilastirmasi
| Özellik | Aspose.BarCode | IronBarcode |
|---|---|---|
| Uretim | ||
| API tarzı | 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()) |
| Logo ile QR kod | Üretimden sonra manuel GDI+ ek overlay | .AddBrandLogo("logo.png") gömülü |
| Baytlara çıkış | generator.GenerateBarCodeImage() |
.ToPngBinaryData() |
| Renkli barkodlar | generator.Parameters.Barcode.BarColor |
.ChangeBarCodeColor(Color.X) |
| Okuma | ||
| Format spesifikasyonu | Gerekli (DecodeType) |
Gerekli değil — otomatik |
| Bilinmeyen format yedeği | DecodeType.AllSupportedTypes (yavaş) |
Aynı çağrı — yedekleme modu gerekli değil |
| Performans ayarlaması | 12+ QualitySettings parametreleri |
ReadingSpeed enum — üç seviye |
| Bertaraf edilebilir okuyucu | Evet — using var reader = new BarCodeReader(...) |
Hayır — statik çağrı, bertaraf edilecek nesne yok |
| Sonuç erişimi | reader.FoundBarCodes, ReadBarCodes() çağrıldıktan sonra |
BarcodeReader.Read() dönen değeri |
| Barkod değer özelliği | result.CodeText |
result.Value |
| Format adı özelliği | result.CodeTypeName |
result.Format.ToString() |
| PDF Desteği | ||
| Yerli PDF okuma | Hayır | Evet |
| PDF için gerekli | Aspose.PDF (999$–4,995$/yıl ekstra) | Ek paket yok |
| Sonuçlarda sayfa numarası | N/A | result.PageNumber |
| Lisanslama | ||
| Lisans modeli | Yalnızca abonelik, yıllık yenileme | Sürekli, bir defalık satın alma |
| Tek geliştirici | 999$/yıl | 749$ bir kerelik |
| 10 geliştirici | $4,995/yıl (Site lisansı) | $2,999 bir kerelik (Professional) |
| Sınırsız geliştirici | $14,985/yıl (OEM) | $5,999 bir kerelik (Sınırsız) |
| PDF desteği dahil | Hayır — ayrı Aspose.PDF aboneliği | Evet |
| Platform ve Yayimlama | ||
| Lisans aktivasyonu | .lic dosya yolu |
String anahtarı — ortam değişkeni |
| Docker konuşlandırması | .lic dosyasını imaja kopyalamalı veya monte etmelisiniz |
Ortam değişkeni — dosya gerekmez |
| .NET Framework | Evet | Evet (4.6.2+) |
| .NET Core / .NET 5+ | Evet | Evet (.NET Core 3.1+, .NET 5/6/7/8/9) |
| Windows | Evet | Evet (x64/x86) |
| Linux | Evet | Evet (x64) |
| macOS | Evet | Evet (x64/ARM) |
| Docker | Evet | Evet |
| Azure / AWS Lambda | Evet | Evet |
Üretim API'si
Üretim API'si, iki kütüphane arasındaki kelime bolluğu farkının günlük kodlarda en çok görüldüğü yerdir.
Aspose.BarCode Yaklaşımı
Aspose.BarCode, konfigürasyon için Parameters hiyerarşisi ile bir BarcodeGenerator sınıfı kullanır. Minimal bir üretim çağrısı, üç adım gerektirir — örneklendirme, kaydetme çağrısı ve format belirtimi. Gerçek kullanım genellikle generator.Parameters.Barcode.*'na navigasyonu 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.*'na yönlendirilir, bu çok seviyeli bir nesne hiyerarşisidir. Ezberlendiğinde karmaşık değildir — ancak ezber gerektirir.
IronBarcode Yaklaşımı
IronBarcode, parametre hiyerarşisini akıcı bir yöntem zinciri ile değiştirir. 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()
IronBarcode'un QR üretim API'si, manuel görüntü kompozisyonu olmadan markalı logo 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, bir QR kodu üzerine bir logo yerleştirmek için manuel GDI+ çizim gerektirir — barkod görüntüsünü oluşturma, ardından merkezlenmiş olarak logoyu birleştirmek için System.Drawing.Graphics kullanma. IronBarcode'un AddBrandLogo'ı bunu tek bir çağrıda halleder ve hata düzeltmesini otomatik olarak uygun şekilde ayarlar.
PDF Barkod Okuma
Birçok ekip için bu, en çok önem taşıyan karşılaştırmadır. PDF belgelerinden barkod okumak, gelen faturalar, PDF olarak kaydedilmiş sevkiyat etiketleri ve taranmış belge arşivleri gibi yaygın bir iş akışıdır.
Aspose.BarCode Yaklaşımı
Aspose.BarCode, yerel bir PDF desteğine sahip değildir. Aspose ile bir PDF'den bir barkod okumak için PDF'yi yüklemek ve sayfaları görüntülere dönüştürmek için Aspose.PDF ve bu dönüştürülmüş görüntüleri taramak için Aspose.BarCode gerekir. Her ikisi de abonelik ürünleridir. Her ikisi de lisans aktivasyonu gerektirir. Birleştirildiğinde, çoğu geliştiricinin tek bir yetenek olarak düşündüğü şey için yıllık $1,998-$9,990 ödersiniz.
// 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 namespace'den iki kullanma ifadesi, bir render pipeline'ı, belleği akış yönetimi ve iç içe geçmiş bir döngüdür. Ayrıca görüntü çıkarması sırasında barkodun hangi formatta olduğunu genellikle bilmediğinizden DecodeType.AllSupportedTypes kullanılır.
IronBarcode Yaklaşımı
IronBarcode, PDF ayrıştırma, sayfa renderleme ve barkod algılamayı dahili olarak yönetir. Read'ı .pdf ile biten bir yol ile çağırırsınız ve bu da hangi sayfadan geldiklerini bilmeniz için result.PageNumber içeren barkod sonuçları döndürür. İkinci bir paket yok, ikinci bir lisans yok, renderleme 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 belgeleri çok sayfalı toplu işlem ve sayfa aralığı filtreleme 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 çok farklı şekilde ele alır.
Aspose.BarCode Yaklaşımı
DecodeType.AllSupportedTypes, formatın bilinmediği senaryolar için Aspose'un çözümüdür. Aspose'un kendi belgeleri, hedeflenmiş bir liste belirtmekten daha yavaş olduğunu kabul eder; çünkü kod çözücü, bilinen her sembolojiyi art arda çalıştırır. Yüksek hacimli işlemler için — dakikada binlerce etiketi tarayan bir depo — bu performans farkı önemsiz değildir.
using Aspose.BarCode.BarCodeRecognition;
// AllSupportedTypes scans for every known format — significantly slower
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;
// AllSupportedTypes scans for every known format — significantly slower
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
' AllSupportedTypes scans for every known format — significantly slower
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ı 'yavaş mod' ve 'hızlı mod' yoktur. IronBarcode'un algılaması, görüntünün bir Kod 128 veya bir DataMatrix içerip içermediği fark etmeksizin aynı algoritmayı çalıştırır. Performans ve doğruluk arasındaki ödünleşimleri ayarlamak istiyorsanız, ReadingSpeed seçeneği bunu format bilgisi gerektirmeden 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 ayar parametreleri seti için IronBarcode okuma seçeneklerine bakın.
API Eslestirme Referansi
| 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) |
reader.FoundBarCodes |
BarcodeReader.Read dönen değeri |
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 bir paket |
license.SetLicense("Aspose.BarCode.lic") |
IronBarCode.License.LicenseKey = "key" |
new Aspose.BarCode.Metered() + .SetMeteredKey() |
(not needed — single key covers all environments) |
generator.GenerateBarCodeImage() |
.ToPngBinaryData() veya .SaveAsPng() |
QREncodeMode.Auto + QRErrorLevel.LevelH + manuel logo örtüşmesi |
QRCodeWriter.CreateQrCode().AddBrandLogo() |
Takımların Aspose.BarCode'dan IronBarcode'a Geçişi Düşünmesi Durumları
Birçok senaryo, geliştirme ekiplerini Aspose.BarCode'a alternatif olarak IronBarcode'u değerlendirmeye yönlendirir.
Abonelik Yenileme Gelir
Yıllık abonelik yenilemesi, ekiplerin kütüphane kararlarını en sık gözden geçirdiği zamandır. Eğer Aspose.BarCode yığında tek Aspose ürünü ise, barkod işlevselliği için yılda $999-$4,995 bir karşılaştırma yapmayı teşvik eder. Konuşma genellikle şöyle olur: "Her yıl sürekli olarak bunu ödüyoruz.IronBarcodene kadar tek seferlik {}" Profesyonel seviyede ($2,999 10 geliştirici için),IronBarcodekendini Site lisansına karşı ilk yıl içinde amorti eder.
Aspose.Total kullanan ekipler için — Aspose.BarCode'un 20+ diğer ürünle birlikte paketlendiği yerlerde — matematik farklıdır. Bu paketin içerisindeki Aspose.BarCode'un marjinal maliyeti sıfıra yaklaşır. Bu ekiplerin değiştirmek için daha az nedeni vardır.
PDF Desteği Bir Gereklilik Haline Gelir
Birçok proje, görüntülerden barkod okumakla başlar, ardından gelen belgelerin görüntü dosyaları yerine PDF olduğunu bir paydaş fark ettiğinde PDF desteği ekler. O noktada, bir Aspose.BarCode takımı şu kararla karşı karşıyadır: Aspose.PDF'i eklemek (başka bir abonelik), üçüncü taraf bir PDF renderlayıcı bulmak veya barkod kütüphanesini yeniden değerlendirmek.
Aspose.PDF eklemek anlık ihtiyaçı çözer ancak abonelik maliyetini iki katına çıkarır. Üçüncü parti bir renderlayıcı bulmak, bir bağımlılık ve entegrasyon çabası ekler. Barkod kütüphanesini yeniden değerlendirmek — ve IronBarcode'un PDF'leri doğal olarak tek seferlik bir ücretle okuduğunu keşfetmek — genellikle sonuçtur.
Üretimde Formatı Bilinmeyen Senaryolar
Belge yüklemelerini kabul eden müşteri odaklı uygulamalar, yüklenen bir belgenin hangi barkod formatını kullanacağını kontrol edemez. Uygulama Code 128 girdilerine göre inşa edilmişse ve bir müşteri bir DataMatrix etiketi yüklüyorsa, sabit kodlanmış DecodeType.Code128 sessizce sonuç döndürmez. DecodeType.AllSupportedTypes'a geçmek doğruluğu düzeltir ancak bir performans maliyeti ekler.
Bu sorunu yaşayan ekipler — üretimde yeni formatlar ortaya çıktıkça okuyucu konfigürasyonlarına giderek daha fazla DecodeType ekleyerek — genellikle yeni bir format kaynağı eklendiğinde güncellenmesi gereken bir listeyi sürdürmeye başlarlar. IronBarcode'un otomatik algılaması, bu listeyi gereksiz kılar.
Bulut ve Kapsüllenmiş Dağıtımlar
Aspose.BarCode'un dosya tabanlı lisanslaması bir dağıtım adımı ekler: lisans dosyası, çalışma zamanında uygulamanın okuyabileceği bir yoldan erişilebilir olmalıdır. GitOps iş akışında, lisans dosyası ya kaynak kontrolüne girer (bir güvenlik riski) ya da monte edilmiş bir gizli hacim aracılığıyla enjekte edilmelidir. IronBarcode'un anahtar tabanlı yaklaşımı, Kubernetes secretlarına ve CI/CD gizli değişkenlerine sorunsuz bir şekilde uyar, konteyner imajında yönetilecek dosya yoktur.
Genel Geçiş Dusunceleri
Aspose.BarCode'dan IronBarcode'a geçiş yapan ekipler, tahmin edilebilir bir dizi teknik uyumla karşılaşır.
Özellik Adı Eşlemesi
Paket değiştirdikten sonra en yaygın derleme hatası result.CodeText'nın result.Value olarak yeniden adlandırılmasıdır. Bir kod tabanında genel bir arama, bunu hızlı bir şekilde kapsar:
grep -r "\.CodeText" --include="*.cs" .
grep -r "\.CodeTypeName" --include="*.cs" .
grep -r "\.CodeText" --include="*.cs" .
grep -r "\.CodeTypeName" --include="*.cs" .
result.CodeText, result.Value haline gelir. result.CodeTypeName, result.Format.ToString() haline gelir. result.Format özelliği bir BarcodeEncoding enum değeridir, bu da gerektiğinde yazılı tip karşılaştırmalarına izin verir.
DecodeType Kaldırılması
Kod tabanındaki her DecodeType.* referansı kaldırılabilir:
grep -r "DecodeType\." --include="*.cs" .
grep -r "DecodeType\." --include="*.cs" .
Belirli bir DecodeType bilinen bir formatta performansı artırmak için listelendiğinde, BarcodeReaderOptions içindeki ReadingSpeed.Faster format bilgisi gerektirmeden benzer bir fayda sağlar.
Lisans Başlatma Değişikliği
Aspose.BarCode, license.SetLicense() üzerinden yüklenen bir .lic dosyası kullanır.IronBarcodebir string 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 derleme eserlerinden .lic dosyasını kaldırın. Docker'da, COPY Aspose.BarCode.lic satırını kaldırın ve yerine bir ENV IRONBARCODE_LICENSE girişi koyun.
EncodeTypes to BarcodeEncoding Eşlemesi
EncodeTypes.QR, BarcodeEncoding.QRCode olarak eşlenir — isim farkı, ekiplerin genellikle ilk derleme hatasıyla karşılaştığında jenerasyon kodunu taşırken ortaya çıkar. Diğer tüm eşlemeler, tutarlı isimlendirme ile doğrudan eşdeğerlidir.
EkIronBarcodeIlkeler
Özün ötesinde kıyaslama noktaları,IronBarcodeuygulama bağlamına bağlı olarak ilgili olabilir:
- Tek bir görüntüde çoklu barkod algılama:
ExpectMultipleBarcodes = true, bir görüntüde bulunan tüm barkodları ve her birinin konum koordinatlarını döndürür. - Barkodları PDF'lere damgalama: Ayrı bir PDF kütüphanesi olmadan mevcut PDF sayfalarına doğrudan barkod yazma.
- TIFF çoklu çerçeve okuma: Çok sayfalı TIFF'in tüm karelerinden barkodları tek çağrıda okuyun.
- Tarzlı QR kodları: Renk, logo ve hata düzeltme seviyesi, harici görüntü işlemeden fluent zinciri aracılığıyla ayarlanır.
- Azure Fonksiyonları ve AWS Lambda desteği: Sunucusuz dağıtımlar, her iki platformda standart lisans ile desteklenir.
- İkili veri kodlama: İkili yük durumlarında kullanılmak üzere byte dizilerini doğrudan Data Matrix veya PDF417 barkodlarına kodlayın.
.NET Uyumlulugu ve Gelecek Hazirikligi
IronBarcode,.NET Framework4.6.2+, .NET Core 3.1+ ve .NET 5, 6, 7, 8 ve 9'u destekler. Kütüphane, Microsoft'un .NET sürüm döngüsüne uyumlu düzenli güncellemeler alır, 2026'nın sonlarında beklenen .NET 10 ile uyumluluğu garanti eder. Aspose.BarCode da aynı .NET sürüm aralığını destekler, bu yüzden mevcut sürümlerde her iki kütüphane de uyumluluk avantajı sunmamaktadır. Gelecek için anlamlı fark ise lisanslamadır; bugün satın alınan sürekli birIronBarcodelisansı gelecekteki .NET sürümlerini ek maliyet olmadan kapsar, oysa Aspose.BarCode abonelikleri güncellenmiş yapıları erişmek için sürekli yenilemeyi gerektirir.
Sonuç
Aspose.BarCode ve IronBarcode, barkod kütüphanesi tasarımında iki farklı felsefeyi temsil eder. Aspose.BarCode, çağrıcı formatı belirtir, nesne ömürlerini yönetir ve her işlemi bir özellik hiyerarşisi aracılığıyla yapılandırır, açık, instance tabanlı bir API üzerine kurulmuştur. IronBarcode, kütüphanenin algılama, nesne yaşam döngüsü ve PDF render işlemini dahili olarak ele aldığı, statik, format-agnostik bir API üzerine kurulmuştur. Hiçbir yaklaşım içsel olarak doğru değildir - doğru seçim, uygulamanın neye ihtiyaç duyduğuna bağlıdır.
Aspose.BarCode, zaten Aspose ekosistemi içinde çalışan ekipler için daha güçlü seçimdir. Aspose.Total zaten lisanslı olduğunda, Aspose.BarCode marjinal bir maliyet eklemez ve60+semboloji listesi her hangi bir ticari .NET barkod kütüphanesinde mevcut olan en geniş olanıdır. İlginç formatlar gerektiren uygulamalar için — MaxiCode, DotCode veya IronBarcode'un50+listesindeki olmayan belirli posta sembolojileri — Aspose.BarCode tek uygulanabilir seçenek olabilir. Olgunluğu ve format genişliği gerçek güçlerdir.
Aspose.BarCode'u bağımsız bir satın alma olarak değerlendiren ekipler için, değer hesaplaması yapmak daha zordur. Format-spesifikasyon gereksinimi, her okuma işlemine sürtünme ekler. Yerel PDF desteğinin olmaması, IronBarcode'un temel paketine dahil olan bir özelliğe erişim maliyetini iki katına çıkarır. Ve abonelik modeli yıllık maliyetin birleşmesi anlamına gelir — 10-yazılımcı ekip için yılda 4.995 dolar beş yıl boyunca toplam 24.975 dolara ulaşırken,IronBarcodeProfessional için tek seferlik 2.999 dolar. IronBarcode'un otomatik algılaması, yerel PDF okuma ve sürekli lisansı, bu üç endişeyi tek bir pakette çözer.
Karar nihayetinde ekosistem uygunluğu ve semboloji gerekliliklerine dayanır. Aspose ürünlerine derinlemesine entegre edilmiş ekipler veya IronBarcode'un destek listesinin dışında formatlara ihtiyaçı olan ekipler Aspose.BarCode'a ait. Bağımsız sürekli lisans, yerel PDF okuma ve her okuma için format bilgisi gerektirmeyen bir API isteyen ekipler içinIronBarcodedaha pratik bir seçim olacaktır.
Sıkça Sorulan Sorular
Aspose.BarCode 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 bir 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 öncesinde örnek oluşturma ve yapılandırma gerektirir. IronBarcode ayrıca yerel PDF desteği, otomatik format algılama ve tüm ortamlarda tek anahtar lisansı sağlar.
IronBarcode, Aspose.BarCode for .NET'ya göre lisanslamak daha mı kolay?
IronBarcode, hem geliştirme hem de üretim dağıtımlarını kapsayan tek bir lisans anahtarı kullanır. Bu durum, CI/CD hatları ve Docker yapılandırmalarını, SDK anahtarlarını çalıştırma anahtarlarından ayıran lisanslama sistemleriyle karşılaştırıldığında basitleştirir.
IronBarcode, Aspose.BarCode for .NET'ın desteklediği tüm barkod formatlarını destekliyor mu?
IronBarcode, QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 ve daha fazlası dahil 30'dan fazla barkod sembolojisini destekler. Format otomatik algılama, açık format sayımı gerektirmez.
IronBarcode yerel PDF barkod okuma desteği veriyor mu?
Evet. IronBarcode, BarcodeReader.Read('document.pdf') kullanarak PDF dosyalarından barkodları doğrudan okur, ayrı bir PDF işleme kütüphanesi gerektirmez. Sayfa başına sonuçlar, sayfa numarası, barkod formatı, değeri ve güven skoru içerir.
IronBarcode, Aspose.BarCode for .NET'e kıyasla toplu işleme nasıl handle ediyor?
IronBarcode'un statik yöntemleri durumsuz ve doğal olarak iş parçacığı güvenlidir, Parallel.ForEach'in doğrudan kullanımını sağlar ve iş parçacığı başı örnek yönetimi gerektirmez. Hiçbir fiyatlandırma seviyesi için bant genişliği sınırı 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 paketi içinde destekler. Platform hedefleri arasında Windows x64/x86, Linux x64 ve macOS x64/ARM bulunuyor.
.NET projesine IronBarcode'u nasıl kurarım?
NuGet aracılığıyla IronBarcode'u kurun: 'Install-Package IronBarCode' komutunu Paket Yöneticisi Konsolunda veya CLI'de 'dotnet add package IronBarCode' komutunu çalıştırın. Ek bir SDK yükleyici veya çalışma zamanı dosyaları gerekli değildir.
Aspose.BarCode'in aksine, IronBarcode'u satın almadan önce değerlendirebilir miyim?
Evet. IronBarcode'ın deneme modu, yalnızca oluşturulan çıktı görüntülerine bir filigran ekleyerek tam çözümlenmiş barkod değerlerini verir. Satın almadan önce kendi belgelerinizde okuma doğruluğunu test edebilirsiniz.
Aspose.BarCode for .NET ile IronBarcode arasındaki fiyat farkı nedir?
IronBarcode, geliştirme ve üretimi kapsayan tek bir geliştirici lisansı için $749'dan başlar. Fiyatlandırma detayları ve hacim seçenekleri, IronBarcode lisanslama sayfasında mevcuttur. Ayrı bir çalışma zamanı lisansı gereksinimi yoktur.
Aspose.BarCode for .NET'ten IronBarcode'a geçiş kolay mıdır?
Aspose.BarCode for .NET'ten IronBarcode'a geçiş, öncelikle örnek tabanlı API çağrılarını IronBarcode'un statik yöntemleriyle değiştirmeyi, lisanslama klişelerini kaldırmayı ve sonuç özellik adlarını güncellemeyi içerir. Çoğu geçiş, kod eklemekten ziyade azaltmayı içerir.
IronBarcode, logolu QR kodları üretiyor mu?
Evet. QRCodeWriter.CreateQrCode().AddBrandLogo('logo.png') kullanarak bir QR koduna yerel logolu bir marka resmi ekleyin, yapılandırılabilir hata düzeltme ile. ChangeBarCodeColor() üzerinden renkli QR kodları da desteklenir.

