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

