IronBarcode ve ZXing Net kütüphanesinin karşılaştırması
Scandit SDK'dan IronBarcode'a Geçiş
Scandit SDK, gerçek zamanlı mobil barkod algılama için yapılmış bir kamera tarama platformudur. IronBarcode, .NET için sunucu tarafı ve dosya tabanlı barkod işleme kütüphanesidir. Bu iki kütüphane farklı birincil kullanım durumlarına hizmet eder ve birinden diğerine geçiş yalnızca belirli durumlarda ilgili olur.
Bu kılavuz, belgelerde, PDF'lerde veya sunucu tarafı belge akışlarında dosya işleme yapmak için Scandit'in .NET paketlerini kullanan ekipler için geçiş yolunu kapsar - burada Scandit'in kamera boru hattı mimarisi sürtüşme yerine değer yaratır. Temel gereksiniminiz fiziksel nesnelere mobil bir kamera işaret etmek ve artırılmış gerçeklik üst katmanları ile gerçek zamanlı geri bildirim almaksa, Scandit doğru araç olarak kalır ve bu kılavuz geçerli olmaz. Gereksiniminiz yüklenmiş görüntülerden barkod okuma, PDF belgelerinden barkod veri çıkarma veya ASP.NET Core, Azure İşlevleri, Docker konteynerleri veya arka plan işleme hizmetleri yürütmekse, bu kılavuz tamamen geçiş yolu sağlar.
Neden Scandit SDK'dan Geçiş Yapmalı
Kamera İşlem Hattı Aşırı Yükü: Her Scandit entegrasyonu, dağıtım ortamında bir kamera bulunup bulunmadığına bakılmaksızın aynı başlatma sırasıyla başlar: bir DataCaptureContext oluşturun, BarcodeCaptureSettings yapılandırın, etkinleştirecek sembolojileri belirleyin, bir Camera örneği edinin, bunu çerçeve kaynağı olarak atayın, kamerayı aktif duruma getirin ve barkod yakalamayı etkinleştirin. Bu başlatma mevcuttur çünkü Scandit canlı video çerçevelerini işler. Sunucu tarafı dosya işleme için sıra bir fayda sağlamaz ve hedef ortamında eşdeğeri olmayan durumsal karmaşıklık ekler - bir Docker konteynerinde kamera yoktur ve bir Azure İşlevinde çerçeve kaynağı yoktur.
Genel Fiyatlandırma Yok: Scandit fiyatları yayımlamaz. SparkScan, MatrixScan, ID Tarama, AR Üst Kaplamaları ve Ayrıştırıcı, her biri ayrı bir satış talebi gerektiren bireysel fiyatlandırılmış ürünlerdir. Bir bütçe önerisi, satıcı karşılaştırması veya maliyet-fayda analizi, bir satış döngüsüne girmeden tamamlanamaz.IronBarcodefiyatlarını herkese açık listeler — $749, $1,499 veya $2,999 bir seferlik süresiz satın alma olarak — böylece bir satır kod yazılmadan önce sayı sayfada olacaktır.
Zorunlu Semboloji Beyanı: Scandit, bir tarama oturumu başlamadan önce her barkod formatının açık şekilde etkinleştirilmesini gerektirir. Gerçek zamanlı kamera taramayı bu, per-forma işlem yükünü azaltan bir performans optimizasyonudur. Dosya tabanlı belge işleme sırasında, gelen belgeler herhangi bir tedarikçi veya ortaktan herhangi bir barkod formatını taşıyabilirken, zorunlu format beyanı bir kısıtlama olur. Her olası sembolojiyi sıralamak performans faydasını kaldırır; kütüphanenin üstüne format tahmin etme mantığı yazmak mühendislik yükü ekler.
PDF Desteği Yok: Scandit'in API'sinde BarcodeReader.Read("invoice.pdf") için doğrudan bir eşdeğer yoktur. Bir PDF belgesinden barkod çıkarmak, her sayfanın ayrı bir kütüphane kullanarak bir düzlem görüntüye dönüştürülmesini ve ardından bu çizimlerin bir kamera-simülasyon boru hattı üzerinden beslenmesini gerektirir. Bu yöntem, belge işleme iş akışları için rutin olan bir görev için ek bağımlılıklar, ek lisanslama ve önemli mühendislik çabaları gerektirir.
Temel Sorun
Scandit, herhangi bir barkod çalışmalarına başlamadan önce çalışan bir kamera gerektirir.IronBarcode sadece bir dosya yolu gerektirir:
// Scandit SDK: mandatory camera pipeline before first barcode read
var dataCaptureContext = DataCaptureContext.ForLicenseKey("YOUR-SCANDIT-LICENSE");
var settings = BarcodeCaptureSettings.Create();
settings.EnableSymbologies(new HashSet<Symbology>
{
Symbology.Ean13Upca,
Symbology.Ean8,
Symbology.Code128,
Symbology.QrCode
});
var barcodeCapture = BarcodeCapture.Create(dataCaptureContext, settings);
var camera = Camera.GetDefaultCamera();
await dataCaptureContext.SetFrameSourceAsync(camera);
await camera.SwitchToDesiredStateAsync(FrameSourceState.On);
barcodeCapture.IsEnabled = true;
// Results arrive later via BarcodeScanned event callback
// Scandit SDK: mandatory camera pipeline before first barcode read
var dataCaptureContext = DataCaptureContext.ForLicenseKey("YOUR-SCANDIT-LICENSE");
var settings = BarcodeCaptureSettings.Create();
settings.EnableSymbologies(new HashSet<Symbology>
{
Symbology.Ean13Upca,
Symbology.Ean8,
Symbology.Code128,
Symbology.QrCode
});
var barcodeCapture = BarcodeCapture.Create(dataCaptureContext, settings);
var camera = Camera.GetDefaultCamera();
await dataCaptureContext.SetFrameSourceAsync(camera);
await camera.SwitchToDesiredStateAsync(FrameSourceState.On);
barcodeCapture.IsEnabled = true;
// Results arrive later via BarcodeScanned event callback
Imports Scandit.DataCapture.Core
Imports Scandit.DataCapture.Barcode
Imports System.Collections.Generic
' Scandit SDK: mandatory camera pipeline before first barcode read
Dim dataCaptureContext = DataCaptureContext.ForLicenseKey("YOUR-SCANDIT-LICENSE")
Dim settings = BarcodeCaptureSettings.Create()
settings.EnableSymbologies(New HashSet(Of Symbology) From {
Symbology.Ean13Upca,
Symbology.Ean8,
Symbology.Code128,
Symbology.QrCode
})
Dim barcodeCapture = BarcodeCapture.Create(dataCaptureContext, settings)
Dim camera = Camera.GetDefaultCamera()
Await dataCaptureContext.SetFrameSourceAsync(camera)
Await camera.SwitchToDesiredStateAsync(FrameSourceState.On)
barcodeCapture.IsEnabled = True
' Results arrive later via BarcodeScanned event callback
// IronBarcode: direct file reading
// NuGet: dotnet add package IronBarcode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
Console.WriteLine($"{result.Value} ({result.Format})");
// IronBarcode: direct file reading
// NuGet: dotnet add package IronBarcode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
Console.WriteLine($"{result.Value} ({result.Format})");
Imports IronBarCode
' IronBarcode: direct file reading
' NuGet: dotnet add package IronBarcode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
Console.WriteLine($"{result.Value} ({result.Format})")
Next
Tüm kamera boru hattı bloğu - bağlam oluşturma, ayarlar, semboloji etkinleştirme, kamera edinme, çerçeve kaynağı atama, durum geçişi - bir lisans anahtarı atama ve tek bir yöntem çağrısı ile değiştirilir.
IronBarcode vs Scandit SDK: Özellik Karşılaştırması
| Özellik | Scandit SDK | IronBarcode |
|---|---|---|
| Birincil dağıtım | Mobil kamera taraması | Sunucu, bulut, masaüstü dosya işleme |
| Kamera gerekli | Evet | Hayır |
| Görüntü dosya okuma | Tasarlanmamış | Birincil giriş türü |
| PDF barkod çıkarma | Desteklenmiyor | Yerel çok sayfalı destek |
| Akış / bayt dizisi girişi | Desteklenmiyor | Evet |
| Otomatik format algılama | Hayır (belirtmek gerekir) | Evet (varsayılan davranış) |
| Olay odaklı sonuçlar | Evet (BarcodeScanned geri çağrısı) | Hayır (eş zamanlı dönüş) |
| ASP.NET Core / sunucu tarafı | Tasarlanmamış | Tam destekli |
| Azure İşlevleri / sunucusuz | Pratik değil | Tam destekli |
| Docker / Linux | Desteklenmiyor | Tam destekli |
| Barkod oluşturma | Desteklenmiyor | Paket dahil |
| Çoklu barkod algılama | MatrixScan (ayrı ürün) | Paket dahil |
| Fiyatlandırma modeli | Satışlarla iletişime geçin (ürün başına) | Yayımlanmış süresiz aşamalar |
| Tarama başına / cihaz başına ücretler | Evet | Hayır |
Hızlı Başlangıç
Adım 1: NuGet Paketini Değiştirin
Scandit paketlerini kaldırın:
dotnet remove package Scandit.BarcodePicker
dotnet remove package Scandit.DataCapture.Core
dotnet remove package Scandit.DataCapture.Barcode
dotnet remove package Scandit.BarcodePicker
dotnet remove package Scandit.DataCapture.Core
dotnet remove package Scandit.DataCapture.Barcode
IronBarcode'u kurun:
dotnet add package IronBarcode
dotnet add package IronBarcode
Adım 2: Ad Alanlarını Güncelleyin
Scandit ad alanı ithalatlarınıIronBarcode ad alanı ile değiştirin:
// Before (Scandit SDK)
using Scandit.DataCapture.Core;
using Scandit.DataCapture.Barcode;
using Scandit.DataCapture.Barcode.Data;
// After (IronBarcode)
using IronBarCode;
// Before (Scandit SDK)
using Scandit.DataCapture.Core;
using Scandit.DataCapture.Barcode;
using Scandit.DataCapture.Barcode.Data;
// After (IronBarcode)
using IronBarCode;
' Before (Scandit SDK)
Imports Scandit.DataCapture.Core
Imports Scandit.DataCapture.Barcode
Imports Scandit.DataCapture.Barcode.Data
' After (IronBarcode)
Imports IronBarCode
Adım 3: Lisansa İzin Verin
Uygulama başlangıcında lisans başlatmasını ekleyin, DataCaptureContext.ForLicenseKey çağrısını değiştirin:
// Before (Scandit SDK)
var dataCaptureContext = DataCaptureContext.ForLicenseKey("YOUR-SCANDIT-LICENSE");
// After (IronBarcode)
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Before (Scandit SDK)
var dataCaptureContext = DataCaptureContext.ForLicenseKey("YOUR-SCANDIT-LICENSE");
// After (IronBarcode)
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' Before (Scandit SDK)
Dim dataCaptureContext = DataCaptureContext.ForLicenseKey("YOUR-SCANDIT-LICENSE")
' After (IronBarcode)
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Kod Göç Örnekleri
Bir Resim Dosyasından Barkodları Okuma
Statik bir görüntü dosyasını işleme, IronBarcode'da temel desteklenen bir senaryo olup, Scandit'te desteklenmeyen bir iş akışıdır. Scandit SDK, canlı kamera karelerini işler; bir dosyayı okumak, bir bitmap'i çerçeve kaynağı olarak tedavi etmek için yakalama hattını uyarlamayı gerektirir, bu da yerel bir uygulamaya sahip değildir.
Scandit SDK Yaklaşımı:
//Scandit SDKhas no direct file-read API.
// Reading a static image requires constructing a bitmap frame source
// and routing it through the capture pipeline — an unsupported workaround.
// The standard Scandit integration assumes a running camera at all times.
//Scandit SDKhas no direct file-read API.
// Reading a static image requires constructing a bitmap frame source
// and routing it through the capture pipeline — an unsupported workaround.
// The standard Scandit integration assumes a running camera at all times.
' Scandit SDK has no direct file-read API.
' Reading a static image requires constructing a bitmap frame source
' and routing it through the capture pipeline — an unsupported workaround.
' The standard Scandit integration assumes a running camera at all times.
IronBarcode Yaklaşımı:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var results = BarcodeReader.Read("product-label.png");
foreach (var result in results)
{
Console.WriteLine($"Value: {result.Value}");
Console.WriteLine($"Format: {result.Format}");
Console.WriteLine($"Confidence: {result.Confidence}%");
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var results = BarcodeReader.Read("product-label.png");
foreach (var result in results)
{
Console.WriteLine($"Value: {result.Value}");
Console.WriteLine($"Format: {result.Format}");
Console.WriteLine($"Confidence: {result.Confidence}%");
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim results = BarcodeReader.Read("product-label.png")
For Each result In results
Console.WriteLine($"Value: {result.Value}")
Console.WriteLine($"Format: {result.Format}")
Console.WriteLine($"Confidence: {result.Confidence}%")
Next
Görüntülerden barkod okuyunIronBarcode ile herhangi bir hat kurulumuna gerek yoktur. Sonuç koleksiyonu, yöntem döner dönmez kullanılabilir olup, hiçbir olay aboneliği gerektirmez.
Bir PDF Belgesinden Barkodları Çıkarmak
PDF barkod çıkarımı, Scandit'ten geçerken tamamen yeni bir alan olup, herhangi bir PDF desteğine sahip değildir. IronBarcode, PDF belgelerini doğrudan okur ve sonuçları sayfa numarası ile indeksleyerek döndürür.
Scandit SDK Yaklaşımı:
// Scandit SDK: no PDF support.
// Implementing PDF barcode extraction with Scandit requires:
// 1. A separate PDF rendering library to convert pages to raster images
// 2. Routing each rendered image through the camera simulation pipeline
// 3. Correlating results back to page numbers manually
// This is not a supported workflow and requires significant custom engineering.
// Scandit SDK: no PDF support.
// Implementing PDF barcode extraction with Scandit requires:
// 1. A separate PDF rendering library to convert pages to raster images
// 2. Routing each rendered image through the camera simulation pipeline
// 3. Correlating results back to page numbers manually
// This is not a supported workflow and requires significant custom engineering.
' Scandit SDK: no PDF support.
' Implementing PDF barcode extraction with Scandit requires:
' 1. A separate PDF rendering library to convert pages to raster images
' 2. Routing each rendered image through the camera simulation pipeline
' 3. Correlating results back to page numbers manually
' This is not a supported workflow and requires significant custom engineering.
IronBarcode Yaklaşımı:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var results = BarcodeReader.Read("shipping-manifest.pdf");
foreach (var result in results)
{
Console.WriteLine($"Page {result.PageNumber}: {result.Value} ({result.Format})");
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var results = BarcodeReader.Read("shipping-manifest.pdf");
foreach (var result in results)
{
Console.WriteLine($"Page {result.PageNumber}: {result.Value} ({result.Format})");
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim results = BarcodeReader.Read("shipping-manifest.pdf")
For Each result In results
Console.WriteLine($"Page {result.PageNumber}: {result.Value} ({result.Format})")
Next
PDF belgelerinden barkod okuma, sayfa aralığı seçimi ve çoklu barkod işlemesini de içeren tam kılavuz IronBarcode belgelerinde tüm PDF işleme senaryolarını kapsar. Ek bir PDF kitaplık bağımlılığı gerekli değildir.
Olay Geri Çağırmalarını Doğrudan Dönüş Değerlerine Dönüştürme
Scandit, barkod sonuçlarını BarcodeScanned olayı aracılığıyla iletir çünkü canlı kamera taraması doğası gereği eşzamansızdır — kamera, geçerli karede bir barkod algıladığında sonuçlar ulaşır. IronBarcode, dosya tabanlı okuma belirli bir tamamlanma sınırına sahip olduğundan sonuçları bir türlendirilmiş koleksiyon olarak döndürür. Bu, geçişteki en yapısal olarak önemli değişikliklerden biridir.
Scandit SDK Yaklaşımı:
// Scandit SDK: event-driven result delivery
barcodeCapture.BarcodeScanned += (sender, args) =>
{
foreach (var barcode in args.Session.NewlyRecognizedBarcodes)
{
string value = barcode.Data;
string symbology = barcode.Symbology.ToString();
// Processing logic embedded inside event handler
LogBarcodeResult(value, symbology);
UpdateInventory(value);
}
};
// Scan continues indefinitely until camera session is terminated
// Scandit SDK: event-driven result delivery
barcodeCapture.BarcodeScanned += (sender, args) =>
{
foreach (var barcode in args.Session.NewlyRecognizedBarcodes)
{
string value = barcode.Data;
string symbology = barcode.Symbology.ToString();
// Processing logic embedded inside event handler
LogBarcodeResult(value, symbology);
UpdateInventory(value);
}
};
// Scan continues indefinitely until camera session is terminated
Imports System
' Scandit SDK: event-driven result delivery
AddHandler barcodeCapture.BarcodeScanned, Sub(sender, args)
For Each barcode In args.Session.NewlyRecognizedBarcodes
Dim value As String = barcode.Data
Dim symbology As String = barcode.Symbology.ToString()
' Processing logic embedded inside event handler
LogBarcodeResult(value, symbology)
UpdateInventory(value)
Next
End Sub
' Scan continues indefinitely until camera session is terminated
IronBarcode Yaklaşımı:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var results = BarcodeReader.Read("document.png");
foreach (var result in results)
{
// Same processing logic, now in standard control flow
LogBarcodeResult(result.Value, result.Format.ToString());
UpdateInventory(result.Value);
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var results = BarcodeReader.Read("document.png");
foreach (var result in results)
{
// Same processing logic, now in standard control flow
LogBarcodeResult(result.Value, result.Format.ToString());
UpdateInventory(result.Value);
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim results = BarcodeReader.Read("document.png")
For Each result In results
' Same processing logic, now in standard control flow
LogBarcodeResult(result.Value, result.Format.ToString())
UpdateInventory(result.Value)
Next
Olay işlemci geri çağrımlarına gömülen tüm işlem mantığı, standart sırayla çalıştırılacak olan koda taşınır. Hata ayıklama, günlükleme ve aşağı yönlü işlemler, olay yöneticisi desenleri yerine olağan kontrol akışını kullanarak yapılandırılabilir.
ASP.NET Core Dosya Yükleme Uç Noktası
Yüklenen bir dosyadan barkod okuyabilen durumdan bağımsız bir sunucu uç noktası,IronBarcode için birincil sunucu tarafı kullanım senaryosunu temsil eder. Bu desen, Scandit'in kamera hattı mimarisi tarafından desteklenmez.
Scandit SDK Yaklaşımı:
// Scandit SDK: not applicable to ASP.NET Core file upload scenarios.
// The DataCaptureContext requires a camera hardware session.
// There is no mechanism to process an IFormFile through the Scandit pipeline
// without substantial custom camera-simulation infrastructure.
// Scandit SDK: not applicable to ASP.NET Core file upload scenarios.
// The DataCaptureContext requires a camera hardware session.
// There is no mechanism to process an IFormFile through the Scandit pipeline
// without substantial custom camera-simulation infrastructure.
' Scandit SDK: not applicable to ASP.NET Core file upload scenarios.
' The DataCaptureContext requires a camera hardware session.
' There is no mechanism to process an IFormFile through the Scandit pipeline
' without substantial custom camera-simulation infrastructure.
IronBarcode Yaklaşımı:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
[ApiController]
[Route("api/[controller]")]
public class BarcodeController : ControllerBase
{
[HttpPost("scan")]
public IActionResult ScanUploadedDocument(IFormFile file)
{
if (file == null || file.Length == 0)
return BadRequest("No file provided");
using var stream = file.OpenReadStream();
var results = BarcodeReader.Read(stream);
if (!results.Any())
return NotFound("No barcodes detected");
return Ok(results.Select(r => new
{
r.Value,
Format = r.Format.ToString(),
r.PageNumber
}));
}
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;
[ApiController]
[Route("api/[controller]")]
public class BarcodeController : ControllerBase
{
[HttpPost("scan")]
public IActionResult ScanUploadedDocument(IFormFile file)
{
if (file == null || file.Length == 0)
return BadRequest("No file provided");
using var stream = file.OpenReadStream();
var results = BarcodeReader.Read(stream);
if (!results.Any())
return NotFound("No barcodes detected");
return Ok(results.Select(r => new
{
r.Value,
Format = r.Format.ToString(),
r.PageNumber
}));
}
}
Imports IronBarCode
Imports Microsoft.AspNetCore.Mvc
<ApiController>
<Route("api/[controller]")>
Public Class BarcodeController
Inherits ControllerBase
<HttpPost("scan")>
Public Function ScanUploadedDocument(file As IFormFile) As IActionResult
If file Is Nothing OrElse file.Length = 0 Then
Return BadRequest("No file provided")
End If
Using stream = file.OpenReadStream()
Dim results = BarcodeReader.Read(stream)
If Not results.Any() Then
Return NotFound("No barcodes detected")
End If
Return Ok(results.Select(Function(r) New With {
.Value = r.Value,
.Format = r.Format.ToString(),
.PageNumber = r.PageNumber
}))
End Using
End Function
End Class
BarcodeReader.Read yöntemi, Stream doğrudan IFormFile.OpenReadStream()'dan kabul eder ve geçici dosya oluşturulması gerekmez. Sonuçlar, asenkron kamera yönetimi olmadan, istek-yanıt döngüsü içinde eşzamanlı olarak döndürülür.
Birden Çok Belge Arasında Eşzamanlı Toplu İşleme
Yüksek hacimli belge kuyrukları, birden fazla iş parçacığı arasında paralel işlemeye ihtiyaç duyar. IronBarcode'un API'si durumsuz olduğundan, doğası gereği thread-safe'dir ve doğrudan Parallel.ForEach ve eşzamansız görev desenleriyle uyum sağlar.
Scandit SDK Yaklaşımı:
// Scandit SDK: no supported batch file processing pattern.
// The FrameSourceState model assumes a continuous camera session,
// not a queue of discrete documents. Batch processing would require
// one camera simulation pipeline per document or serialized processing
// through a shared pipeline — neither is a supported workflow.
// Scandit SDK: no supported batch file processing pattern.
// The FrameSourceState model assumes a continuous camera session,
// not a queue of discrete documents. Batch processing would require
// one camera simulation pipeline per document or serialized processing
// through a shared pipeline — neither is a supported workflow.
' Scandit SDK: no supported batch file processing pattern.
' The FrameSourceState model assumes a continuous camera session,
' not a queue of discrete documents. Batch processing would require
' one camera simulation pipeline per document or serialized processing
' through a shared pipeline — neither is a supported workflow.
IronBarcode Yaklaşımı:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
using System.Collections.Concurrent;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
MaxParallelThreads = 4
};
var files = Directory.GetFiles("./documents/", "*.pdf");
var allResults = new ConcurrentBag<(string File, BarcodeResult Result)>();
Parallel.ForEach(files, file =>
{
var results = BarcodeReader.Read(file, options);
foreach (var result in results)
allResults.Add((file, result));
});
foreach (var (file, result) in allResults)
Console.WriteLine($"{Path.GetFileName(file)}: {result.Value} ({result.Format})");
// NuGet: dotnet add package IronBarcode
using IronBarCode;
using System.Collections.Concurrent;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
MaxParallelThreads = 4
};
var files = Directory.GetFiles("./documents/", "*.pdf");
var allResults = new ConcurrentBag<(string File, BarcodeResult Result)>();
Parallel.ForEach(files, file =>
{
var results = BarcodeReader.Read(file, options);
foreach (var result in results)
allResults.Add((file, result));
});
foreach (var (file, result) in allResults)
Console.WriteLine($"{Path.GetFileName(file)}: {result.Value} ({result.Format})");
Imports IronBarCode
Imports System.Collections.Concurrent
Imports System.IO
Imports System.Threading.Tasks
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True,
.MaxParallelThreads = 4
}
Dim files = Directory.GetFiles("./documents/", "*.pdf")
Dim allResults As New ConcurrentBag(Of (File As String, Result As BarcodeResult))()
Parallel.ForEach(files, Sub(file)
Dim results = BarcodeReader.Read(file, options)
For Each result In results
allResults.Add((file, result))
Next
End Sub)
For Each item In allResults
Console.WriteLine($"{Path.GetFileName(item.File)}: {item.Result.Value} ({item.Result.Format})")
Next
Asenkron ve çok iş parçacıklı barkod okuma kapsayan ileri düzey modeller için, throughput ayarlama ve iş parçacığı sayısı yapılandırması da dahil olmak üzere IronBarcode belgeleri detaylı bir kılavuz sağlar.
Scandit SDK API'sinden IronBarcode Haritalama Referansı
| Scandit SDK | IronBarcode | Notlar |
|---|---|---|
DataCaptureContext.ForLicenseKey("key") |
IronBarCode.License.LicenseKey = "key" |
Tek görev; bağlam nesnesi yok |
BarcodeCaptureSettings.Create() |
new BarcodeReaderOptions() |
İsteğe bağlı; temel okuma için gerekli değil |
settings.EnableSymbologies(Symbology.Code128, ...) |
(not needed) | IronBarcode tüm formatları otomatik olarak algılar |
Camera.GetDefaultCamera() |
(not applicable) | Kamera kavramı yok |
dataCaptureContext.SetFrameSourceAsync(camera) |
(not applicable) | Çerçeve kaynağı yok |
camera.SwitchToDesiredStateAsync(FrameSourceState.On) |
(not applicable) | Kamera durum makinesi yok |
barcodeCapture.IsEnabled = true |
BarcodeReader.Read(path) |
Tek bir çağrı okumayı başlatır |
BarcodeScanned += olay işleyicisi |
Dönüş değeri üzerinde Standart foreach |
Olay sistemi gerekli değil |
args.Session.NewlyRecognizedBarcodes |
BarcodeReader.Read() dönüş değeri |
Doğrudan koleksiyon |
barcode.Data |
result.Value |
Aynı anlamsal içerik |
barcode.Symbology |
result.Format |
Eşdeğer format numaralandırması |
using Scandit.DataCapture.Core |
using IronBarCode |
Tek bir isim alanı |
using Scandit.DataCapture.Barcode |
using IronBarCode |
Aynı isim alanında dahil |
| SparkScan ürünü | BarcodeReader.Read(path) |
Ayrı ürün gerekmez |
| MatrixScan ürünü | BarcodeReaderOptions { ExpectMultipleBarcodes = true } |
Ana pakete dahil |
Yaygın Göç Sorunları ve Çözümleri
Sorun 1: Kamera Hattı Kodunun Doğrudan Çevirisi Yok
Scandit SDK: DataCaptureContext, BarcodeCaptureSettings, Camera ve BarcodeCapture kurulum bloğu, eşzamansız durum geçişleriyle 7 ila 10 satır başlangıç kodunu kapsar.
Çözüm: Bu blok tamamen silinir. IronBarcode'un dosya tabanlı API'si herhangi bir oturum başlatma gerektirmediği için eşdeğeri yoktur. Tüm bloğu şununla değiştirin:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Sorun 2: BarcodeScanned Olay Yöneticisi Mantığı
Scandit SDK: İşleme mantığı, BarcodeScanned += olay işleyici lambda fonksiyonlarında veya metodlarında gömülüdür. Bu desen IronBarcode içinde mevcut değildir.
Çözüm: İşleyicinin gövdesini BarcodeReader.Read çağrısından sonra gelen standart koda taşıyın:
// Before: event handler
barcodeCapture.BarcodeScanned += (s, args) =>
{
foreach (var b in args.Session.NewlyRecognizedBarcodes)
Console.WriteLine(b.Data);
};
// After: direct iteration
foreach (var result in BarcodeReader.Read("document.png"))
Console.WriteLine(result.Value);
// Before: event handler
barcodeCapture.BarcodeScanned += (s, args) =>
{
foreach (var b in args.Session.NewlyRecognizedBarcodes)
Console.WriteLine(b.Data);
};
// After: direct iteration
foreach (var result in BarcodeReader.Read("document.png"))
Console.WriteLine(result.Value);
Imports System
' Before: event handler
AddHandler barcodeCapture.BarcodeScanned, Sub(s, args)
For Each b In args.Session.NewlyRecognizedBarcodes
Console.WriteLine(b.Data)
Next
End Sub
' After: direct iteration
For Each result In BarcodeReader.Read("document.png")
Console.WriteLine(result.Value)
Next
Sorun 3: EnableSymbologies Çağrılarının Kod Tabanı İçinde Dağılmış Olması
Scandit SDK: Kod tabanında birden fazla yer, farklı tarama bağlamları için farklı semboloji setleriyle settings.EnableSymbologies(...) çağrılabilir.
Çözüm: Tüm EnableSymbologies çağrılarını kaldırın. IronBarcode, varsayılan olarak tüm desteklenen formatları otomatik olarak algılar. Belirli senaryolarda performans için format kısıtlaması gerekiyorsa, BarcodeReaderOptions.ExpectBarcodeTypes kullanın:
var options = new BarcodeReaderOptions
{
ExpectBarcodeTypes = BarcodeEncoding.Code128 | BarcodeEncoding.QRCode
};
var results = BarcodeReader.Read("document.png", options);
var options = new BarcodeReaderOptions
{
ExpectBarcodeTypes = BarcodeEncoding.Code128 | BarcodeEncoding.QRCode
};
var results = BarcodeReader.Read("document.png", options);
Imports System
Dim options As New BarcodeReaderOptions With {
.ExpectBarcodeTypes = BarcodeEncoding.Code128 Or BarcodeEncoding.QRCode
}
Dim results = BarcodeReader.Read("document.png", options)
Sorun 4: Mevcut Kod Tabanında PDF Okuma Yok
Scandit SDK: Mevcut kod tabanı PDF sayfalarını Scandit hattına beslemeden önce görüntülere dönüştürüyorsa, bu özel oluşturma altyapısına artık ihtiyaç yoktur.
Çözüm: PDF'den görüntüye render etme adımını tamamen kaldırın. PDF yolunu doğrudan IronBarcode'a geçirin:
// Before: render PDF pages to images, then pass each image to Scandit pipeline
// (multiple steps, external PDF library dependency)
// After: pass PDF directly to IronBarcode
var results = BarcodeReader.Read("document.pdf");
// Results include PageNumber property for each detected barcode
// Before: render PDF pages to images, then pass each image to Scandit pipeline
// (multiple steps, external PDF library dependency)
// After: pass PDF directly to IronBarcode
var results = BarcodeReader.Read("document.pdf");
// Results include PageNumber property for each detected barcode
' Before: render PDF pages to images, then pass each image to Scandit pipeline
' (multiple steps, external PDF library dependency)
' After: pass PDF directly to IronBarcode
Dim results = BarcodeReader.Read("document.pdf")
' Results include PageNumber property for each detected barcode
Sorun 5: Asenkron Kamera Başlatma Kalıpları
Scandit SDK: Kamera başlatma, await kullanır, SetFrameSourceAsync ve SwitchToDesiredStateAsync için. Eğer çağrılan kod bu asenkron işlemler etrafında yapılandırıldıysa, onları kaldırmak, asenkron zinciri basitleştirir.
Çözüm: Asenkron kamera başlatmayı tamamen kaldırın. BarcodeReader.Read eşzamansızdır. Bir UI veya sunucu bağlamında yanıt verebilirliği artırmak için eşzamansız yürütme gerekiyorsa, Task.Run içinde sarmalayın:
// Async wrapper for non-blocking execution
var results = await Task.Run(() => BarcodeReader.Read("document.png"));
// Async wrapper for non-blocking execution
var results = await Task.Run(() => BarcodeReader.Read("document.png"));
Imports System.Threading.Tasks
' Async wrapper for non-blocking execution
Dim results = Await Task.Run(Function() BarcodeReader.Read("document.png"))
Scandit SDK Geçiş Kontrol Listesi
Geçiş Öncesi Görevler
Kod tabanında tüm Scandit entegrasyon noktalarını denetleyin:
grep -r "DataCaptureContext\|BarcodeCaptureSettings\|BarcodeCapture" --include="*.cs" .
grep -r "EnableSymbologies\|BarcodeScanned\|NewlyRecognizedBarcodes" --include="*.cs" .
grep -r "using Scandit" --include="*.cs" .
grep -r "barcode\.Data\|barcode\.Symbology\|FrameSourceState" --include="*.cs" .
grep -r "DataCaptureContext\|BarcodeCaptureSettings\|BarcodeCapture" --include="*.cs" .
grep -r "EnableSymbologies\|BarcodeScanned\|NewlyRecognizedBarcodes" --include="*.cs" .
grep -r "using Scandit" --include="*.cs" .
grep -r "barcode\.Data\|barcode\.Symbology\|FrameSourceState" --include="*.cs" .
Tüm tarama context'lerini belgeleyin — gerçek zamanlı kamera taraması ile hangi kod yollarının ilgilendiğini (Scandit'te kalan) ve dosya veya belge işlemenin hangileriyle ilgilendiğini (IronBarcode'a geçiş yapan) belirleyin. Scandit işleme öncesi PDF sayfalarının görüntülere render edildiği tüm yerleri not edin, çünkü bu oluşturma adımı ortadan kalkacaktır.
Kod Güncelleme Görevleri
- Scandit NuGet paketlerini kaldırın (
Scandit.BarcodePicker,Scandit.DataCapture.Core,Scandit.DataCapture.Barcode) IronBarcodeNuGet paketini yükleyinusing Scandit.DataCapture.*içe aktarmalarınıusing IronBarCodeile değiştirinDataCaptureContextbaşlatma bloğunu tamamen silin- Tüm
Camera.GetDefaultCamera()veSetFrameSourceAsyncçağrılarını silin - Tüm
EnableSymbologiesçağrılarını silin barcodeCapture.IsEnabled = true'yiBarcodeReader.Read(filePath)ile değiştirinBarcodeScanned +=olay işleyicileriniBarcodeReader.Read()sonuçları üzerindeforeach'ya dönüştürünbarcode.Data'yiresult.Valueile değiştirinbarcode.Symbology'yiresult.Formatile değiştirin 11.IronBarcode artık PDF'leri doğrudan okuduğunda PDF'den görüntüye render etme hatlarını kaldırın- Uygulama başlangıcında
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"ekleyin
Geçiş Sonrası Testler
Kod güncellemelerinden sonra aşağıdakileri doğrulayın:
-IronBarcode tarafından döndürülen barkod değerlerinin, aynı giriş belgeleri için daha önce Scandit tarafından döndürülen değerlerle eşleştiğini doğrulayın
- Belge setinde desteklenen tüm barkod formatlarının
ExpectBarcodeTypesyapılandırmasına gerek kalmadan algılandığını doğrulayın - Çok sayfalı belgeler için test PDF çıkarımı doğru
PageNumberdeğerlerini döndürdüğünü kontrol edin - ASP.NET Core uç noktalarının, beklenen yük altında kabul edilebilir yanıt süreleri içinde sonuçları döndürdüğünü doğrulayın
- Docker veya konteynerleştirilmiş dağıtımların, kamera donanımı olmadan barkod okuma işlemlerini başarıyla tamamladığını doğrulayın
Parallel.ForEachile eşzamanlı toplu işleme, yarış koşulları olmadan doğru sonuçlar ürettiği testi -IronBarcode lisans anahtarı ile uygulamanın Scandit bağlamının yerini alarak doğru başladığını ve başlatıldığını doğrulayın
IronBarcode'a Geçmenin Temel Faydaları
Kamera İşlem Hattı Aşırı Yükünün Ortadan Kaldırılması: DataCaptureContext başlatma dizisinin kaldırılması, sunucu tarafı kodunda durumsal kamera yönetimi, eşzamansız durum geçişleri ve platforma özgü kamera API'lerini ortadan kaldırır. Ortaya çıkan kod, platform kısıtlamalarını taşımadan Linux, Docker konteynerlerinde veya sunucusuz işlem ortamlarında dağıtımı engellemeyen daha basit ve kısadır.
Doğrudan PDF İşleme: Yerel PDF barkod çıkarması, ayrı bir PDF oluşturma kütüphanesine olan bağımlılığı kaldırır, sayfa-görüntü hattının mühendislik yükünü ve bu bağımlılığı ek lisans maliyetini ortadan kaldırır. Çok sayfalı PDF belgeleri, tek bir yöntem çağrısı ile işlenir ve sayfa indeksli sonuçlar hemen kullanılabilir durumda.
Eşzamanlı Durumdan Bağımsız API: Doğrudan dönüş değeri modeli, olay odaklı geri çağırma desenlerini standart sıralı kodla değiştirir. Hata ayıklama, günlük kaydı ve aşağı akışta işleme, olay aboneliği yönetimi veya asenkron durum makinesi koordinasyonu gerektirmeden mevcut uygulama mimarisi ile doğal olarak entegre olur.
Şeffaf Yayınlanan Fiyatlandırma: $749, $1.499 ve $2.999 ile halka açık olarak listedeki sonsuz lisans katmanları, bütçe önerileri, satıcı karşılaştırmaları ve satın alım süreçlerinin satış döngüsü olmadan ilerlemesine olanak tanır. Lisans maliyeti, bir satır entegrasyon kodu yazılmadan önce belirlenebilir.
Tam Bulut ve Konteyner Desteği: IronBarcode'un durumdan bağımsız, donanımdan bağımsız API'si, Azure Fonksiyonları, AWS Lambda, Linux üzerindeki Docker konteynerleri veya başka bir .NET çalışma zamanı bulunan herhangi bir işlem ortamında, değişiklik yapılmadan çalışır. Bu ortamlarda dağıtım için kamera simülasyonu, donanım bağımlılığı çözümleri ve platforma özgü yapılandırmalar gerekli değildir.
Otomatik Format Algılama: EnableSymbologies beyanlarının kaldırılması, beklenmeyen barkod formatları taşıyan gelen belgelerin kod değişikliklerine gerek kalmadan doğru şekilde işlenmesini sağlar. Gelen belgelerde mevcut format seti değiştiğinde — yeni tedarikçiler, yeni etiket formatları, yeni belge türleri —IronBarcode yeni formatları otomatik olarak işler.
Sıkça Sorulan Sorular
Neden Scandit SDK'den IronBarcode'a göç etmeliyim?
Yaygın nedenler arasında lisanslamanın basitleştirilmesi (SDK + runtime anahtar karmaşıklığının kaldırılması), veri geçiş limitlerinin ortadan kaldırılması, yerel PDF desteği kazanılması, Docker/CI/CD dağıtımının iyileştirilmesi ve üretim kodunda API tekrarlama azalması yer alır.
Scandit API çağrılarını IronBarcode ile nasıl değiştirebilirim?
Örnek oluşturma ve lisanslama tekrarlamalarını IronBarCode.License.LicenseKey = "anahtar" ile değiştirin. Okuyucu çağrılarını BarcodeReader.Read(yol) ile ve yazıcı çağrılarını BarcodeWriter.CreateBarcode(veri, kodlama) ile değiştirin. Statik yöntemler örnek yönetimi gerektirmez.
Scandit SDK'den IronBarcode'a geçerken kodda ne kadar değişiklik oluyor?
Çoğu geçiş daha az kod satırıyla sonuçlanır. Lisanslama tekrarlamaları, örnek oluşturucular ve açık format yapılandırması kaldırılır. Temel okuma/yazma işlemleri, daha temiz sonuç nesneleriyle daha kısa IronBarcode eşdeğerlerine dönüştürülür.
Geçiş sırasında Scandit SDK ve IronBarcode'u bir arada tutmam gerekiyor mu?
Hayır. Çoğu geçiş doğrudan değişim yapılır, paralel bir işletim yerine geçer. Bir hizmet sınıfını bir seferde geçirin, NuGet referansını değiştirin ve sonraki sınıfa geçmeden önce başlatma ve API çağrı desenlerini güncelleyin.
IronBarcode için NuGet paketi adı nedir?
Paket 'IronBarCode' (büyük B ve C harfleriyle). 'Install-Package IronBarCode' veya 'dotnet add package IronBarCode' ile kurun. Kodda kullanılan yönerge 'using IronBarCode;' şeklindedir.
IronBarcode, Docker dağıtımını Scandit SDK'ye kıyasla nasıl kolaylaştırır?
IronBarcode, harici SDK dosyaları veya montajlı lisans yapılandırması olmayan bir NuGet paketidir. Docker'da, IRONBARCODE_LICENSE_KEY ortam değişkenini ayarlayın ve paket lisans doğrulamasını başlangıçta kendi kendine yapar.
Scandit'den geçiş yaptıktan sonra IronBarcode tüm barkod formatlarını otomatik olarak algılar mı?
Evet. IronBarcode, desteklenen tüm formatlardaki sembolojiyi otomatik olarak algılar. Açık BarcodeTypes sayımı gerekli değildir. Format zaten biliniyorsa ve performans önemliyse, BarcodeReaderOptions arama alanını optimize etmek için sınırlamayı sağlar.
IronBarcode, ayrı bir kütüphane olmadan PDF'lerden barkod okuyabiliyor mu?
Evet. BarcodeReader.Read("document.pdf") PDF dosyalarını yerel olarak işlemler. Sonuçlar her barkod için SayfaNumarası, Format, Değer ve Güven içerir. Harici bir PDF render adımı gerekmez.
IronBarcode, paralel barkod işlemeyi nasıl yönetiyor?
IronBarcode'un statik yöntemleri durumsuz ve thread-safe'dir. Dağıtılmış dosya listeleri üzerinde per-thread örnek yönetimi olmadan doğrudan Parallel.ForEach kullanın. BarcodeReaderOptions.MaxParallelThreads, iç thread bütçesini kontrol eder.
Scandit SDK'den IronBarcode'a geçerken hangi sonuç özellikleri değişir?
Yaygın yeniden adlandırmalar: BarcodeValue, Value olur; BarcodeType, Format olur. IronBarcode sonuçları ayrıca Güven ve SayfaNumarası ekler. Çözüm çapında arama-değiştirme, mevcut sonuç işleme kodundaki yeniden adlandırmaları ele alır.
Bir CI/CD hattında IronBarcode lisanslamasını nasıl ayarlayabilirim?
IRONBARCODE_LICENSE_KEY'i bir boru hattı sırrı olarak saklayın ve uygulama başlangıç kodunda IronBarCode.License.LicenseKey olarak atayın. Bir sır, geliştirme, test, aşama ve üretim dahil olmak üzere tüm ortamları kapsar.
IronBarcode, özel biçimlendirmeye sahip QR kodu üretimini destekliyor mu?
Evet. QRCodeWriter.CreateQrCode() özelleştirilmiş renkler için ChangeBarCodeColor(), logo yerleştirme için AddBrandLogo(), yapılandırılabilir hata düzeltme seviyeleri ve PNG, JPG, PDF ve akış dahil birden çok çıktı formatını destekler.

