Altbilgi içeriğine atla
DIğER BILEşENLERLE KARşıLAşTıRıN

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 DecodeType belirtilmesini gerektirir. Yedek DecodeType.AllSupportedTypes hedefli bir listeden çok daha yavaştır çünkü decoder her bilinen sembolojiyi sırasıyla çalıştırır.
  • Örnek Tabanlı API: Hem BarCodeReader hem de BarcodeGenerator, IDisposable'i uygulayan örneklenmiş nesnelerdir. Bunları using blokları 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 .lic dosyası 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
$vbLabelText   $csharpLabel

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);
$vbLabelText   $csharpLabel

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ın DecodeType eş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çlar result.PageNumber iç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)
$vbLabelText   $csharpLabel

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()
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel
// 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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel
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)
$vbLabelText   $csharpLabel

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" .
SHELL

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" .
SHELL

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"))
$vbLabelText   $csharpLabel

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:

.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.

Jordi Bardia
Yazılım Mühendisi
Jordi Python, C# ve C++ konularında en yetkin, Iron Software'deki yeteneklerini kullanmadığı zamanlarda; oyun programlıyor. Ürün testi, ürün geliştirme ve araştırma sorumluluklarını paylaşan Jordi, sürekli ürün gelişimine büyük değer katıyor. Çeşitli deneyimleri onu ...
Daha Fazlasını Oku

Iron Destek Ekibi

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