Altbilgi içeriğine atla
VIDEOLAR

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
$vbLabelText   $csharpLabel
// 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
$vbLabelText   $csharpLabel

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
SHELL

IronBarcode'u kurun:

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

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
$vbLabelText   $csharpLabel

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"
$vbLabelText   $csharpLabel

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.
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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.
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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.
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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.
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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"
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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"))
$vbLabelText   $csharpLabel

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" .
SHELL

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

  1. Scandit NuGet paketlerini kaldırın (Scandit.BarcodePicker, Scandit.DataCapture.Core, Scandit.DataCapture.Barcode)
  2. IronBarcode NuGet paketini yükleyin
  3. using Scandit.DataCapture.* içe aktarmalarını using IronBarCode ile değiştirin
  4. DataCaptureContext başlatma bloğunu tamamen silin
  5. Tüm Camera.GetDefaultCamera() ve SetFrameSourceAsync çağrılarını silin
  6. Tüm EnableSymbologies çağrılarını silin
  7. barcodeCapture.IsEnabled = true'yi BarcodeReader.Read(filePath) ile değiştirin
  8. BarcodeScanned += olay işleyicilerini BarcodeReader.Read() sonuçları üzerinde foreach'ya dönüştürün
  9. barcode.Data'yi result.Value ile değiştirin
  10. barcode.Symbology'yi result.Format ile 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
  11. 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 ExpectBarcodeTypes yapılandırmasına gerek kalmadan algılandığını doğrulayın
  • Çok sayfalı belgeler için test PDF çıkarımı doğru PageNumber değ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.ForEach ile 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.

Lütfen dikkate alınScandit, ilgili sahibinin tescilli markasıdır. Bu site, Scandit ile ilişkili değildir, onaylanmamış veya sponsorluğunda 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

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.

Curtis Chau
Teknik Yazar

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

Daha Fazla Oku

Iron Destek Ekibi

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