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çık
BarcodeTypesyapı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
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
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()veBarcodeWriter.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;
BarcodeTypesnumaralandı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
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"
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
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
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
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
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)
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)
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.

