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

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

Accusoft BarcodeXpress vs IronBarcode: Lisanslama, İşlem Hızı ve API Tavizleri

Bir barkod kütüphanesini deneme sürümü ile değerlendirirken, satın almadan önce görüntülerinizde gerçekten çalışıp çalışmadığını görmek istersiniz. Accusoft BarcodeXpress size bu seçeneği vermez. Değerlendirme modunda, çözümlenen barkod değerleri " UNLICENSED accusoft.com " dizesiyle damgalanır ve üretilen 2D barkodlar aynı damgayı taşır. Kütüphanenin bir barkod bulduğunu doğrulayabilirsiniz, ancak barkodu doğru okuyup okumadığını doğrulayamazsınız. Bu, doğrulamadan önce taahhüt etme durumu ve fiyatlandırmadan önce önemli bir sürtüşme noktasıdır.

Accusoft BarcodeXpress Anlama

Accusoft, yıllardır kurumsal ortamlar için belge görüntüleme yazılımı geliştiriyor. BarcodeXpress, PrizmDoc, ImageGear ve Accusoft Imaging'i içeren daha geniş bir ürün ailesinin parçasıdır. Bu ürünleri şimdiden kullanmakta olan ekipler, tanıdık bir API yüzeyi ile karşılaşır ve mevcut bir Accusoft hesap ilişkisine dayanabilir. Yalnızca barkod kullanımı için, bu bağlam daha az değer sağlar.

Çekirdek SDK, .NET Core için 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. İki 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; statik rahatlık yöntemleri tasarımda yer almaz
  • İki katmanlı lisanslama: SDK lisanslama (SetSolutionName + SetSolutionKey) ve OEM/çalışma zamanı lisanslama (SetOEMLicenseKey) ayrı sistemlerdir ve ayrı satın alma işlemleri gerektirir
  • Değerlendirme modu damgalama: Değerlendirme modunda, çözümlenen değerler " UNLICENSED accusoft.com " ile damgalanır (ve üretilen 2D barkodlar aynı dize ile damgalanır), bu da satın alma öncesi doğruluk testini imkânsız hale getirir
  • Manuel format belirtimi: Okuyucu, aranacak simboility özelliklerini belirtmek için açıkBarcodeTypes yapılandırması gerektirir; belirtilmeyen formatlar tespit edilmez
  • 40 PPM Standart tavanı: Standart Sürüm, işleme hızını dakikada 40 sayfa ile sınırlar; bu sınır çoğu ekip tarafından dağıtımdan sonra, öncesinde değil, fark edilir
  • Yerli PDF desteği yok: PDF dosyaları okuyucu işleyebilsin diye ayrı bir kütüphane yardımıyla görüntüye dönüştürülmelidir
  • Minimum beş çalışma zamanı lisansı: Tek bir sunucu dağıtımı için bile en az beş çalışma zamanı lisansı satın alınması gerekmektedir

İki Anahtar Sisteminin Açıklaması

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

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

// Constructor takes the path to the runtime files (e.g. ".").
var barcodeXpress = new BarcodeXpress(".");

// Step 1: SDK license (for development).
// SetSolutionName and SetSolutionKey are methods, not properties.
// SetSolutionKey takes four 32-bit integers (not a parsed long).
barcodeXpress.Licensing.SetSolutionName("YourCompanyName");
barcodeXpress.Licensing.SetSolutionKey(1, 2, 3, 4);

// Step 2: OEM/runtime license (for production — minimum 5 purchased).
try
{
    barcodeXpress.Licensing.SetOEMLicenseKey("YourOEMLicenseString");
}
catch (Exception ex)
{
    // Without a valid OEM license, the SDK runs in stamped evaluation mode.
    Console.WriteLine($"OEM license activation failed: {ex.Message}");
}
// BarcodeXpress: two separate license keys required
using Accusoft.BarcodeXpressSdk;

// Constructor takes the path to the runtime files (e.g. ".").
var barcodeXpress = new BarcodeXpress(".");

// Step 1: SDK license (for development).
// SetSolutionName and SetSolutionKey are methods, not properties.
// SetSolutionKey takes four 32-bit integers (not a parsed long).
barcodeXpress.Licensing.SetSolutionName("YourCompanyName");
barcodeXpress.Licensing.SetSolutionKey(1, 2, 3, 4);

// Step 2: OEM/runtime license (for production — minimum 5 purchased).
try
{
    barcodeXpress.Licensing.SetOEMLicenseKey("YourOEMLicenseString");
}
catch (Exception ex)
{
    // Without a valid OEM license, the SDK runs in stamped evaluation mode.
    Console.WriteLine($"OEM license activation failed: {ex.Message}");
}
Imports Accusoft.BarcodeXpressSdk

' BarcodeXpress: two separate license keys required

' Constructor takes the path to the runtime files (e.g. ".").
Dim barcodeXpress As New BarcodeXpress(".")

' Step 1: SDK license (for development).
' SetSolutionName and SetSolutionKey are methods, not properties.
' SetSolutionKey takes four 32-bit integers (not a parsed long).
barcodeXpress.Licensing.SetSolutionName("YourCompanyName")
barcodeXpress.Licensing.SetSolutionKey(1, 2, 3, 4)

' Step 2: OEM/runtime license (for production — minimum 5 purchased).
Try
    barcodeXpress.Licensing.SetOEMLicenseKey("YourOEMLicenseString")
Catch ex As Exception
    ' Without a valid OEM license, the SDK runs in stamped evaluation mode.
    Console.WriteLine($"OEM license activation failed: {ex.Message}")
End Try
$vbLabelText   $csharpLabel

SetSolutionKey çifti, SDK'yı kendisi etkinleştirir. SetOEMLicenseKey çağrısı, üretim dağıtım yeteneklerini etkinleştirir. Üretim dağıtımı, barkod değerlerini " UNLICENSED accusoft.com " damgası olmadan döndürebilmesi için her ikisinin de geçerli olması gereklidir.

Kod incelemesinde, bu desen öngörülebilir bir soruyu ortaya çıkarır: "Neden iki ayrı lisans aktivasyonumuz var?" Cevap — Accusoft, SDK lisanslamayı ve dağıtım lisanslamayı ayrı ürünler olarak ayrı faturalandırma ile değerlendirir — API'nın kendisinden her zaman açık değildir. Bu kodu, ilk kurulumdan altı ay sonra bakımını yapan ekipler genellikle hangi anahtarın hangi olduğunu anlamak için belgelere başvurmak zorunda kalır.

Geçerli bir OEM lisansı olmadan, SetOEMLicenseKey atar ve SDK değerlendirme moduna geri döner. Takımlar, genellikle aktivasyonu try/catch içine sararak eğer başarısızlık varsa sessizce damgalı barkod değerleri üretmek yerine sesli hata mesajı kaydedilmesini sağlar:

try
{
    barcodeXpress.Licensing.SetOEMLicenseKey(oemKey);
}
catch (Exception ex)
{
    // In evaluation mode, barcode values are stamped with
    // " UNLICENSED accusoft.com " in the output.
    throw new InvalidOperationException(
        "OEM license activation failed — barcode values will be stamped", ex);
}
try
{
    barcodeXpress.Licensing.SetOEMLicenseKey(oemKey);
}
catch (Exception ex)
{
    // In evaluation mode, barcode values are stamped with
    // " UNLICENSED accusoft.com " in the output.
    throw new InvalidOperationException(
        "OEM license activation failed — barcode values will be stamped", ex);
}
Try
    barcodeXpress.Licensing.SetOEMLicenseKey(oemKey)
Catch ex As Exception
    ' In evaluation mode, barcode values are stamped with
    ' " UNLICENSED accusoft.com " in the output.
    Throw New InvalidOperationException("OEM license activation failed — barcode values will be stamped", ex)
End Try
$vbLabelText   $csharpLabel

Bu koruma, takımların, değerlendirme modunun çıktısı sessizce sonuçları damgalamak yerine çözülmüş değerleri ya da değeri fırlattığını fark ettiğinde ekledikleri desendir.

IronBarcode Anlama

IronBarcode, NuGet paketi dışında hiçbir dış bağımlılığı olmayan bağımsız bir .NET barkod kütüphanesidir. Her iki oluşturma ve okuma, statik fabrika yöntemleriyle yönetilir; bu, yönetilecek bir örnek yaşam döngüsü olmadığı ve uygulama kodunda yaygın olarak bulunan kurucu çağrılarının olmadığı anlamına gelir.

Tek anahtarlı lisans modeli, deneme modunda test ettiğiniz şeyin üretimde de çalıştığı ve tek farkın deneme sırasında oluşturulan barkod görüntüleri üzerinde bir filigran olduğudur. Çözülen değerler her zaman eksiksizdir; bu, satın alıp almama kararından önce gerçek belgelerinizde okuma doğruluğunu kıyaslayabileceğiniz anlamına gelir.

IronBarcode'un ana özellikleri:

  • Statik API tasarımı: BarcodeReader.Read() ve BarcodeWriter.CreateBarcode() durum bilgisi olmayan statik yöntemlerdir — hiçbir örnek yönetimi gerektirmez
  • Tek lisans anahtarı: Bir anahtar, hem geliştirme hem de üretim dağıtımını kapsar; ayrı bir çalışma zamanı lisans katmanı yok
  • Tam deneme değerleri: Deneme modunda, tam çözülen değerler döner; filigran, yalnızca oluşturulan çıktı görüntülerine uygulanır, okuma sonuçlarına değil
  • Otomatik format algılama: IronBarcode, tüm desteklenen formatlar arasında sembolojiyi otomatik olarak algılar; BarcodeTypes numaralandırması gerekli değildir
  • Yerel PDF desteği: BarcodeReader.Read("document.pdf"), PDF dosyalarını ayrı bir işleme adımı olmadan doğrudan işler
  • Kapasite tavanı yok: İşleme hızı, yazılım tarafından dayatılan bir tavanla sınırlı değildir; yalnızca donanım ve ağ kapasitesi sınırları ile sınırlıdır
  • Tasarım itibariyle iplik güvenli: Durum bilgisi olmayan statik yöntemler, herhangi bir sayıda iplikten eşzamanlı olarak çağrılabilir ve örnek izolasyonu gerektirmez

Özellik Karşılaştırması

Özellik Accusoft BarcodeXpress IronBarcode
Lisans modeli SDK lisansı + ayrı çalışma zamanı lisansı Tek süreli anahtar
Değerlendirme modu davranışı Barkod değerleri " UNLICENSED accusoft.com " damgası ile damgalanır Tam değerler döner, yalnızca oluşturulan çıktıda filigran var
Verimlilik limiti (Standart) Dakikada 40 sayfa Verimlilik kısıtlaması yok
PDF desteği Görüntü çıkartımı için harici PDF kütüphanesi gerekli Doğal — BarcodeReader.Read("doc.pdf")
API stili Örnek-tabanlı, söylemli yapılandırma Statik fabrika yöntemleri, akıcı API
Thread güvenliği Her iplik için ayrı örnek gerek Durumsuz statik yöntemler — doğal iplik güvenliği sağlar
Fiyat başlangıç noktası $1,960+ SDK + $2,500+ çalışma zamanı (min 5) $749 kalıcı (Lite, 1 gelişt.)

Ayrıntılı Özellik Karşılaştırması

Özellik Accusoft BarcodeXpress IronBarcode
Lisanslama
Lisans modeli SDK anahtarı + çalışma zamanı anahtarı Tek süreli anahtar
Minimum çalışma zamanı lisansları 5 (hatta 1 sunucu için) Çalışma zamanı lisans konsepti yok
Değerlendirme düzeyi Değerler " UNLICENSED accusoft.com " damgası ile damgalanır Tam değerler, yalnızca çıktı görüntüleri üzerinde filigran
Süresiz lisans Standart değil — satış ekibiyle iletişime geçin Evet, tüm katmanlar
Yıllık yenileme Destek için gereklidir Opsiyonel
Okuma
Format otomatik algılama Manuel — barkod türleri belirtilmelidir Desteklenen tüm formatlarda otomatik
PDF okuma Harici PDF kütüphanesi gereklidir Yerel
Görüntü başına çoklu barkod Evet, BarcodeTypes yapılandırması ile Evet, ExpectMultipleBarcodes seçeneği ile
Sonuç özellikleri BarcodeValue, BarcodeType Value, Format, Confidence, PageNumber
Veri işleme sınırı 40 S/DK (Standart Sürüm) Herhangi bir katmanda sınırlama yok
Üretim
Kod 128 üretimi Evet, writer.BarcodeType üzerinden Evet, BarcodeWriter.CreateBarcode() üzerinden
QR kod üretimi Evet Evet, QRCodeWriter.CreateQrCode() üzerinden
Logolu QR kod Manuel görüntü yerleştirme gerekli AddBrandLogo("logo.png") yerleşik
Çıkış formatları Dosya kaydetme PNG, JPG, PDF, ikili veri, akış
Platform ve Uygulama
.NET Framework Ayrı eski 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 konfigürasyonu Lisans dosyası veya lisans sunucusu Çevre değişkeni
CI/CD entegrasyonu Hem SDK hem de çalışma zamanı anahtarları gerekli Tek bir sır
Toplu İşleme
İş parçacığı güvenliği Her iplik için ayrı örnek gerek Durumsuz — Parallel.ForEach güvenli
Paralel toplu işlem Her iş parçacığı için ayrı örnek yönetimi gerekir Doğrudan Parallel.ForEach desteği

Lisans Mimarisi

BarcodeXpress ve IronBarcode arasındaki lisans karmaşıklığı farkı, üretimde çalışacak başlatma kodu yazarken en görünür haldedir.

BarcodeXpress Yaklaşımı

using Accusoft.BarcodeXpressSdk;

public class BarcodeService
{
    private readonly BarcodeXpress _barcodeXpress;

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

        // Layer 1: SDK license
        _barcodeXpress.Licensing.SetSolutionName("AcmeCorp");
        _barcodeXpress.Licensing.SetSolutionKey(1, 2, 3, 4);

        // Layer 2: OEM/runtime license — separate purchase, minimum 5
        try
        {
            _barcodeXpress.Licensing.SetOEMLicenseKey("OEMLicenseString");
        }
        catch (Exception ex)
        {
            throw new InvalidOperationException(
                "OEM license activation failed — barcode values will be stamped", ex);
        }
    }
}
using Accusoft.BarcodeXpressSdk;

public class BarcodeService
{
    private readonly BarcodeXpress _barcodeXpress;

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

        // Layer 1: SDK license
        _barcodeXpress.Licensing.SetSolutionName("AcmeCorp");
        _barcodeXpress.Licensing.SetSolutionKey(1, 2, 3, 4);

        // Layer 2: OEM/runtime license — separate purchase, minimum 5
        try
        {
            _barcodeXpress.Licensing.SetOEMLicenseKey("OEMLicenseString");
        }
        catch (Exception ex)
        {
            throw new InvalidOperationException(
                "OEM license activation failed — barcode values will be stamped", ex);
        }
    }
}
Imports Accusoft.BarcodeXpressSdk

Public Class BarcodeService
    Private ReadOnly _barcodeXpress As BarcodeXpress

    Public Sub New()
        _barcodeXpress = New BarcodeXpress(".")

        ' Layer 1: SDK license
        _barcodeXpress.Licensing.SetSolutionName("AcmeCorp")
        _barcodeXpress.Licensing.SetSolutionKey(1, 2, 3, 4)

        ' Layer 2: OEM/runtime license — separate purchase, minimum 5
        Try
            _barcodeXpress.Licensing.SetOEMLicenseKey("OEMLicenseString")
        Catch ex As Exception
            Throw New InvalidOperationException("OEM license activation failed — barcode values will be stamped", ex)
        End Try
    End Sub
End Class
$vbLabelText   $csharpLabel

Bu yapıcı tamamen herhangi bir barkod işlemi başlamadan önce iki ayrı lisans aktivasyonunu yönetmek için vardır. SetOEMLicenseKey etrafındaki try/catch isteğe bağlı değildir — onsuz, hizmet herhangi bir ortamda OEM anahtarı eksik veya yanlış yapılandırılmış olduğunda sessizce damgalanmış değerler döndürür.

IronBarcode Yaklaşımı

using IronBarCode;

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

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

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

Bu, lisans kurulumunun tamamıdır. Ayrı bir çalışma zamanı kilidi açma yok, çözüm adı yok, iki argümanlı UnlockRuntime çağrısı yok. Docker'da, bu başlangıçta okunan bir çevre değişkeni haline gelir. Bir CI/CD hattında, bu bir sırdır. Bir konteyner orkestratöründe, bu bir çevre değişkeni olarak kaba eklenir.

Barkodları Okuma

Barkod okuma, iki kütüphanenin yapılandırma felsefeleri arasındaki farkı ortaya çıkarır — BarcodeXpress, açık format enumerasyonu ve bir özellik tabanlı kurulum API'si gerektirirken, IronBarcode, her şeyi tek bir yöntem çağrısıyla otomatik olarak algılar.

BarcodeXpress Yaklaşımı

BarcodeXpress ile okuma, görüntüyü bir System.Drawing.Bitmap'ye yüklemeyi, sembol setini reader.BarcodeTypes'ye bir System.Array olarak BarcodeType değerleriyle atamayı ve sonuç almak için Analyze(bitmap) çağrısını gerektirir. SDK, PDF'leri doğrudan okumaz — belgelenmiş giriş formatları TIFF, JPEG, PNG ve BMP'dir:

using Accusoft.BarcodeXpressSdk;
using System.Drawing;

public IEnumerable<string> ReadAllBarcodes(string imagePath)
{
    var barcodeXpress = new BarcodeXpress(".");
    barcodeXpress.Licensing.SetSolutionName("AcmeCorp");
    barcodeXpress.Licensing.SetSolutionKey(1, 2, 3, 4);
    barcodeXpress.Licensing.SetOEMLicenseKey("OEMLicenseString");

    using var bitmap = new Bitmap(imagePath);

    // BarcodeTypes is a System.Array of BarcodeType values (not a [Flags]
    // enum). Pass Enum.GetValues to scan for everything, or assign a
    // narrower array to restrict the search space.
    barcodeXpress.reader.BarcodeTypes = new[]
    {
        BarcodeType.Code128Barcode,
        BarcodeType.DataMatrixBarcode,
        BarcodeType.QRCodeBarcode
    };

    Result[] results = barcodeXpress.reader.Analyze(bitmap);
    return results.Select(r => r.BarcodeValue);
}
using Accusoft.BarcodeXpressSdk;
using System.Drawing;

public IEnumerable<string> ReadAllBarcodes(string imagePath)
{
    var barcodeXpress = new BarcodeXpress(".");
    barcodeXpress.Licensing.SetSolutionName("AcmeCorp");
    barcodeXpress.Licensing.SetSolutionKey(1, 2, 3, 4);
    barcodeXpress.Licensing.SetOEMLicenseKey("OEMLicenseString");

    using var bitmap = new Bitmap(imagePath);

    // BarcodeTypes is a System.Array of BarcodeType values (not a [Flags]
    // enum). Pass Enum.GetValues to scan for everything, or assign a
    // narrower array to restrict the search space.
    barcodeXpress.reader.BarcodeTypes = new[]
    {
        BarcodeType.Code128Barcode,
        BarcodeType.DataMatrixBarcode,
        BarcodeType.QRCodeBarcode
    };

    Result[] results = barcodeXpress.reader.Analyze(bitmap);
    return results.Select(r => r.BarcodeValue);
}
Imports Accusoft.BarcodeXpressSdk
Imports System.Drawing

Public Function ReadAllBarcodes(imagePath As String) As IEnumerable(Of String)
    Dim barcodeXpress = New BarcodeXpress(".")
    barcodeXpress.Licensing.SetSolutionName("AcmeCorp")
    barcodeXpress.Licensing.SetSolutionKey(1, 2, 3, 4)
    barcodeXpress.Licensing.SetOEMLicenseKey("OEMLicenseString")

    Using bitmap As New Bitmap(imagePath)
        ' BarcodeTypes is a System.Array of BarcodeType values (not a [Flags]
        ' enum). Pass Enum.GetValues to scan for everything, or assign a
        ' narrower array to restrict the search space.
        barcodeXpress.Reader.BarcodeTypes = New BarcodeType() {
            BarcodeType.Code128Barcode,
            BarcodeType.DataMatrixBarcode,
            BarcodeType.QRCodeBarcode
        }

        Dim results As Result() = barcodeXpress.Reader.Analyze(bitmap)
        Return results.Select(Function(r) r.BarcodeValue)
    End Using
End Function
$vbLabelText   $csharpLabel

Analyze bir Bitmap alır ve bir Result[] döndürür. Bir belge, BarcodeTypes dizisinde bulunmayan bir format içeriyorsa, bulunamayacaktır. Belge kaynakları değiştiğinde bu, bakım yükü oluşturur. PDF'ler, Analyze'e beslenmeden önce, ayrı bir kütüphane ile görüntülere önceden işlenmeyi gerektirir.

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, desteklenen tüm sembolojliler arasında formatı otomatik olarak algılar. Görüntü bir Kod 128, bir QR kodu ve bir DataMatrix içeriyorsa, yapılandırma değişikliği olmadan tümü sonuç koleksiyonunda geri döner. BarcodeReaderOptions sınıfı, okuma davranışı üzerinde daha fazla kontrol sağlamak için hız, iş parçacığı sayısı ve çoklu barkod ayarlarını ortaya çıkarır.

Aynı yöntemle yerel PDF okuma da mevcuttur:

using IronBarCode;

// Native PDF 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;

// Native PDF 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

' Native PDF 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 yerel olarak PDF'leri okuyamaz. Her sayfayı ayrı bir kütüphane kullanarak önce bir görüntüye render etmeniz ve ardından bu görüntüleri BarcodeXpress okuyucuya iletmeniz gerekir. Bu, bir bağımlılık ekleyerek, bir dönüşüm adımı ekleyerek ve seçilen PDF kütüphanesine bağlı olarak başka bir lisans maliyeti ekleyerek geliyor.

Toplu İşleme ve İş Parçacığı Güvenliği

Yüksek hacimli barkod işleme, BarcodeXpress'in durumsal örnek modelini ve IronBarcode'un durumsuz statik API'sini arasındaki mimari farkı ortaya çıkarır.

BarcodeXpress Yaklaşımı

BarcodeXpress, örnek tabanlıdır ve reader nesnesi durum bilgilidir. Paralel işleme, her iş parçacığı için bir örnek gerektirir ve tam iki katmanlı lisans başlatması her iş parçacığı bağlamında yinelenir:

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

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

    foreach (var path in imagePaths)
    {
        using var bitmap = new Bitmap(path);

        _barcodeXpress.reader.BarcodeTypes = new[]
        {
            BarcodeType.Code128Barcode,
            BarcodeType.QRCodeBarcode
        };

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

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

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

    foreach (var path in imagePaths)
    {
        using var bitmap = new Bitmap(path);

        _barcodeXpress.reader.BarcodeTypes = new[]
        {
            BarcodeType.Code128Barcode,
            BarcodeType.QRCodeBarcode
        };

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

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

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
        Using bitmap As New Bitmap(path)
            _barcodeXpress.reader.BarcodeTypes = New BarcodeType() {
                BarcodeType.Code128Barcode,
                BarcodeType.QRCodeBarcode
            }

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

    Return results
End Function
$vbLabelText   $csharpLabel

Standart Sürüm, ayrıca dakikada 40 sayfa sınırı uygular. 100.000 belgeyi 40 S/DK ile işlemek yaklaşık 41 saat sürer. Profesyonel Sürüm, bu sınırı kaldırır ama çalışma zamanı lisansları zaten satın alındıktan sonra daha yüksek bir geliştirici koltuk maliyetine sahiptir.

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 durum bilgisi olmadığı için, üzerinde Parallel.ForEach güvenli olup, örnek yalıtımı gerektirmez. IronBarcode, herhangi bir fiyatlandırma katmanında veri işleme sınırı uygulamaz. 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ılandır. Barkodların temiz olduğu yüksek verimli hatlar için ReadingSpeed.Faster veya hasarlı veya düşük kontrastlı görüntüler için ReadingSpeed.Detailed kullanın.

API Eşleme Başvurusu

Accusoft BarcodeXpress IronBarcode
new BarcodeXpress(".") Statik yöntemler — örnek gerektirmez
Licensing.SetSolutionName("...") IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Licensing.SetSolutionKey(int, int, int, int) (removed — not needed)
Licensing.SetOEMLicenseKey(string) (removed — no separate runtime license concept)
try/catch OEM aktivasyonu etrafında (removed — license is always either valid or not)
reader.Analyze(bitmap) (ilk System.Drawing.Bitmap yükler) BarcodeReader.Read(path)
reader.BarcodeTypes = new[] { BarcodeType.Code128Barcode, ... } (removed — auto-detection handles all formats)
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 S/DK Standart sınır Herhangi bir katmanda veri işleme sınırı yok
Değerlendirme: "UNLICENSED accusoft.com" damgası ile değerler Deneme: tam değerler, sadece çıktı görüntülerinde filigran

Takımlar BarcodeXpress'ten IronBarcode'a Geçmeyi Düşündüğünde

40 S/DK Duvarının Ötesinde Ölçeklendirme

Standart Sürümün dakikada 40 sayfa sınırı, bir iş takımı bir yıllık arşivlenmiş faturalar üzerinde gün sonu toplu işlemeyi çalıştırmayı planlayana kadar cömert geliyor. O hızda 100.000 belgeden oluşan bir toplu iş yaklaşık 41 saat sürer. Profesyonel Sürüm'e geçmek bu sınırı kaldırır ama zaten satın alınan çalışma zamanı lisanslarının üstüne daha yüksek bir geliştirici koltuk maliyetine sahiptir. Kayıt satın alma emri imzalandıktan sonra veri işleme sınırını keşfeden ekipler, kaldırmanın toplam maliyetinin başlangıçtaki tahminleri önemli ölçüde aştığını sıklıkla bulurlar.

CI/CD Hattı Lisanslama Karmaşıklığı

Tipik bir CI/CD kurulumu, geçici konteynerlerde derlemeler gerçekleştirir. BarcodeXpress ile her derleme ortamının hem SDK anahtarı çifti hem de çalışma zamanı kilit anahtarlarının mevcut olması, ayrı sırlar olarak yönetilmesi gerekir. Çalışma zamanı anahtarı eksik veya yanlış yapılandırılmışsa, derleme başarılı olabilir ama entegrasyon testleri bulanık değerler döndürür — bir test boru hattında test yapılmayan barkod içeriğine karşı dikkatlice yazılmayan test iddiaları varsa kolayca gözden kaçan sessiz bir hata modudur.

İzole ve Güvenli Dağıtım Gereksinimleri

Bazı ortamlar — hasta kayıtlarını işleyen sağlık sistemleri, hükümet belge iş akışları, finans kurumu arka ofis işlemeleri — lisans doğrulamasının dışa doğru ağ aramaları yapmasına izin veremez. BarcodeXpress'in çalışma zamanı lisans sistemi, Accusoft'un lisanslama altyapısını içerir ve sıkı ağ çıkış kısıtlamalarına sahip ortamlarda uyum endişesi olabilir. Bu ortamlarda faaliyet gösteren ekipler sıklıkla lisans doğrulaması tamamen yerel olan kütüphaneleri seçerler.

Docker ve Konteyner Dağıtımı

Docker'da BarcodeXpress tipik olarak bir konteynerde bilinen bir yola bir lisans dosyası monte etmek ya da bir lisans sunucusu yapılandırmak ve konteyneri ona yönlendirmek gerektirir. Her iki yaklaşım da dağıtım karmaşıklığı ekler — lisans dosyalarının dağıtılması ve senkronize tutulması gerekir ve bir lisans sunucusu bakım yapılması gereken ek bir altyapı parçasıdır. Mikro hizmet mimarilerine veya sunucusuz dağıtım desenlerine geçen ekipler, konfigürasyon dosyası yaklaşımının değiştirilemez konteyner görüntülerine temiz bir şekilde tercüme edilmediğini bulurlar.

Değerlendirme Doğruluğu Gereksinimleri

Satın almadan önce kendi belgeleri üzerinde okuma doğruluğunu doğrulaması gereken ekipler, BarcodeXpress'in değerlendirme modunu temelde sınırlayıcı bulurlar. Gerçek dünya belge taramalarına karşı test etmek — kütüphanenin düşük kontrastlı barkodları, eğik görüntüleri veya çoklu barkodlu sayfaları nasıl işlediğini kontrol etmek — tam çözümlenmiş değerler gerektirir. Kısmen bulanık çıktı, sadece kütüphanenin bir barkod bulduğunu gösterir, doğru okuyup okumadığı değil.

Genel Geçiş Dikkat Edilmesi Gereken Hususlar

Örnek Yönetiminden Statik Çağrılara

BarcodeXpress, herhangi bir işlemden önce BarcodeXpress örneğinin oluşturulmasını ve lisanslanmasını gerektirir. IronBarcode'un statik yöntemlerine örnek gerekmez. Taşınan ekiplerde genellikle yapıcı yapısı büyük ölçüde lisans şablonu olan bir BarcodeService sınıfı vardır - taşındıktan sonra bu yapıcı tamamen kaldırılabilir veya tek bir lisans anahtarı atamasına indirgenebilir.

BarcodeTypes Numaralandırma Kaldırma

Her BarcodeXpress okuma işlemi, aranacak simboiliteleri numaralandırmak için bir BarcodeTypes Dizi ataması gerektirir. IronBarcode, varsayılan olarak tüm desteklenen formatları otomatik olarak algılar. Taşıma sırasında, tüm reader.BarcodeTypes = ... atamaları herhangi bir yedekleme olmadan silinebilir. Arama alanını sınırlamak için bir performans nedeni varsa, BarcodeReaderOptions zorunlu bir varsayılan yerine açık bir seçim olarak format filtrelemeyi destekler.

Sonuç Özellik Adı Değişiklikleri

İki özellik yeniden adlandırması, tüm sonuç işleme kodunu etkiler: result.BarcodeValue, result.Value olur ve result.BarcodeType, result.Format olur. Çözüm genelinde bir arama ve değiştirme her ikisini de ele alır.IronBarcode sonuçları ayrıca, BarcodeXpress eşdeğeri olmayan ve mevcut sonuç işleme kodunda değişiklik yapmadan ek filtreleme için kullanılabilecek result.Confidence ve result.PageNumber özelliğini de ortaya çıkarır.

Docker Lisans Konfigürasyonu

BarcodeXpress Docker dağıtımları tipik olarak monte edilmiş bir lisans konfigürasyon dosyası kullanır.IronBarcode bir çevre değişkeni kullanır. Taşıma, yapılandırma dosyası için COPY talimatının kaldırılmasını ve tek bir ortam değişkeni atamasının eklenmesini içerir. Kubernetes'te, lisans anahtarı pod spezifikasyonunda monte edilmiş bir hacim yerine bir sır referansı haline gelir.

Ek IronBarcode Yetenekleri

Bu karşılaştırmada ele alınan temel özelliklerin ötesinde, IronBarcode, BarcodeXpress'in tekliflerinin bir parçası olmayan yetenekler sağlar:

  • Logo ile QR Kodu: QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png"), bir marka imajını QR Koduna yerel olarak ekler, tarama güvenilirliğini korumak için yapılandırılabilir hata düzeltme seviyesi ile
  • PDF Üzerine Barkod Damgalama: Mevcut PDF belgelerine ayrı bir PDF kütüphanesi olmadan doğrudan barkod yazın
  • Toplu İhracat: Tek bir çağrıda tüm PDF belgelerini işleyin ve sayfa numarası, format, değer ve güven skoru ile sayfa bazında sonuçlar alın

.NET Uyumluluğu ve Geleceğe Hazırlık

IronBarcode, .NET Framework 4.6.2 ve üzerini, .NET Core 3.1'i ve .NET 5, 6, 7, 8 ve 9'u destekler. Platform hedefleri arasında Windows x64 ve x86, Linux x64 ve macOS x64 ve ARM bulunur. Hierousoft'u legacy .NET Framework versiyonundan bir ayıran BarcodeXpress için .NET Core, ayrı bir SDK'dır — uygulamalarının hedeflenen çerçevesini yükselten ekiplerin bunun hesaplamasını yapmaları gerekir. IronBarcode'un tek paketi, desteklenen tüm çalışma zamanlarını kapsar. Yayınlandıkları anda yeni .NET sürümlerini izleyen düzenli güncellemeler.

Sonuç

BarcodeXpress ve IronBarcode, ticari .NET barkod kütüphaneleri için iki farklı tasarım felsefesini temsil eder. BarcodeXpress, SDK erişimini ve üretim dağıtımını, ayrı faturalandırma, ayrı anahtar sistemleri ve ayrı minimum satın alma gereksinimleri olan ayrı lisanslı ürünler olarak ele alır. IronBarcode, kütüphaneyi geliştirmeden üretime kadar her ortamı kapsayan tek bir anahtarla tek bir ürün olarak ele alır.

BarcodeXpress, Accusoft ürünü ekosistemine zaten gömülü olan ekipler için makul bir seçimdir — PrizmDoc veya ImageGear kullanan kuruluşlar, BarcodeXpress'in API'sini tanıdık bulacaklar ve Accusoft hesap ilişkilerini destek için kullanışlı bulacaklar. Bu ekipler için, iki anahtar lisanslama sistemi yeni bir sürtünme yerine yerleşik bir operasyonel desendir. SDK, ayrıca doküman kaynaklarının iyi kontrol edildiği ve format gereksinimlerinin sabit olduğu ortamlar için de uygundur, bu da manuel BarcodeTypes belirtiminin devam eden bir bakım yerine kabul edilebilir bir seferlik yapılandırma olmasını sağlar.

IronBarcode, lisans yönetimi karmaşıklığının doğrudan operasyonel ek yükü etkilediği konteynerler, CI/CD hattı ve bulut ortamlarına dağıtım yapan ekipler için daha uygundur. Otomatik algılama modeli, statik API ve yerel PDF desteği entegrasyon kodunun yüzey alanını azaltır ve tek anahtar lisanslama modeli, geliştirme, test ve üretim ortamları arasında sır yönetimini basitleştirir. Satın almadan önce okuma doğruluğunu değerlendirmesi gereken ekipler için, tam deneme çıktısı — oluşturulan görüntülerde filigran, okuma sonuçlarında değil — gerçek satın alma öncesi karşılaştırmaya olanak tanır.

Fiyat farkı her kademede önemli ölçüde fark yaratır. Tek bir geliştirici düzeyinde, BarcodeXpress SDK artı minimum çalışma zamanı lisansları ile IronBarcode'un Lite katmanı arasındaki fark önemli ölçüde büyüktür. Bu maliyet farkının Accusoft ekosistem entegrasyonuna ikincil olduğu ekipler için BarcodeXpress tutarlı bir seçimdir. Barkod kütüphanelerini kendi niteliklerine göre değerlendiren ekipler için, değerlendirme modu sınırlamaları, iki anahtar lisanslama ve veri işleme sınırları, IronBarcode'u daha anlaşılır bir seçenek yapmaktadır.

[[i: (Accusoft, ilgili sahibinin tescilli ticari markasıdır. Bu site, Accusoft ile ilişkili, desteklenen veya sponsorlu değildir. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadır.)]]

Sıkça Sorulan Sorular

Accusoft BarcodeXpress nedir?

Accusoft BarcodeXpress, .NET projeleri için barkod çözümü seçerken geliştiricilerin değerlendirdiği birkaç alternatiften biridir ve C# uygulamalarında barkod üretimi ve okuması için bir .NET barkod kütüphanesidir.

Accusoft BarcodeXpress ve IronBarcode arasındaki temel farklar nelerdir?

IronBarcode statik ve durum terkibesiz bir API kullanır, bu nedenle örnek yönetimine gerek yokken, Accusoft BarcodeXpress genellikle kullanımdan önce örnek oluşturma ve yapılandırma gerektirir. IronBarcode ayrıca doğal PDF desteği, otomatik format algılama ve tüm ortamlarda tek anahtar lisanslama sağlar.

IronBarcode'un lisanslaması Accusoft BarcodeXpress'ten daha mı kolay?

IronBarcode hem geliştirme hem de üretim dağıtımlarını kapsayan tek bir lisans anahtarı kullanır. Bu, SDK anahtarlarını çalışma zamanı anahtarlarından ayıran lisanslama sistemlerine kıyasla CI/CD hatlarını ve Docker yapılandırmalarını basitleştirir.

IronBarcode, Accusoft BarcodeXpress'in desteklediği tüm barkod formatlarını destekliyor mu?

IronBarcode, QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztek, EAN-13, UPC-A, GS1 ve daha birçokları dahil olmak üzere 30'dan fazla barkod sembolojisini destekler. Format otomatik algılama, açıkça format sayımını gerektirmez.

IronBarcode doğal PDF barkod okuma desteği sunuyor mu?

Evet. IronBarcode, ayrı bir PDF render kütüphanesi gerektirmeden, BarcodeReader.Read('document.pdf') kullanarak PDF dosyalarından doğrudan barkod okur. Sayfa bazında sonuçlar sayfa numarası, barkod formatı, değeri ve güven puanını içerir.

IronBarcode, Accusoft BarcodeXpress'e kıyasla toplu işlemeyi nasıl yapıyor?

IronBarcode'un statik yöntemleri durum terkibesizdir ve doğal olarak thread-safe'dir, bu da thread başına örnek yönetimi olmadan Parallel.ForEach'in doğrudan kullanımına olanak tanır. Herhangi bir fiyatlandırma seviyesinde bir throughput tavanı yoktur.

IronBarcode hangi .NET sürümlerini destekliyor?

IronBarcode, .NET Framework 4.6.2+, .NET Core 3.1 ve .NET 5, 6, 7, 8 ve 9'u tek bir NuGet paketinde destekler. Platform hedefleri arasında Windows x64/x86, Linux x64 ve macOS x64/ARM bulunur.

Bir .NET projesine IronBarcode'u nasıl kurarım?

IronBarcode'u NuGet üzerinden kurun: Paket Yöneticisi Konsolunda 'Install-Package IronBarCode' komutunu veya CLI'da 'dotnet add package IronBarCode' komutunu çalıştırın. Ek bir SDK yükleyicisi veya çalışma zamanı dosyası gerekmez.

Satın almadan önce, Accusoft BarcodeXpress'e kıyasla IronBarcode'u değerlendirebilir miyim?

Evet. IronBarcode'un deneme modu, yalnızca oluşturulan çıktı görüntülerine bir filigran ekleyerek, barkod değerlerini tam olarak döndürür. Satın almadan önce, kendi belgelerinizde okuma doğruluğunu kıyaslayabilirsiniz.

Accusoft BarcodeXpress ve IronBarcode arasındaki fiyat farkı nedir?

IronBarcode, geliştirme ve üretimi kapsayan, sürekli bir tek geliştirici lisansı için $749'dan başlar. Fiyat detayları ve hacim seçenekleri IronBarcode lisanslama sayfasında mevcuttur. Ayrı bir çalışma zamanı lisansı gerekliliği yoktur.

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

Accusoft BarcodeXpress'ten IronBarcode'a geçiş, öncelikle örnek bazlı API çağrılarını IronBarcode'un statik yöntemleriyle değiştirmeyi, lisanslama şablonlarını kaldırmayı ve sonuç özellik adlarını güncellemeyi içerir. Çoğu geçiş işlemi kod azaltmayı içerir.

IronBarcode, logolu QR kodları üretebiliyor mu?

Evet. QRCodeWriter.CreateQrCode().AddBrandLogo('logo.png'), konfigüre edilebilir hata düzeltme ile QR koduna yerel olarak bir marka görüntüsü yerleştirir. Renkli QR kodları, ChangeBarCodeColor() ile de desteklenir.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku

Iron Destek Ekibi

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