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

Accusoft BarcodeXpress ve IronBarcode: C# Barkod Kütüphanesi Karşılaştırması

Bir barkod kütüphanesini deneme sürümüyle değerlendirirken, ürünü satın almadan önce kendi görüntüleriniz üzerinde çalışıp çalışmadığını görmek istersiniz. Accusoft BarcodeXpress, bu seçeneği size sunmuyor. Değerlendirme modunda, kodlanmış barkod değerleri kısmen gizlenir — "1234567890", "1234...XXX" olarak döner. Kütüphanenin bir barkodu bulduğunu doğrulayabilirsiniz, ancak barkodun doğru okunduğunu doğrulayamazsınız. Bu, test etmeden önce satın alma durumu olup, fiyatlandırmaya bile bakmadan önce anlamlı bir sürtünme noktasidir.

Accusoft BarcodeXpress'i Anlamak

Accusoft, on yıllardır kurumsal ortamlara yönelik doküman görüntüleme yazılımı geliştiriyor. BarcodeXpress, PrizmDoc, ImageGear ve Accusoft Imaging içeren daha geniş bir ürün ailesinin bir parçasıdır. Zaten bu ürünleri kullanan ekipler aşina bir API yüzeyiyle karşılaşır ve mevcut bir Accusoft hesap ilişkisine güvenebilirler. Bağımsız barkod kullanımı için, bu bağlam daha az değer sağlar.

Çekirdek SDK, .NET Core için bir NuGet paketi olarak mevcuttur. API, örnek tabanlıdır — bir BarcodeXpress nesnesi oluşturur, Licensing özelliğini yapılandırır ve ardından gerçek işlemler için çocuk reader ve writer nesnelerini kullanırsınız. Çift anahtarlı lisanslama sistemi, BarcodeXpress'i çoğu alternatiften ayırır.

BarcodeXpress'in ana mimari özellikleri:

  • Örnek tabanlı API: Her işlem bir BarcodeXpress örneği gerektirir; static convenience methods are not part of the design
  • İki katmanlı lisanslama: SDK lisanslaması (SolutionName + SolutionKey) ve çalışma zamanı lisanslaması (UnlockRuntime) ayrı sistemler olup ayrı satın alımlar gerektirir
  • Değerlendirme modu gizleme: Değerlendirme modunda, kodlanmış değerler kasıtlı olarak bozulur — "1234567890", "1234...XXX" olarak döner — önceden satın alma doğruluk testi yapmak imkansızdır
  • Manuel format belirtimi: Okuyucu, aranacak sembolojilerin numaralandırılması için açık BarcodeTypes yapılandırması gerektirir; unspecified formats are not detected
  • 40 PPM Standart tavan: Standart Sürüm dakikada 40 sayfa işlemeyle sınırlar, çoğu takımın karşılaştığı bir sınırlama, dağıtımdan sonra değil, önce
  • Yerel PDF desteği yok: PDF dosyaları, okuyucu işleyebilmeden önce ayrı bir kütüphane kullanılarak görüntülere dönüştürülmelidir
  • Minimum beş runtime lisansı: Tek bir sunucu dağıtımı bile en az beş runtime lisansı satın alma gerektirir

Çift Anahtar Sistemi Açıklandı

BarcodeXpress, lisanslamayı kavramsal olarak iki ayrı katmana böler:

// BarcodeXpress: two separate license keys required
using Accusoft.BarcodeXpressSdk;

var barcodeXpress = new BarcodeXpress();
// Step 1: SDK license (for development)
barcodeXpress.Licensing.SolutionName = "YourCompanyName";
barcodeXpress.Licensing.SolutionKey = Convert.ToInt64("12345678901234");
// Step 2: Runtime license (for production — minimum 5 purchased)
barcodeXpress.Licensing.UnlockRuntime("YourRuntimeKey", Convert.ToInt64("98765432109876"));
// BarcodeXpress: two separate license keys required
using Accusoft.BarcodeXpressSdk;

var barcodeXpress = new BarcodeXpress();
// Step 1: SDK license (for development)
barcodeXpress.Licensing.SolutionName = "YourCompanyName";
barcodeXpress.Licensing.SolutionKey = Convert.ToInt64("12345678901234");
// Step 2: Runtime license (for production — minimum 5 purchased)
barcodeXpress.Licensing.UnlockRuntime("YourRuntimeKey", Convert.ToInt64("98765432109876"));
Imports Accusoft.BarcodeXpressSdk

Dim barcodeXpress As New BarcodeXpress()
' Step 1: SDK license (for development)
barcodeXpress.Licensing.SolutionName = "YourCompanyName"
barcodeXpress.Licensing.SolutionKey = Convert.ToInt64("12345678901234")
' Step 2: Runtime license (for production — minimum 5 purchased)
barcodeXpress.Licensing.UnlockRuntime("YourRuntimeKey", Convert.ToInt64("98765432109876"))
$vbLabelText   $csharpLabel

SolutionName ve SolutionKey çifti, SDK'nın kendisini etkinleştirir. Kendi anahtarını ve kendi çözüm anahtarını ayrı argümanlar olarak alan UnlockRuntime çağrısı, üretim dağıtımı yeteneklerini etkinleştirir. Üretim dağıtımında tam, gizlenmemiş barkod değerleri döndürülmesi için her ikisi de geçerli ve mevcut olmalıdır.

Kod incelemesinde, bu model öngörülebilir bir soru üretir: 'UnlockRuntime'yi neden iki farklı anahtarla çağırıyoruz?' Cevap — Accusoft'un SDK lisanslaması ve dağıtım lisanslamasını ayrı ürünler olarak ve ayrı faturalandırma ile ele aldığını bilmek — API'nin kendisinden her zaman açıkça anlaşılmaz. Bu kodu ilk kurulumdan altı ay sonra sürdüren ekipler, hangi anahtarın hangi olduğunu anlamak için genellikle dokümantasyona geri dönmek zorunda kalır.

IsRuntimeUnlocked özelliği, çalışma zamanı katmanının aktif olup olmadığını kontrol etmenizi sağlar:

if (!barcodeXpress.Licensing.IsRuntimeUnlocked)
{
    // In this state, barcode values are partially obscured
    // "1234567890" returns as "1234...XXX"
    Console.WriteLine("Warning: runtime license not active");
}
if (!barcodeXpress.Licensing.IsRuntimeUnlocked)
{
    // In this state, barcode values are partially obscured
    // "1234567890" returns as "1234...XXX"
    Console.WriteLine("Warning: runtime license not active");
}
If Not barcodeXpress.Licensing.IsRuntimeUnlocked Then
    ' In this state, barcode values are partially obscured
    ' "1234567890" returns as "1234...XXX"
    Console.WriteLine("Warning: runtime license not active")
End If
$vbLabelText   $csharpLabel

Bu kontrol, ekiplerin değerlendirme modunda çıktılarının sessizce kısmi veriler döndüğünü, bir istisna fırlatmak veya açıkça başarısız olmak yerine fark ettiklerinde eklenen korumadır.

IronBarcode'u Anlamak

IronBarcode, NuGet paketi dışında başka harici bağımlılıkları olmayan bağımsız bir .NET barkod kütüphanesidir. Hem oluşturmayı hem de okumayı statik fabrika metodlarıyla ele alır, bu da yönetilecek bir örnek yaşam döngüsünün olmadığı ve uygulama kodunda dağılmış olan yapıcı çağrılarının olmadığı anlamına gelir.

Tek anahtarlı lisanslama modeli, deneme modunda test ettiğiniz şeyin üretimde çalıştığı şey olduğunu ifade eder — tek fark, deneme sırasında oluşturulan barkod resimlerine bir filigran eklenmesidir. Kodlanmış değerler her zaman tamdır, bu da satın almaya karar vermeden önce gerçek belgelerinizde okuma doğruluğunu ölçebileceğiniz anlamına gelir.

IronBarcode'un ana özellikleri:

  • Statik API tasarımı: BarcodeReader.Read() ve BarcodeWriter.CreateBarcode() durumsuz statik yöntemlerdir — herhangi bir örnek yönetimi gerektirmez
  • Tek lisans anahtarı: Bir anahtar hem geliştirme hem de üretim dağıtımlarını kapsar; there is no separate runtime license layer
  • Tam deneme değerleri: Deneme modu tam kodlanmış değerler döndürür; filigran, oluşturulan çıktı resimlerine uygulanır, okuma sonuçlarına değil
  • Otomatik format algılama: IronBarcode, tüm desteklenen formatlar arasında sembolojiyi otomatik tanır; herhangi bir BarcodeTypes numaralandırması gerekmez
  • Yerel PDF desteği: BarcodeReader.Read("document.pdf"), ayrı bir oluşturma adımı olmadan PDF dosyalarını doğrudan işler
  • Verim tavanı yok: İşlem hızı, donanım ve ağ kapasitesiyle sınırlıdır, yazılım tarafından dayatılan bir sınır yoktur
  • Tasarımla iş parçacığı güvenliği: Durumsuz statik metodlar, herhangi bir sayıda iş parçacığından örnek izolasyonu gerektirmeden eşzamanlı olarak çağrılabilir

Özellik Karşılaştırması

Özellik Accusoft BarcodeXpress IronBarcode
Lisans modeli SDK lisansı + ayrı çalışma zamanı lisansı Tek sureli anahtar
Deneme modu davranışı Barkod değerleri kısmen gizlenmiş ("1234...XXX") Tam degerler iade edilir, yalnızca uretilen ciktiya filigran eklenir
Verim siniri (Standart) Dakikada 40 sayfa Verim siniri yok
PDF destegi Gorsel alma icin harici PDF kutuphanesi gerekli Yerel — BarcodeReader.Read("doc.pdf")
API tarzi Örnek tabanlı, detayli yapılandırma Statik fabrika metodlari, akiskan API
Is parcacigi guvenligi Her is parcacigi icin örnek gerekli Durumsuz statik metodlar — doğal olarak is parcacigi guvenli
Fiyatlanma başlangıç noktasi $1.960+ SDK + $2.500+ calisma zamani (en az 5) $749 süresiz (Lite, 1 geliştirici)

Detayli Özellik Karsilastirmasi

Özellik Accusoft BarcodeXpress IronBarcode
Lisanslama
Lisans modeli SDK anahtari + calisma zamani anahtari Tek sureli anahtar
Minimum calisma zamanı lisanslari 5 (1 sunucu icin bile) Calisma zamani lisansi kavrami yok
Degerlendirme modu Degerler '1234...XXX' olarak bulanıklaştırılmış Tam degerler, yalnızca cikti görüntülerinde filigran
Süresiz lisans Standart değil — satisla iletişime gecin Evet, tüm seviyeler
Yıllık yenileme Destek icin gerekli Opsiyonel
Okuma
Format otomatik tanıma Manuel — barkod turleri belirtilmeli Desteklenen tüm formatlarda otomatik
PDF okuma Harici PDF kutuphanesi gerekli Yerel
Görüntü basına coklu barkod Evet, BarcodeTypes yapılandırmasıyla Evet, ExpectMultipleBarcodes seçeneğiyle
Sonuc özellikleri BarcodeValue, BarcodeType Value, Format, Confidence, PageNumber
Verim siniri 40 PPM (Standart Sürüm) Herhangi bir seviyede sinir yok
Uretim
Kod 128 uretimi Evet, writer.BarcodeType aracılığıyla Evet, BarcodeWriter.CreateBarcode() aracılığıyla
QR kod uretimi Evet Evet, QRCodeWriter.CreateQrCode() aracılığıyla
Logo ile QR kod Manuel gorsel katmanlama gerekli AddBrandLogo("logo.png") yapısında yerleşik
Cikti formatlari Dosya kaydetme PNG, JPG, PDF, ikili veri, akiş
Platform ve Yayimlama
.NET Framework Ayrı bir eski versiyon SDK .NET Framework 4.6.2+
.NET Core / .NET 5+ Evet (.NET Core SDK) .NET Core 3.1+, .NET 5/6/7/8/9
Linux/Docker Evet Evet — Windows x64/x86, Linux x64, macOS x64/ARM
Docker lisans yapılandırmasi Lisans dosyasi veya lisans sunucusu Ortam değişkeni
CI/CD entegrasyonu Hem SDK hem de calisma zamani anahtarlari gerekli Bir gizli
Toplu İşleme
Is parcacigi guvenligi Her is parcacigi icin örnek gerekli Durumsuz — Parallel.ForEach guvenli
Paralel toplu işlem Is parcacigi bazli örnek yonetimi gerekli Dogrudan Parallel.ForEach destegi

Lisans Mimarisi

BarcodeXpress ileIronBarcodearasindaki lisans karmaşıklığı farkı, uretim ortamında calisacak başlatma kodunun yazılmasında en belirgin halini alır.

BarcodeXpress Yaklaşımı

using Accusoft.BarcodeXpressSdk;

public class BarcodeService
{
    private readonly BarcodeXpress _barcodeXpress;

    public BarcodeService()
    {
        _barcodeXpress = new BarcodeXpress();

        // Layer 1: SDK license
        _barcodeXpress.Licensing.SolutionName = "AcmeCorp";
        _barcodeXpress.Licensing.SolutionKey = Convert.ToInt64("12345678901234");

        // Layer 2: Runtime license — separate purchase, minimum 5
        _barcodeXpress.Licensing.UnlockRuntime(
            "RuntimeKey-XXXXXX",
            Convert.ToInt64("98765432109876"));

        // Guard against partial-value mode
        if (!_barcodeXpress.Licensing.IsRuntimeUnlocked)
        {
            throw new InvalidOperationException(
                "Runtime license not active — barcode values will be obscured");
        }
    }
}
using Accusoft.BarcodeXpressSdk;

public class BarcodeService
{
    private readonly BarcodeXpress _barcodeXpress;

    public BarcodeService()
    {
        _barcodeXpress = new BarcodeXpress();

        // Layer 1: SDK license
        _barcodeXpress.Licensing.SolutionName = "AcmeCorp";
        _barcodeXpress.Licensing.SolutionKey = Convert.ToInt64("12345678901234");

        // Layer 2: Runtime license — separate purchase, minimum 5
        _barcodeXpress.Licensing.UnlockRuntime(
            "RuntimeKey-XXXXXX",
            Convert.ToInt64("98765432109876"));

        // Guard against partial-value mode
        if (!_barcodeXpress.Licensing.IsRuntimeUnlocked)
        {
            throw new InvalidOperationException(
                "Runtime license not active — barcode values will be obscured");
        }
    }
}
Imports Accusoft.BarcodeXpressSdk

Public Class BarcodeService
    Private ReadOnly _barcodeXpress As BarcodeXpress

    Public Sub New()
        _barcodeXpress = New BarcodeXpress()

        ' Layer 1: SDK license
        _barcodeXpress.Licensing.SolutionName = "AcmeCorp"
        _barcodeXpress.Licensing.SolutionKey = Convert.ToInt64("12345678901234")

        ' Layer 2: Runtime license — separate purchase, minimum 5
        _barcodeXpress.Licensing.UnlockRuntime("RuntimeKey-XXXXXX", Convert.ToInt64("98765432109876"))

        ' Guard against partial-value mode
        If Not _barcodeXpress.Licensing.IsRuntimeUnlocked Then
            Throw New InvalidOperationException("Runtime license not active — barcode values will be obscured")
        End If
    End Sub
End Class
$vbLabelText   $csharpLabel

Bu, barkod işlemi başlamadan önce iki ayrı lisans anahtarı sistemini yönetmek için tamamen var olan 15 satırlık bir kurucudur. IsRuntimeUnlocked koruyucu isteğe bağlı değildir — onsuz, hizmet, çalışma zamanı anahtarının eksik veya yanlış yapılandırıldığı herhangi bir ortamda sessizce bozuk değerler döndürecektir.

IronBarcode Yaklaşımı

using IronBarCode;

// In Program.cs or startup configuration
IronBarCode.License.LicenseKey = "YOUR-KEY";
using IronBarCode;

// In Program.cs or startup configuration
IronBarCode.License.LicenseKey = "YOUR-KEY";
Imports IronBarCode

' In Program.vb or startup configuration
IronBarCode.License.LicenseKey = "YOUR-KEY"
$vbLabelText   $csharpLabel

Tam lisanslama kurulumu budur. Ayrı bir çalışma zamanı kilidi açma, çözüm adı yok, iki argümanlı UnlockRuntime çağrısı yok. Docker'da, bu bir başlatma sırasında okunan ortam değişkeni haline gelir. Bir CI/CD hatında, tek bir gizli. Bir konteyner düzenleyicide, bu bir ortama enjekte edilen bir ortam değişkenidir.

Barkod Okuma

Barkod okuma, iki kutüphanenin yapılandırma felsefeleri arasındaki farkı ortaya çıkarır — BarcodeXpress, açık format numaralandırma ve bir özellik tabanlı kurulum API'sı gerektirir, oysaIronBarcodeher şeyi tek bir metod çağrısından otomatik olarak tanımlar.

BarcodeXpress Yaklaşımı

BarcodeXpress ile okuma, bir sabit ve bir değer alan SetPropertyValue aracılığıyla okuyucunun yapılandırılmasını ve ardından sonuçları almak için Analyze() çağrısının yapılmasını içerir:

using Accusoft.BarcodeXpressSdk;

public IEnumerable<string> ReadAllBarcodes(string imagePath)
{
    var barcodeXpress = new BarcodeXpress();
    barcodeXpress.Licensing.SolutionName = "AcmeCorp";
    barcodeXpress.Licensing.SolutionKey = Convert.ToInt64("12345678901234");
    barcodeXpress.Licensing.UnlockRuntime("RuntimeKey", Convert.ToInt64("98765432109876"));

    barcodeXpress.reader.SetPropertyValue(BarcodeXpress.cycBxeSetFilename, imagePath);
    barcodeXpress.reader.BarcodeTypes =
        BarcodeType.LinearBarcode |
        BarcodeType.DataMatrixBarcode |
        BarcodeType.QRCodeBarcode;

    var results = barcodeXpress.reader.Analyze();
    return results.Select(r => r.BarcodeValue);
}
using Accusoft.BarcodeXpressSdk;

public IEnumerable<string> ReadAllBarcodes(string imagePath)
{
    var barcodeXpress = new BarcodeXpress();
    barcodeXpress.Licensing.SolutionName = "AcmeCorp";
    barcodeXpress.Licensing.SolutionKey = Convert.ToInt64("12345678901234");
    barcodeXpress.Licensing.UnlockRuntime("RuntimeKey", Convert.ToInt64("98765432109876"));

    barcodeXpress.reader.SetPropertyValue(BarcodeXpress.cycBxeSetFilename, imagePath);
    barcodeXpress.reader.BarcodeTypes =
        BarcodeType.LinearBarcode |
        BarcodeType.DataMatrixBarcode |
        BarcodeType.QRCodeBarcode;

    var results = barcodeXpress.reader.Analyze();
    return results.Select(r => r.BarcodeValue);
}
Imports Accusoft.BarcodeXpressSdk

Public Function ReadAllBarcodes(imagePath As String) As IEnumerable(Of String)
    Dim barcodeXpress = New BarcodeXpress()
    barcodeXpress.Licensing.SolutionName = "AcmeCorp"
    barcodeXpress.Licensing.SolutionKey = Convert.ToInt64("12345678901234")
    barcodeXpress.Licensing.UnlockRuntime("RuntimeKey", Convert.ToInt64("98765432109876"))

    barcodeXpress.reader.SetPropertyValue(BarcodeXpress.cycBxeSetFilename, imagePath)
    barcodeXpress.reader.BarcodeTypes = BarcodeType.LinearBarcode Or BarcodeType.DataMatrixBarcode Or BarcodeType.QRCodeBarcode

    Dim results = barcodeXpress.reader.Analyze()
    Return results.Select(Function(r) r.BarcodeValue)
End Function
$vbLabelText   $csharpLabel

cycBxeSetFilename sabiti, işleyecek dosyayı belirtmenin API yoludur. Bu desen — genel bir SetPropertyValue yöntemine sabit bir değer ile birlikte bir değer geçirme — eski COM tabanlı API'lere benzer. Bir belge BarcodeTypes içinde listelenmeyen bir format içeriyorsa, bulunamayacaktır. Belge kaynakları değiştiğinde bu bir bakım yukü haline gelir.

IronBarcode Yaklaşımı

using IronBarCode;

public IEnumerable<string> ReadAllBarcodes(string imagePath)
{
    var results = BarcodeReader.Read(imagePath);
    return results.Select(r => r.Value);
}
using IronBarCode;

public IEnumerable<string> ReadAllBarcodes(string imagePath)
{
    var results = BarcodeReader.Read(imagePath);
    return results.Select(r => r.Value);
}
Imports IronBarCode

Public Function ReadAllBarcodes(imagePath As String) As IEnumerable(Of String)
    Dim results = BarcodeReader.Read(imagePath)
    Return results.Select(Function(r) r.Value)
End Function
$vbLabelText   $csharpLabel

IronBarcode tüm desteklenen simgolojiler arasında formatı otomatik olarak tanımlar. Görüntüde bir Kod 128, bir QR kodu ve bir DataMatrix varsa, hiçbir yapılandırma değişikliği olmadan hepsi de sonuç koleksiyonuna geri döner. Okuma davranışı üzerinde daha fazla kontrol icin, BarcodeReaderOptions sinifi hiz, is parcacigi sayisi ve coklu barkod ayarlarini ortaya koyar.

Yerel PDF okuma, ayni metod ile de mevcuttur:

using IronBarCode;

//YerelPDF support — no separate library needed
var results = BarcodeReader.Read("invoice-batch.pdf");

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

//YerelPDF support — no separate library needed
var results = BarcodeReader.Read("invoice-batch.pdf");

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

'YerelPDF support — no separate library needed
Dim results = BarcodeReader.Read("invoice-batch.pdf")

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

BarcodeXpress PDF'leri yerel olarak okumaz. Oncelikle her sayfayi bir görüntü olarak ayri bir kutuphane kullanarak render etmeniz, sonra bu görüntüleri BarcodeXpress okuyucusuna sunmaniz gerekiyor. Bu, bir bagimlilik ekler, bir donusum adimi ekler ve secilen PDF kutuphanesine bagli olarak ek lisans maliyeti getirir.

Toplu İşleme ve Is Parcalama Guvenligi

Yuksek hacimli barkod işleme, BarcodeXpress'in durumsal örnek modelini ve IronBarcode'un durumsuz statik API'sini ayiran mimari farklarini aciga cikarir.

BarcodeXpress Yaklaşımı

BarcodeXpress örnek tabanlıdır ve reader nesnesi durumlu bir nesnedir. Paralel işlem, her thread icin bir örnek gerektirir ve her thread baglaminda tüm iki katmanli lisans başlatma tekrar edilir:

using Accusoft.BarcodeXpressSdk;
using System.Collections.Generic;

public Dictionary<string, string> ProcessBatch(IEnumerable<string> imagePaths)
{
    var results = new Dictionary<string, string>();

    foreach (var path in imagePaths)
    {
        _barcodeXpress.reader.SetPropertyValue(
            BarcodeXpress.cycBxeSetFilename, path);
        _barcodeXpress.reader.BarcodeTypes =
            BarcodeType.LinearBarcode | BarcodeType.QRCodeBarcode;

        var barcodes = _barcodeXpress.reader.Analyze();
        if (barcodes.Length > 0)
            results[path] = barcodes[0].BarcodeValue;
    }

    return results;
}
using Accusoft.BarcodeXpressSdk;
using System.Collections.Generic;

public Dictionary<string, string> ProcessBatch(IEnumerable<string> imagePaths)
{
    var results = new Dictionary<string, string>();

    foreach (var path in imagePaths)
    {
        _barcodeXpress.reader.SetPropertyValue(
            BarcodeXpress.cycBxeSetFilename, path);
        _barcodeXpress.reader.BarcodeTypes =
            BarcodeType.LinearBarcode | BarcodeType.QRCodeBarcode;

        var barcodes = _barcodeXpress.reader.Analyze();
        if (barcodes.Length > 0)
            results[path] = barcodes[0].BarcodeValue;
    }

    return results;
}
Imports Accusoft.BarcodeXpressSdk
Imports System.Collections.Generic

Public Function ProcessBatch(imagePaths As IEnumerable(Of String)) As Dictionary(Of String, String)
    Dim results As New Dictionary(Of String, String)()

    For Each path In imagePaths
        _barcodeXpress.reader.SetPropertyValue(BarcodeXpress.cycBxeSetFilename, path)
        _barcodeXpress.reader.BarcodeTypes = BarcodeType.LinearBarcode Or BarcodeType.QRCodeBarcode

        Dim barcodes = _barcodeXpress.reader.Analyze()
        If barcodes.Length > 0 Then
            results(path) = barcodes(0).BarcodeValue
        End If
    Next

    Return results
End Function
$vbLabelText   $csharpLabel

Standart Sürüm, dakikada 40 sayfa sinirini da uygular. 40 PPM'deki 100.000 belgeli bir batch, tamamlanmak icin yaklasik 41 saat surer. Profesyonel Sürüm bu siniri kaldirir, ancak daha yuksek bir geliştirici ucreti ile — zaten satin alinmis olan calisma zamani lisanslarina ek olarak.

IronBarcode Yaklaşımı

using IronBarCode;
using System.Collections.Concurrent;
using System.Threading.Tasks;

//IronBarcode— parallel batch with thread-safe static API
var files = Directory.GetFiles("/incoming/scans", "*.png");
var allResults = new ConcurrentBag<string>();

Parallel.ForEach(files, file =>
{
    var r = BarcodeReader.Read(file);
    foreach (var barcode in r)
        allResults.Add($"{file}: {barcode.Value}");
});
using IronBarCode;
using System.Collections.Concurrent;
using System.Threading.Tasks;

//IronBarcode— parallel batch with thread-safe static API
var files = Directory.GetFiles("/incoming/scans", "*.png");
var allResults = new ConcurrentBag<string>();

Parallel.ForEach(files, file =>
{
    var r = BarcodeReader.Read(file);
    foreach (var barcode in r)
        allResults.Add($"{file}: {barcode.Value}");
});
Imports IronBarCode
Imports System.Collections.Concurrent
Imports System.Threading.Tasks

'IronBarcode— parallel batch with thread-safe static API
Dim files = Directory.GetFiles("/incoming/scans", "*.png")
Dim allResults = New ConcurrentBag(Of String)()

Parallel.ForEach(files, Sub(file)
    Dim r = BarcodeReader.Read(file)
    For Each barcode In r
        allResults.Add($"{file}: {barcode.Value}")
    Next
End Sub)
$vbLabelText   $csharpLabel

IronBarcode'un statik yöntemleri durumsuz olduğundan, onların üzerinde Parallel.ForEach yapmak güvenlidir ve herhangi bir örnek izolasyonu gerektirmez. IronBarcode, herhangi bir fiyat katmaninda throughput siniri koymaz. Okuma performansını ayarlamak için BarcodeReaderOptions sınıfı, ReadingSpeed ve MaxParallelThreads ayarlarını sağlar:

using IronBarCode;

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    MaxParallelThreads = 4
};

var results = BarcodeReader.Read("warehouse-scan.png", options);
using IronBarCode;

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    MaxParallelThreads = 4
};

var results = BarcodeReader.Read("warehouse-scan.png", options);
Imports IronBarCode

Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True,
    .MaxParallelThreads = 4
}

Dim results = BarcodeReader.Read("warehouse-scan.png", options)
$vbLabelText   $csharpLabel

ReadingSpeed.Balanced varsayılan. Barkodların temiz olduğu yüksek verimli hatlar için ReadingSpeed.Faster veya hasar görmüş veya düşük kontrastlı görüntüler için ReadingSpeed.Detailed kullanın.

API Eslestirme Referansi

Accusoft BarcodeXpress IronBarcode
new BarcodeXpress() Statik yöntemler — örnek gerekmez
Licensing.SolutionName = "..." IronBarCode.License.LicenseKey = "key"
Licensing.SolutionKey = longValue (removed — not needed)
Licensing.UnlockRuntime(key, solutionKey) (removed — no runtime license concept)
Licensing.IsRuntimeUnlocked (removed — license is always either valid or not)
reader.SetPropertyValue(BarcodeXpress.cycBxeSetFilename, path) BarcodeReader.Read(path)
reader.BarcodeTypes = BarcodeType.LinearBarcode \ ...` (removed — auto-detection handles all formats)
reader.Analyze() (part of BarcodeReader.Read)
result.BarcodeValue result.Value
result.BarcodeType result.Format
writer.BarcodeType = BarcodeType.Code128 BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
writer.BarcodeValue = "data" (first argument to CreateBarcode)
writer.SaveToFile(path) .SaveAsPng(path)
40 PPM Standart siniri Herhangi bir seviyede throughput siniri yok
Degerlendirme: degerler "1234...XXX" olarak gizlenir Deneme: tam degerler, cikis görüntülerinde sadece filigran

Takimlar Accusoft BarcodeXpress'ten IronBarcode'a Gececeginde

40 PPM Duvarinin Otesindeki Olceklendirme

Standart Sürüm'un 40 sayfa dakikada limiti, bir is takimi bir yilin arsivlenmis faturalarinin gunun sonu toplu işlemi kosmaya karar verdiginde cömert gibi gelir. Bu hizda 100.000 belgeli bir batch, tamamlanmak icin yaklasik 41 saat surer. Profesyonel Sürüm'e gecis, zaten satin alinmis calisma zamani lisanslarina ek olarak, daha yuksek geliştirici koltuk maliyeti ile birlikte siniri kaldirir. Satin alma emri imzalandiktan sonra throughput sinirini kesfeden takimlar, toplam kaldirma maliyetinin başlangic tahminlerini asiri sekilde astigini bulurlar.

CI/CD Boruları Lisanslama Karmasigi

Tipik bir CI/CD kurulumu, gecici kapsayicilarda ogeleri calistirir. BarcodeXpress ile, her bir calisma ortami hem SDK anahtari cifti hem de calisma zamani kilidi acma anahtarlarini ayri sir yapmak zorunda kalir. Calisma zamani anahtari eksik ya da konfigüre edilmis ise, yapi basarili olabilir fakat entegrasyon testleri gizlenmis degerler dondurur - test borusunda dikkatlice yazilmis bir test kontrolu olmadan yakalanmasi kolay bir sessiz hatadir.

Izole ve Guvenli Kurulum Gereksinimleri

Bazi ortamlarda - hasta kayitlari isleyen saglik sistemleri, devlet belge işlemleri, finans kurumu arka ofis işlemleri - lisans doğrulamasi dis ağ cagrilari yapamaz. BarcodeXpress'in calisma zamani lisans sistemi, Accusoft'un lisans altyapisini icerir ve sıkı ağ cikis kisitlamalari olan ortamlarda uyum endisesi olabilir. Bu ortamlarda calisan ekipler genellikle lisans doğrulamasinin tamamen yerel oldugu kutuphaneler secmektedir.

Docker ve Konteyner Kurulum

Docker'da BarcodeXpress genellikle ya bilinen bir yolda konteynere bir lisans dosyasi montajini veya bir lisans sunucusu konfiguresini ve konteyneri ona yonlendirmeyi gerektirir. Her iki yaklasim da kurulum karmasikligini arttirir — lisans dosyalari dağıtilmali ve senkronize tutulmali, ve bir lisans sunucusu bakimi gereken ek bir altyapı parcasidir. Mikroservice mimarilerine veya sunucusuz kurulum modellerine gecen takimlar, konfigürasyon dosyasi yaklasimının degismez konteyner görüntülerine temiz bir sekilde aktarilmadigini gorurler.

Degerlendirme Dogrulugui Gereksinimleri

Satin almaya baglamadan once kendi belgelerinin okuma dogrulugunu kontrol etmesi gereken takimlar, BarcodeXpress'in degerlendirme modunu esasen kisitlayici bulurlar. Gerçek dunya belge taramalarina karsi test yapmak — kutuphanenin dusuk kontrastli barkodlari, egik görüntüleri ya da çok barkodlu sayfalari işleyip işlemedigini kontrol etmek — tam kodlanmis degerler gerektirir. Kismi gizlenmis cıktı, kutuphanin bir barkod buldugunu, fakat dogru okuyup okumadigini göstermektedir.

Genel Geçiş Dusunceleri

Örnek Yonetimden Statik Cagrılara

BarcodeXpress, herhangi bir işlemden önce bir BarcodeXpress örneğinin oluşturulmasını ve lisanslanmasını gerektirir. IronBarcode'un statik metotlarına örnek gerekmez. Genellikle geçiş yapan ekipler, yapıcısı büyük ölçüde lisanslama şablonu olan bir BarcodeService sınıfına sahiptir — geçişten sonra, o yapıcı tamamen kaldırılabilir veya tek bir lisans anahtarı atamasına indirilebilir.

BarcodeTypes Enumeration Kaldırılması

Her BarcodeXpress okuma işlemi, aranacak sembolojilerin numaralandırılmasını sağlamak için bir BarcodeTypes bayrak ataması gerektirir.IronBarcodevarsayilan olarak tüm desteklenen formatlari oto-tespit eder. Geçiş sırasında, tüm reader.BarcodeTypes = ... atamaları yedeklemeden silinebilir. Arama alanını sınırlamak için bir performans nedeni varsa, BarcodeReaderOptions, gerekli bir varsayılan yerine açık bir tercih olarak format filtrelemeyi destekler.

Sonuc Ozelligi Isim Değişiklikleri

İki özellik yeniden adlandırması tüm sonuç işleme kodunu etkiler: result.BarcodeValue, result.Value haline gelir ve result.BarcodeType, result.Format haline gelir. Cozum capinda bir arama ve değiştirme bunlarin her ikisini de isler.IronBarcodesonuçları ayrıca harici sonuç işleme kodlarına değişiklik yapmadan ek filtreleme için kullanılabilecek, BarcodeXpress karşılığı olmayan result.Confidence ve result.PageNumber ortaya çıkarır.

Docker Lisans Konfigürasyonu

BarcodeXpress Docker kurulumlari genellikle monte edilmiş bir lisans konfigürasyon dosyası kullanir.IronBarcodebir ortam degiskeni kullanir. Geçiş, yapılandırma dosyası için COPY talimatının kaldırılmasını ve tek bir ortam değişkeni atanmasını içerir. Kubernetes'te, lisans anahtari bir montaji acma hacmi yerine pod spec icinde gizli bir referans olur.

EkIronBarcodeIlkeler

Bu karsilastirmada kapsanan temel özelliklerin otesinde, IronBarcode, BarcodeXpress'in sunmadıgi yetenekler sunmaktadir:

  • Logo ile QR Kodu: QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png"), tarama güvenilirliğini korumak için yapılandırılabilir hata düzeltme seviyesi ile yerel olarak bir QR koduna marka resmi yerleştirir.
  • PDF'lerde Barkod Damgalama: mevcut PDF belgelerine ayrı bir PDF kutuphanesi olmadan dogrudan barkodlari yaz
  • Toplu Ihracat: tüm PDF belgelerini bir kezde isleyin ve sayfa numarası, format, değer ve güven puani ile sayfa basina sonuclar alin

.NET Uyumlulugu ve Gelecek Hazirikligi

IronBarcode,.NET Framework4.6.2 ve sonrasi, .NET Core 3.1 ve .NET 5, 6, 7, 8 ve 9'u destekler. Platform hedefleri Windows x64 ve x86, Linux x64 ve macOS x64 ve ARM'i icerir. BarcodeXpress for .NET Core, eski.NET Frameworksurumunden farkli bir SDK'dir —uygulamalarının hedef cercevesini yükselten takimlar bunu hesaba katmalidir. IronBarcode'un tek paketi, tüm desteklenen calisma zamanlarını kapsar. Regular güncellemeler, 2026'nin sonlarında beklenen .NET 10 uyumunu ve yayinlandiklarında gelecekteki .NET surumlerini garanti eder.

Sonuç

BarcodeXpress ve IronBarcode, ticari .NET barkod kutuphaneleri icin iki farkli tasarım felsefisini temsil etmektedir. BarcodeXpress, SDK erişimi ve üretim kurulumu olarak ayrı lisanslı ürünler olarak seperat bir faturalama, ayrı anahtar sistemleri, ve müdafaa alım gereksinimleri ile ele alır.IronBarcodekookuphaneyi, tüm ortamlari kapsayan tek bir anahtarla bir ürün olarak ele alır, geliştirmeden ürerime kadar.

BarcodeXpress, halihazirda Accusoft ürün ekosisteminde bulunan takimlar icin mantikli bir secimdir — PrizmDoc veya ImageGear kullanan kuruluslar, BarcodeXpress'in API'sini tanıdık bulacak ve Accusoft hesap ilişkilerini konsolide destek için kullanir. Bu takimlar için iki anahtar lisanslama sistemi, yeni bir sürtüsmeden çok yerleşik bir operasyoai musteridir. SDK aynı zamanda belge kaynaklarının iyi kontrol edildiği ve format gereksinimlerinin sabit olduğu ortamlar için de uygundur, bu durum manuel BarcodeTypes belirtimini sürekli bakım yerine kabul edilebilir bir defalık yapılandırma haline getirir.

IronBarcode, lisans yönetim karmasikliğinin operasyonel yüklerini doğrudan etkilediği kapsama yonelimli takımlar icin daha uygundur. Oto-tespit modeli, statik API ve dogal PDF destek, entegrasyon kodunun yüzey alanini azaltir, ve tek anahtar lisanslama modeli, geliştirme, test ve uretim ortamlari boyunca sırlarin yönetimini basitlestirir. Satin alma öncesi okuma doğruluğunu degerlendirmesi gereken takimlar icin, tam deneme cikisi — uretim sonucunda değil, oluşturulan görüntülere filigran — gercekten satin alma öncesi karşılaştırma yapılabilir.

Fiyat farkı her seviyede onemlidir. Tek geliştirici seviyesinde, BarcodeXpress SDK'si artı minimum calisma zamani lisansları ile IronBarcode'un Lite katmanı arasındaki fark önemli. Bu maliyet farkının, Accusoft ekosistem entegrasyonuna ikinci derece önemi olan takimlar için, BarcodeXpress, tutarlı bir secim olarak kalir. Barkod kutuphanelerini kendi degerleriyle degerlendiren takimlar için, degerlendirme modu sınırlamaları, iki anahtar lisanslama ve throughput tavanları kombinasyonu, IronBarcode'u daha net bir seçenek haline getirir.

Sıkça Sorulan Sorular

Accusoft BarcodeXpress nedir?

Accusoft BarcodeXpress, 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.

Accusoft BarcodeXpress ile IronBarcode arasındaki temel farklar nelerdir?

IronBarcode, örnek yönetimi gerektirmeyen statik, durumsuz bir API kullanırken, Accusoft BarcodeXpress 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, Accusoft BarcodeXpress'ye 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, Accusoft BarcodeXpress'in 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, Accusoft BarcodeXpress'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.

Accusoft BarcodeXpress'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.

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

Accusoft BarcodeXpress'ten IronBarcode'a geçiş kolay mı?

Accusoft BarcodeXpress'ten IronBarcode'a geçiş esas olarak örnek tabanlı API çağrılarını IronBarcode'un statik yöntemleriyle değiştirmeyi, lisanslama şablonunu kaldırmayı ve sonuç özelliği adlarını güncellemeyi içerir. Çoğu geçiş, kod eklemek yerine 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