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)
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
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
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" />
IronBarcode'u kurun:
dotnet add package IronBarcode
dotnet add package IronBarcode
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
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"
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
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
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
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
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.
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
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.
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
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
İş 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>
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
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
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" .
- 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.xmlveInfo.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
ScanbotSDK.MAUINuGet paketini kaldırın.csproj'den Scanbot için herhangi bir koşullu<PackageReference>girişini kaldırınIronBarcodeNuGet paketini yükleyin- Tüm dosyalarda
using ScanbotSDK.MAUI;'yiusing IronBarCode;ile değiştirin - Uygulama başlatıldığında
ScanbotSDK.Initialize(...)'yiIronBarCode.License.LicenseKey = "key"ile değiştirin - MAUI kamera iş akışlarında
ScanbotSDKMain.Barcode.StartScannerAsync(configuration)'yi akış kopyalama veBarcodeReader.Read(bytes)ile birlikteMediaPicker.CapturePhotoAsync()ile değiştirin - Sunucu tarafı ve dosya işleme bağlamlarında
ScanbotSDKMain.Barcode.StartScannerAsync(configuration)'yiBarcodeReader.Read(filePath)veyaBarcodeReader.Read(stream)ile değiştirin result.Status == OperationResult.Okkontrolleriniresults.Any()veyaresults.FirstOrDefault() != nullile değiştirinresult.Barcodeskoleksiyon referanslarınıBarcodeReader.Read()'nin dönüş değeri ile değiştirinbarcode.Textözelliği erişiminiresult.Valueile değiştirinBarcodeFormat.*enum değerleriniBarcodeEncoding.*eşdeğerleri ile değiştirin- İşlem seçeneklerinin gerekli olduğu yerlerde
new BarcodeScannerScreenConfiguration()'yinew 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.
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.

