Altbilgi içeriğine atla
VIDEOLAR

C#'ta Çok Sayfalı Gif ve Tiff Görüntülerinden Barkodları Nasıl Okursunuz

Scanbot SDK'dan IronBarcode'a Geçiş

Bu rehber, barkod işlemesini Scanbot SDK'dan IronBarcode'a, sunucu tarafı, masaüstü veya genişletilmiş dosya tabanlı senaryolar için taşıyan .NET geliştirme ekipleri için yazılmıştır. Bu birebir bir değişim değildir: Scanbot SDK, bir mobil kamera tarama bileşenidir ve IronBarcode bir dosya ve belge işleme kütüphanesidir. Geçiş, kamera tabanlı modelin karşılayamadığı gereksinimlerle yönlendirilen bir kapsam değişikliğidir. Canlı mobil kamera tarama UI'si ek gereksinimler eklemeden değiştiren ekipler, geçişin uygun olup olmadığını değerlendirmelidir.

MAUI mobil uygulaması için Scanbot ile başlayan ve şimdi ASP.NET Core, masaüstü yapısı veya belge boru hattında barkod işlemesine ihtiyaç duyan ekipler için mekanik geçiş doğrudandır. Temel değişiklik ScanbotSDKMain.Barcode.StartScannerAsync(configuration)'yi BarcodeReader.Read(source) ile değiştirmektir; burada source bir dosya yolu, bir akış, bir byte dizisi veya bir PDF olabilir.

Neden Scanbot SDK'dan Geçiş Yapmalı

Sunucu Tarafı İşleme Gereksinimleri: Scanbot SDK'nın ASP.NET Core, konsol uygulamaları, Azure İşlevleri veya herhangi bir MAUI olmayan projede derlenmesi mümkün değildir. Mobil uygulama aynı zamanda sunucu tarafı bir yoldaş gerektirdiğinde ve barkodları - yüklenen PDF'lerden çıkararak veya gelen belgelerde barkod değerlerini doğrulayarak - işleme ihtiyaç duyduğunda, Scanbot bu sınırı geçemez. IronBarcode, tüm bu bağlamlarda aynı BarcodeReader.Read() API ile çalışır.

Masaüstü MAUI Desteği: Scanbot'un paketi net10.0-android ve net10.0-ios'yi hedefler. Masaüstü hedefleri oluşturmayı başaramaz çünkü Scanbot paketi bu platformlar için derlemeler sağlamaz.IronBarcodeWindows ve macOS MAUI'yi iOS ve Android ile birlikte destekler, bu da aynı paketin çoklu hedefli bir MAUI projesinde platforma özgü dışlamalar veya şartlı referanslar olmadan çalıştığı anlamına gelir.

PDF Belge İş Akışları: Scanbot'ta BarcodeScanner.Read(filePath) yoktur. Bir iş akışı belge yüklemelerinden barkod okuma, taranmış görüntü arşivleri veya PDF faturalar içerecek şekilde evrildiğinde, Scanbot'un mimarisi bunu karşılayamaz.IronBarcode PDF'leri ve görüntüleri doğrudan okur ve her sonuç, barkodun bulunduğu sayfa numarasını beraberinde taşır.

Fiyatlama Modeli Öngörülebilirliği: Scanbot, yıllık sabit bir ücret kullanır. Bazı organizasyonlar için yıllık yenileme, alternatifleri değerlendirme için tetikleyici olur — özellikle proje kapsamı Scanbot'un kapsama alanının dışında kalan sunucu tarafı veya masaüstü hedeflerini içerecek şekilde büyüdüğünde. IronBarcode, yıllık yenileme yükümlülüğünü ortadan kaldıran bir defalık süresiz bir satın alma işlemiştir.

Temel Sorun

Scanbot SDK canlı bir kamera beslemesi gerektirir. Gereksinimler mobilin ötesine geçtiğinde, mevcut bağımlılık üzerinden eşdeğer bir yol yoktur:

// Scanbot SDK: camera-only — no file or server equivalent exists
var configuration = new BarcodeScannerScreenConfiguration
{
    BarcodeFormats = new[] { BarcodeFormat.Code128, BarcodeFormat.QrCode }
};

// This call requires iOS or Android hardware and a MAUI camera UI
// It cannot be redirected to a file path, stream, or server context
var result = await ScanbotSDKMain.Barcode.StartScannerAsync(configuration);
// Scanbot SDK: camera-only — no file or server equivalent exists
var configuration = new BarcodeScannerScreenConfiguration
{
    BarcodeFormats = new[] { BarcodeFormat.Code128, BarcodeFormat.QrCode }
};

// This call requires iOS or Android hardware and a MAUI camera UI
// It cannot be redirected to a file path, stream, or server context
var result = await ScanbotSDKMain.Barcode.StartScannerAsync(configuration);
Imports System.Threading.Tasks

' Scanbot SDK: camera-only — no file or server equivalent exists
Dim configuration As New BarcodeScannerScreenConfiguration With {
    .BarcodeFormats = {BarcodeFormat.Code128, BarcodeFormat.QrCode}
}

' This call requires iOS or Android hardware and a MAUI camera UI
' It cannot be redirected to a file path, stream, or server context
Dim result = Await ScanbotSDKMain.Barcode.StartScannerAsync(configuration)
$vbLabelText   $csharpLabel

IronBarcode, herhangi bir proje bağlamında aynı kaynak türlerini - dosya, akış, bayt dizisi veya PDF - kabul eder:

// IronBarcode: the same call works in MAUI, ASP.NET Core, console, WPF, Azure Functions
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

// From a file — works on any platform
var results = BarcodeReader.Read("invoice.pdf");
foreach (var result in results)
    Console.WriteLine($"Page {result.PageNumber}: {result.Value} ({result.BarcodeType})");
// IronBarcode: the same call works in MAUI, ASP.NET Core, console, WPF, Azure Functions
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

// From a file — works on any platform
var results = BarcodeReader.Read("invoice.pdf");
foreach (var result in results)
    Console.WriteLine($"Page {result.PageNumber}: {result.Value} ({result.BarcodeType})");
Imports IronBarCode

' IronBarcode: the same call works in MAUI, ASP.NET Core, console, WPF, Azure Functions
License.LicenseKey = "YOUR-LICENSE-KEY"

' From a file — works on any platform
Dim results = BarcodeReader.Read("invoice.pdf")
For Each result In results
    Console.WriteLine($"Page {result.PageNumber}: {result.Value} ({result.BarcodeType})")
Next
$vbLabelText   $csharpLabel

IronBarcode vs Scanbot SDK: Özellik Karşılaştırması

Özellik Scanbot SDK IronBarcode
Dosya yolundan giriş Hayır Evet
Akıştan giriş Hayır Evet
Bayt dizisinden giriş Hayır Evet
PDF barkod çıkarma Hayır Evet
Canlı kamera vizörü Evet Hayır (MediaPicker kullanın)
Barkod oluşturma Hayır Evet
iOS MAUI Evet Evet
Android MAUI Evet Evet
Windows MAUI Hayır Evet
macOS MAUI Hayır Evet
ASP.NET Core Hayır Evet
Konsol / Sunucu Hayır Evet
Azure / Lambda / Docker Hayır Evet
.NET Framework 4.6.2+ Hayır Evet
ML hata düzeltme Hayır Evet
Hasar görmüş barkod kurtarma Hayır Evet
Otomatik format algılama Evet Evet
1D formatlar 20+ 30+
2D formatlar QR, DataMatrix, PDF417, Aztek QR, DataMatrix, PDF417, Aztec, MaxiCode
Lisans modeli Yıllık sabit ücret Tek seferlik süresiz
Yayınlanmış fiyatlar Satışla iletişime geçin Evet ($999–$5,999)

Hızlı Başlangıç: Scanbot SDK'dan IronBarcode'a Geçiş

Adım 1: NuGet Paketini Değiştirin

Scanbot paketini kaldırın:

dotnet remove package ScanbotBarcodeSDK.MAUI
dotnet remove package ScanbotBarcodeSDK.MAUI
SHELL

Proje dosyasında koşullu paket referansları kullanılıyorsa, bu girişleri de kaldırın:


<PackageReference Include="ScanbotBarcodeSDK.MAUI" Version="8.0.0" />

<PackageReference Include="ScanbotBarcodeSDK.MAUI" Version="8.0.0" />
XML

IronBarcode'u kurun:

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

IronBarcode, NuGet üzerinde mevcuttur ve .NET 6, 7, 8, 9 ve .NET Framework 4.6.2+ sürümlerini destekler. Bir MAUI çoklu hedef projesi için, tek bir dotnet add package tüm hedeflerde çalışır — platforma özgü koşullu paket referanslarına gerek yoktur.

Adım 2: Ad Alanlarını Güncelleyin

Scanbot ad alanlarınıIronBarcode ad alanı ile değiştirin:

// Remove
using ScanbotSDK.MAUI;

// Add
using IronBarCode;
// Remove
using ScanbotSDK.MAUI;

// Add
using IronBarCode;
Imports IronBarCode
$vbLabelText   $csharpLabel

Adım 3: Lisansa İzin Verin

Scanbot başlangıç bloğunu kaldırın ve bunu IronBarcode lisans anahtarı ile değiştirin. Lisans başlatmasını, proje türüne bağlı olarak MauiProgram.cs, App.xaml.cs veya Program.cs'de uygulama başlangıcında ekleyin:

// Remove this
ScanbotSDKMain.Initialize(new SdkConfiguration
{
    LicenseKey = "YOUR-SCANBOT-LICENSE-KEY",
    LoggingEnabled = false
});

// Add this — one line, placed once at startup
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Remove this
ScanbotSDKMain.Initialize(new SdkConfiguration
{
    LicenseKey = "YOUR-SCANBOT-LICENSE-KEY",
    LoggingEnabled = false
});

// Add this — one line, placed once at startup
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' Remove this
ScanbotSDKMain.Initialize(New SdkConfiguration With {
    .LicenseKey = "YOUR-SCANBOT-LICENSE-KEY",
    .LoggingEnabled = False
})

' Add this — one line, placed once at startup
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Kod Göç Örnekleri

MAUI Fotoğraf Çekimi

Scanbot'un tarama çağrısı tam ekran bir kamera UI'sini açar ve kullanıcı bir barkod taradığında veya iptal ettiğinde geri döner.IronBarcode bir kamera UI sağlamaz; Değişiklik, sistem kamerasını çağırmak, bir fotoğraf çekmek ve görüntü byte'larını BarcodeReader.Read()'ye geçmek için MAUI'nin MediaPicker'sını kullanır.

Scanbot SDK Yaklaşımı:

using ScanbotSDK.MAUI;

private async void ScanButton_Clicked(object sender, EventArgs e)
{
    var configuration = new BarcodeScannerScreenConfiguration
    {
        BarcodeFormats = new[]
        {
            BarcodeFormat.Code128,
            BarcodeFormat.QrCode,
            BarcodeFormat.Ean13
        },
        FinderAspectRatio = new AspectRatio(1, 1),
        TopBarBackgroundColor = Colors.DarkBlue
    };

    var result = await ScanbotSDKMain.Barcode.StartScannerAsync(configuration);

    if (result.Status == OperationResult.Ok)
    {
        foreach (var barcode in result.Barcodes)
            ResultLabel.Text = $"{barcode.Format}: {barcode.Text}";
    }
}
using ScanbotSDK.MAUI;

private async void ScanButton_Clicked(object sender, EventArgs e)
{
    var configuration = new BarcodeScannerScreenConfiguration
    {
        BarcodeFormats = new[]
        {
            BarcodeFormat.Code128,
            BarcodeFormat.QrCode,
            BarcodeFormat.Ean13
        },
        FinderAspectRatio = new AspectRatio(1, 1),
        TopBarBackgroundColor = Colors.DarkBlue
    };

    var result = await ScanbotSDKMain.Barcode.StartScannerAsync(configuration);

    if (result.Status == OperationResult.Ok)
    {
        foreach (var barcode in result.Barcodes)
            ResultLabel.Text = $"{barcode.Format}: {barcode.Text}";
    }
}
Imports ScanbotSDK.MAUI

Private Async Sub ScanButton_Clicked(sender As Object, e As EventArgs)
    Dim configuration = New BarcodeScannerScreenConfiguration With {
        .BarcodeFormats = New BarcodeFormat() {
            BarcodeFormat.Code128,
            BarcodeFormat.QrCode,
            BarcodeFormat.Ean13
        },
        .FinderAspectRatio = New AspectRatio(1, 1),
        .TopBarBackgroundColor = Colors.DarkBlue
    }

    Dim result = Await ScanbotSDKMain.Barcode.StartScannerAsync(configuration)

    If result.Status = OperationResult.Ok Then
        For Each barcode In result.Barcodes
            ResultLabel.Text = $"{barcode.Format}: {barcode.Text}"
        Next
    End If
End Sub
$vbLabelText   $csharpLabel

IronBarcode Yaklaşımı:

// NuGet: dotnet add package IronBarcode
using IronBarCode;

private async void ScanButton_Clicked(object sender, EventArgs e)
{
    var photo = await MediaPicker.CapturePhotoAsync();
    if (photo == null) return;

    using var stream = await photo.OpenReadAsync();
    using var ms = new MemoryStream();
    await stream.CopyToAsync(ms);

    var results = BarcodeReader.Read(ms.ToArray());
    var first = results.FirstOrDefault();
    ResultLabel.Text = first != null
        ? $"{first.BarcodeType}: {first.Value}"
        : "No barcode found";
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;

private async void ScanButton_Clicked(object sender, EventArgs e)
{
    var photo = await MediaPicker.CapturePhotoAsync();
    if (photo == null) return;

    using var stream = await photo.OpenReadAsync();
    using var ms = new MemoryStream();
    await stream.CopyToAsync(ms);

    var results = BarcodeReader.Read(ms.ToArray());
    var first = results.FirstOrDefault();
    ResultLabel.Text = first != null
        ? $"{first.BarcodeType}: {first.Value}"
        : "No barcode found";
}
Imports IronBarCode
Imports System.IO
Imports System.Linq
Imports System.Threading.Tasks

Private Async Sub ScanButton_Clicked(sender As Object, e As EventArgs)
    Dim photo = Await MediaPicker.CapturePhotoAsync()
    If photo Is Nothing Then Return

    Using stream = Await photo.OpenReadAsync()
        Using ms As New MemoryStream()
            Await stream.CopyToAsync(ms)

            Dim results = BarcodeReader.Read(ms.ToArray())
            Dim first = results.FirstOrDefault()
            ResultLabel.Text = If(first IsNot Nothing, $"{first.BarcodeType}: {first.Value}", "No barcode found")
        End Using
    End Using
End Sub
$vbLabelText   $csharpLabel

UX değişikliği, kullanıcının Scanbot'un gömme vizörü üzerindeki bir tarama bölgesi kaplaması olan kamera ekranını görmesidir. İş uygulamaları - envanter, lojistik, belge iş akışları - için sistem kamerası yeterlidir. .NET MAUI barkod tarayıcı eğitimi, izin yönetimini içeren hem iOS hem de Android hedefleri için tam entegrasyon desenini kapsar.

Tarama Seçenekleri ve Konfigürasyonu

Scanbot'un BarcodeScannerScreenConfiguration, tarayıcının hangi formatları kabul edeceğini ve kamera kullanıcı arayüzünün nasıl göründüğünü kontrol eder. IronBarcode'un BarcodeReaderOptions, görüntünün nasıl analiz edileceğini — işleme hızı, çoklu barkod algılama ve benzeri parametreleri kontrol eder. Konfigürasyon kavramları, temel işlemler farklı olduğu için farklı endişelere haritalanır.

Scanbot SDK Yaklaşımı:

var configuration = new BarcodeScannerScreenConfiguration
{
    BarcodeFormats = new[] { BarcodeFormat.Code128, BarcodeFormat.QrCode },
    FinderAspectRatio = new AspectRatio(1, 1),
    FlashEnabled = false,
    OrientationLockMode = OrientationLockMode.Portrait
};

var result = await ScanbotSDKMain.Barcode.StartScannerAsync(configuration);

if (result.Status == OperationResult.Ok)
{
    foreach (var barcode in result.Barcodes)
        Console.WriteLine($"{barcode.Format}: {barcode.Text}");
}
var configuration = new BarcodeScannerScreenConfiguration
{
    BarcodeFormats = new[] { BarcodeFormat.Code128, BarcodeFormat.QrCode },
    FinderAspectRatio = new AspectRatio(1, 1),
    FlashEnabled = false,
    OrientationLockMode = OrientationLockMode.Portrait
};

var result = await ScanbotSDKMain.Barcode.StartScannerAsync(configuration);

if (result.Status == OperationResult.Ok)
{
    foreach (var barcode in result.Barcodes)
        Console.WriteLine($"{barcode.Format}: {barcode.Text}");
}
Imports System
Imports System.Threading.Tasks

Dim configuration As New BarcodeScannerScreenConfiguration With {
    .BarcodeFormats = {BarcodeFormat.Code128, BarcodeFormat.QrCode},
    .FinderAspectRatio = New AspectRatio(1, 1),
    .FlashEnabled = False,
    .OrientationLockMode = OrientationLockMode.Portrait
}

Dim result = Await ScanbotSDKMain.Barcode.StartScannerAsync(configuration)

If result.Status = OperationResult.Ok Then
    For Each barcode In result.Barcodes
        Console.WriteLine($"{barcode.Format}: {barcode.Text}")
    Next
End If
$vbLabelText   $csharpLabel

IronBarcode Yaklaşımı:

using IronBarCode;

// Format detection is automatic — BarcodeReaderOptions controls processing behavior
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = false
};

// Combined with the MediaPicker capture pattern
var photo = await MediaPicker.CapturePhotoAsync();
if (photo == null) return;

using var photoStream = await photo.OpenReadAsync();
using var ms = new MemoryStream();
await photoStream.CopyToAsync(ms);

var results = BarcodeReader.Read(ms.ToArray(), options);
foreach (var result in results)
    Console.WriteLine($"{result.BarcodeType}: {result.Value}");
using IronBarCode;

// Format detection is automatic — BarcodeReaderOptions controls processing behavior
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = false
};

// Combined with the MediaPicker capture pattern
var photo = await MediaPicker.CapturePhotoAsync();
if (photo == null) return;

using var photoStream = await photo.OpenReadAsync();
using var ms = new MemoryStream();
await photoStream.CopyToAsync(ms);

var results = BarcodeReader.Read(ms.ToArray(), options);
foreach (var result in results)
    Console.WriteLine($"{result.BarcodeType}: {result.Value}");
Imports IronBarCode
Imports System.IO

' Format detection is automatic — BarcodeReaderOptions controls processing behavior
Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = False
}

' Combined with the MediaPicker capture pattern
Dim photo = Await MediaPicker.CapturePhotoAsync()
If photo Is Nothing Then Return

Using photoStream = Await photo.OpenReadAsync()
    Using ms As New MemoryStream()
        Await photoStream.CopyToAsync(ms)

        Dim results = BarcodeReader.Read(ms.ToArray(), options)
        For Each result In results
            Console.WriteLine($"{result.BarcodeType}: {result.Value}")
        Next
    End Using
End Using
$vbLabelText   $csharpLabel

Format belirtimi gerekli değildir -IronBarcode tüm desteklenen formatları otomatik olarak algılar. Scanbot yapılandırmasına en doğrudan karşılık gelen BarcodeReaderOptions parametreleri, Speed (işleme derinliğini performansa karşı kontrol eder) ve ExpectMultipleBarcodes (ilk eşleşmeden sonra taramaya devam eder).

Sunucu Tarafı PDF İşleme

Bu senaryo için Scanbot eşdeğeri yok.IronBarcode ile aynı paket, MAUI mobil uygulaması için kurulduğunda, barkodları bir sunucu tarafı ASP.NET Core uç noktasında PDF'lerden çıkarabilir, bu da ekiplerin her iki dağıtım bağlamında da çalışan tek bir barkod bağımlılığına sahip olmasını sağlar.

Scanbot SDK Yaklaşımı:

//Scanbot SDKcannot be used here — the package does not compile
// in ASP.NET Core, Azure Functions, console apps, or any non-MAUI project.
// There is no server-side Scanbot equivalent for this endpoint.
//Scanbot SDKcannot be used here — the package does not compile
// in ASP.NET Core, Azure Functions, console apps, or any non-MAUI project.
// There is no server-side Scanbot equivalent for this endpoint.
'Scanbot SDK cannot be used here — the package does not compile
' in ASP.NET Core, Azure Functions, console apps, or any non-MAUI project.
' There is no server-side Scanbot equivalent for this endpoint.
$vbLabelText   $csharpLabel

IronBarcode Yaklaşımı:

// NuGet: dotnet add package IronBarcode
// Works in ASP.NET Core, console apps, Azure Functions, Docker — the same package as MAUI
using IronBarCode;

[HttpPost("extract-barcodes")]
public async Task<IActionResult> ExtractBarcodes(IFormFile file)
{
    using var ms = new MemoryStream();
    await file.CopyToAsync(ms);

    // Reads all barcodes from all pages of the uploaded PDF
    var results = BarcodeReader.Read(ms.ToArray());
    var values = results.Select(r => new
    {
        r.Value,
        Format = r.Format.ToString(),
        r.PageNumber
    });

    return Ok(values);
}
// NuGet: dotnet add package IronBarcode
// Works in ASP.NET Core, console apps, Azure Functions, Docker — the same package as MAUI
using IronBarCode;

[HttpPost("extract-barcodes")]
public async Task<IActionResult> ExtractBarcodes(IFormFile file)
{
    using var ms = new MemoryStream();
    await file.CopyToAsync(ms);

    // Reads all barcodes from all pages of the uploaded PDF
    var results = BarcodeReader.Read(ms.ToArray());
    var values = results.Select(r => new
    {
        r.Value,
        Format = r.Format.ToString(),
        r.PageNumber
    });

    return Ok(values);
}
Imports IronBarCode
Imports Microsoft.AspNetCore.Mvc
Imports System.IO
Imports System.Threading.Tasks

<HttpPost("extract-barcodes")>
Public Async Function ExtractBarcodes(file As IFormFile) As Task(Of IActionResult)
    Using ms As New MemoryStream()
        Await file.CopyToAsync(ms)

        ' Reads all barcodes from all pages of the uploaded PDF
        Dim results = BarcodeReader.Read(ms.ToArray())
        Dim values = results.Select(Function(r) New With {
            .Value = r.Value,
            .Format = r.Format.ToString(),
            .PageNumber = r.PageNumber
        })

        Return Ok(values)
    End Using
End Function
$vbLabelText   $csharpLabel

IronBarcode çok sayfalı PDF'leri yerel olarak işler — her sonuç, barkodun bulunduğu sayfayı belirten bir PageNumber özelliği taşır. PDF barkod çıkarma kılavuzu, sayfa aralığı seçimi ve büyük belge yığınları için performans iyileştirmesi gibi PDF okuma seçeneklerinin tam kapsamını sunar.

ASP.NET Core Arka Plan İşlemesi

Arşivlenmiş PDF belgelerini işleyen Azure İşlevleri veya Çalışan Hizmetleri gibi yığın işleme iş akışları için IronBarcode, MAUI uygulamasında ve ASP.NET Core denetleyicinde kullanılan aynı API'yi sağlar.

Scanbot SDK Yaklaşımı:

//Scanbot SDKdoes not support this deployment context.
// The package will not compile in Azure Functions or Worker Services.
//Scanbot SDKdoes not support this deployment context.
// The package will not compile in Azure Functions or Worker Services.
'Scanbot SDK does not support this deployment context.
' The package will not compile in Azure Functions or Worker Services.
$vbLabelText   $csharpLabel

IronBarcode Yaklaşımı:

// NuGet: dotnet add package IronBarcode
using IronBarCode;

// Azure Function or Worker Service batch processing
public void ProcessInvoiceBatch(IEnumerable<string> filePaths)
{
    foreach (var filePath in filePaths)
    {
        var results = BarcodeReader.Read(filePath);
        foreach (var result in results)
            Console.WriteLine($"File: {filePath} | Page {result.PageNumber}: {result.Value} ({result.BarcodeType})");
    }
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;

// Azure Function or Worker Service batch processing
public void ProcessInvoiceBatch(IEnumerable<string> filePaths)
{
    foreach (var filePath in filePaths)
    {
        var results = BarcodeReader.Read(filePath);
        foreach (var result in results)
            Console.WriteLine($"File: {filePath} | Page {result.PageNumber}: {result.Value} ({result.BarcodeType})");
    }
}
Imports IronBarCode

Public Sub ProcessInvoiceBatch(filePaths As IEnumerable(Of String))
    For Each filePath In filePaths
        Dim results = BarcodeReader.Read(filePath)
        For Each result In results
            Console.WriteLine($"File: {filePath} | Page {result.PageNumber}: {result.Value} ({result.BarcodeType})")
        Next
    Next
End Sub
$vbLabelText   $csharpLabel

Scanbot SDK API'sinden IronBarcode'a Eşleme Referansı

Scanbot SDK IronBarcode
ScanbotSDKMain.Initialize(new SdkConfiguration { LicenseKey = "..." }) IronBarCode.License.LicenseKey = "key"
new BarcodeScannerScreenConfiguration() new BarcodeReaderOptions()
ScanbotSDKMain.Barcode.StartScannerAsync(configuration) BarcodeReader.Read(path / stream / bytes)
result.Status == OperationResult.Ok results.Any() veya results.FirstOrDefault() != null
result.Barcodes BarcodeReader.Read()'nin dönüş değeri
barcode.Format result.BarcodeType (IronBarCode.BarcodeEncoding)
barcode.Text result.Value
BarcodeFormat.Code128 BarcodeEncoding.Code128
BarcodeFormat.QrCode BarcodeEncoding.QRCode
BarcodeFormat.Ean13 BarcodeEncoding.EAN13
BarcodeScannerScreenConfiguration.FinderAspectRatio Karşılığı yok — görüntü çerçeveleme MediaPicker ile sağlanır
BarcodeScannerScreenConfiguration.FlashEnabled Karşılığı yok — MediaPicker seçeneklerini kullanın
Kamera gerektiren giriş Dosya yolu, akış, bayt dizisi veya PDF
Yalnızca iOS ve Android MAUI Tüm .NET platformları ve proje türleri

Yaygın Göç Sorunları ve Çözümleri

Sorun 1: Canlı Vizör Eşdeğeri Yok

Scanbot SDK: Tarama deneyimine gömme bir canlı kamera vizörü sağlar, bir tarama bölgesi kaplaması, dokunsal geri bildirim ve canlı video akışında sürekli barkod algılama ile birlikte.

Çözüm: Sistemi kamera ve işlem için durağan bir görüntü yakalamak için MAUI'nin MediaPicker.CapturePhotoAsync()'sını kullanın:

var photo = await MediaPicker.CapturePhotoAsync();
if (photo == null) return;

using var stream = await photo.OpenReadAsync();
using var ms = new MemoryStream();
await stream.CopyToAsync(ms);

var results = BarcodeReader.Read(ms.ToArray());
var photo = await MediaPicker.CapturePhotoAsync();
if (photo == null) return;

using var stream = await photo.OpenReadAsync();
using var ms = new MemoryStream();
await stream.CopyToAsync(ms);

var results = BarcodeReader.Read(ms.ToArray());
Imports System.IO

Dim photo = Await MediaPicker.CapturePhotoAsync()
If photo Is Nothing Then Return

Using stream = Await photo.OpenReadAsync()
    Using ms As New MemoryStream()
        Await stream.CopyToAsync(ms)

        Dim results = BarcodeReader.Read(ms.ToArray())
    End Using
End Using
$vbLabelText   $csharpLabel

İş uygulamaları için sistem kamerası yeterlidir. Canlı kaplamanın kullanıcı deneyimi için merkezde olduğu tüketici uygulamaları için, bu UX değişikliğinin geçişe bağlı kalınmadan önce kabul edilebilir olup olmadığını değerlendirin.

Sorun 2: Kamera İzinleri Farklılıkları

Scanbot SDK: Scanbot paketi, arayüz akışının bir parçası olarak kamera izin isteklerini yönetir, bu yüzden kamera izinleri SDK başlatma ve tarayıcı başlatma ile dolaylı olarak yönetiliyordu.

Çözüm: MediaPicker ile, MAUI, izinleri standart mekanizma aracılığıyla yönetir. AndroidManifest.xml'in kamera izin beyanını içerdiğini ve Info.plist'in NSCameraUsageDescription anahtarını içerdiğini doğrulayın. Bunlar genellikle iskele edilmiş MAUI proje şablonlarında bulunur. Uygulama daha önce yalnızca kamera erişimi için Scanbot kullanıyorduysa, test edilmeden önce bu manifest girdilerinin yerinde olduğundan emin olun:


<uses-permission android:name="android.permission.CAMERA" />

<key>NSCameraUsageDescription</key>
<string>This app uses the camera to scan barcodes.</string>

<uses-permission android:name="android.permission.CAMERA" />

<key>NSCameraUsageDescription</key>
<string>This app uses the camera to scan barcodes.</string>
XML

Sorun 3: Windows Derleme Hataları Temizlendi

Scanbot SDK: ScanbotBarcodeSDK.MAUI paketi yalnızca net10.0-android ve net10.0-ios'yi hedefler, net10.0-windows TargetFrameworks'de mevcut olduğunda inşa hatalarına neden olur.

Çözüm: Scanbot paket referansını kaldırmak, Windows yapım hatasını çözer. IronBarcode, platforma şartlı yapılandırma olmadan tüm MAUI hedeflerinde doğru çözülür:

# Verify the build succeeds on all targets after removing Scanbot and adding IronBarcode
dotnet build -f net10.0-windows10.0.19041.0
dotnet build -f net10.0-ios
dotnet build -f net10.0-android
# Verify the build succeeds on all targets after removing Scanbot and adding IronBarcode
dotnet build -f net10.0-windows10.0.19041.0
dotnet build -f net10.0-ios
dotnet build -f net10.0-android
SHELL

Sorun 4: Format Enum Ad Alanı Değişiklikleri

Scanbot SDK: BarcodeFormat.Code128 gibi BarcodeFormat enum değerlerini ScanbotBarcodeSDK.MAUI ad alanından kullanır.

Çözüm: IronBarcode, IronBarCode ad alanında BarcodeEncoding enumunu kullanır. Tüm format referanslarını ve format numaralandırma değerlerini depolayan, karşılaştıran veya bunlara göre geçiş yapan tüm kodları güncelleyin:

// Before (Scanbot)
BarcodeFormat.Code128
BarcodeFormat.QrCode
BarcodeFormat.Ean13

// After (IronBarcode)
BarcodeEncoding.Code128
BarcodeEncoding.QRCode
BarcodeEncoding.EAN13
// Before (Scanbot)
BarcodeFormat.Code128
BarcodeFormat.QrCode
BarcodeFormat.Ean13

// After (IronBarcode)
BarcodeEncoding.Code128
BarcodeEncoding.QRCode
BarcodeEncoding.EAN13
' Before (Scanbot)
BarcodeFormat.Code128
BarcodeFormat.QrCode
BarcodeFormat.Ean13

' After (IronBarcode)
BarcodeEncoding.Code128
BarcodeEncoding.QRCode
BarcodeEncoding.EAN13
$vbLabelText   $csharpLabel

IronBarcode varsayılan olarak desteklenen tüm formatları otomatik olarak algılar — beklenen formatın önceden bilindiği durumlarda performans optimizasyonu için BarcodeReaderOptions ile açık format filtreleme gerekir.

Scanbot SDK Geçiş Kontrol Listesi

Geçiş Öncesi Görevler

Kod tabanını inceleyin ve tümScanbot SDKkullanımlarını belirleyin:

grep -rn "ScanbotSDK.Initialize" --include="*.cs" .
grep -rn "BarcodeScannerScreenConfiguration" --include="*.cs" .
grep -rn "ScanbotSDKMain.Barcode.StartScannerAsync" --include="*.cs" .
grep -rn "result\.Barcodes" --include="*.cs" .
grep -rn "barcode\.Format" --include="*.cs" .
grep -rn "barcode\.Text" --include="*.cs" .
grep -rn "OperationResult\.Ok" --include="*.cs" .
grep -rn "using ScanbotBarcodeSDK" --include="*.cs" .
grep -rn "BarcodeFormat\." --include="*.cs" .
grep -rn "ScanbotSDK.Initialize" --include="*.cs" .
grep -rn "BarcodeScannerScreenConfiguration" --include="*.cs" .
grep -rn "ScanbotSDKMain.Barcode.StartScannerAsync" --include="*.cs" .
grep -rn "result\.Barcodes" --include="*.cs" .
grep -rn "barcode\.Format" --include="*.cs" .
grep -rn "barcode\.Text" --include="*.cs" .
grep -rn "OperationResult\.Ok" --include="*.cs" .
grep -rn "using ScanbotBarcodeSDK" --include="*.cs" .
grep -rn "BarcodeFormat\." --include="*.cs" .
SHELL
  • Tüm tarama çağrı yerlerini belgeleyin ve bunların paylaşılan kod, platforma özgü kod veya kullanıcı arayüzü olay işleyicilerinde olup olmadığını belirtin
  • Herhangi bir sayfanın veya akışın birincil kullanıcı etkileşimi olarak Scanbot'un canlı vizörüne dayandığını belirleyin
  • Kamera izin girişlerinin AndroidManifest.xml ve Info.plist'de mevcut olduğunu onaylayın
  • Scanbot ile bağlantılı koşullu paket referansları için .csproj'yi inceleyin

Kod Güncelleme Görevleri

  1. ScanbotSDK.MAUI NuGet paketini kaldırın
  2. .csproj'den Scanbot için herhangi bir koşullu <PackageReference> girişini kaldırın
  3. IronBarcode NuGet paketini yükleyin
  4. Tüm dosyalarda using ScanbotSDK.MAUI;'yi using IronBarCode; ile değiştirin
  5. Uygulama başlatıldığında ScanbotSDK.Initialize(...)'yi IronBarCode.License.LicenseKey = "key" ile değiştirin
  6. MAUI kamera iş akışlarında ScanbotSDKMain.Barcode.StartScannerAsync(configuration)'yi akış kopyalama ve BarcodeReader.Read(bytes) ile birlikte MediaPicker.CapturePhotoAsync() ile değiştirin
  7. Sunucu tarafı ve dosya işleme bağlamlarında ScanbotSDKMain.Barcode.StartScannerAsync(configuration)'yi BarcodeReader.Read(filePath) veya BarcodeReader.Read(stream) ile değiştirin
  8. result.Status == OperationResult.Ok kontrollerini results.Any() veya results.FirstOrDefault() != null ile değiştirin
  9. result.Barcodes koleksiyon referanslarını BarcodeReader.Read()'nin dönüş değeri ile değiştirin
  10. barcode.Text özelliği erişimini result.Value ile değiştirin
  11. BarcodeFormat.* enum değerlerini BarcodeEncoding.* eşdeğerleri ile değiştirin
  12. İşlem seçeneklerinin gerekli olduğu yerlerde new BarcodeScannerScreenConfiguration()'yi new BarcodeReaderOptions() ile değiştirin

Geçiş Sonrası Testler

  • Windows ve macOS dahil tüm MAUI hedef platformlarında yapının başarılı olduğunu doğrula
  • Fiziksel iOS cihazında ve fiziksel Android cihazında MediaPicker.CapturePhotoAsync() akışını test edin -IronBarcode tarafından kodu çözülen barkod değerlerinin, daha önce Scanbot tarafından çözülenlerle aynı fiziksel barkodlar için eşleştiğini onayla
  • Proje belge işleme iş akışlarını içeriyorsa çok sayfalı PDF çıkarımını test et
  • Format algılamanın BarcodeScannerScreenConfiguration.BarcodeFormats'da önceden yapılandırılmış tüm barkod türlerini kapsadığını doğrulayın
  • Sunucu tarafı uç noktaların veya arka plan işlerinin aynı belge örnekleri üzerine doğru sonuçlar ürettiğini doğrula
  • iOS ve Android'de ilk başlatmada kamera izin uyarılarının doğru göründüğünü doğrula

IronBarcode'a Geçmenin Temel Faydaları

Tüm Dağıtım Hedeflerinde Birleştirilmiş Paket:IronBarcode bir kere yüklenir ve MAUI mobil, MAUI masaüstü, ASP.NET Core, Azure İşlevleri, konsol uygulamaları ve Windows masaüstü uygulamalarında çalışır. Ekipler artık aynı sistemin farklı parçaları için ayrı barkod bağımlılıklarına ihtiyaç duymaz.

PDF ve Belge İşleme:IronBarcode barkodları PDF dosyalarından yerel olarak okur, her sonuç bulunduğu sayfa numarasını taşır. Scanbot modeli içinde daha önce imkansız olan belge iş akışları, BarcodeReader.Read("document.pdf") ile doğrudan operasyonlar haline gelir.

Windows ve macOS Masaüstü MAUI Desteği: Windows veya macOS'u içeren Çok hedefli MAUI projeleri, Scanbot kaldırıldıktan sonra hatasız bir şekilde derlenir.IronBarcode tüm dört MAUI hedefinde aynı barkod okuma API'sini sağlar, Scanbot'un gerektirdiği platforma koşullu bağımlılık yönetimini ortadan kaldırır.

Süresiz Lisans Sahipliği: Tek seferlik satın alma modeli, yıllık yenileme yükümlülüklerini ortadan kaldırır. Bir kez lisanslandığında,IronBarcode satın alınan düzeyde süresiz olarak kullanılabilir, yinelenen ücretler olmaz. Proje kapsamı Scanbot'un mobil kapsamının ötesinde genişleyen ekipler, süresiz modelin uzun vadeli maliyet planlamasıyla daha iyi uyum sağladığını bulurlar.

Barkod Üretimi: IronBarcode, tüm desteklenen formatlarda görüntü dosyaları, akışlar veya gömme içerik olarak barkodlar üretebilir. Hem okuma hem de üretim gerektiren projeler, artık Scanbot'un yanına ikinci bir kütüphane gerektirmez.

Makine Öğrenimi Destekli Okuma: IronBarcode, düşük kontrast, kısmi hasar, zayıf baskı kalitesi gibi zorluk çeken gerçek dünya görüntüleri için makine öğrenimi tabanlı hata düzeltme ve hasarlı barkod kurtarma uygular - standart algılama algoritmaları kod çözemediğinde. Bu yetenek, görüntü kalitesinin değişken olduğu belge işleme iş akışları için özellikle önemlidir.

Lütfen dikkate alınScanbot SDK, ilgili sahibinin tescilli markasıdır. Bu siteScanbot SDKile 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 Scanbot 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.

Scanbot 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.

Scanbot 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 Scanbot SDK ve IronBarcode'u yüklü 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ı Scanbot SDK'ye kıyasla nasıl basitleştirir?

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.

Scanbot'dan 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.

Scanbot 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