Passer de Kit de développement logiciel Scanbot à IronBarcode
Ce guide est destiné aux équipes de développement .NET qui migrent le traitement des codes-barres du SDK Scanbot vers Code-barres IronBarcode pour des scénarios côté serveur, de bureau ou basés sur des fichiers étendus. Il ne s'agit pas d'un remplacement à l'identique : le SDK Scanbot est un composant de numérisation par caméra mobile, et Code-barres IronBarcode est une bibliothèque de traitement de fichiers et de documents. Cette migration correspond à un changement de périmètre motivé par des exigences que le modèle basé uniquement sur la caméra ne peut satisfaire. Les équipes qui remplacent une interface utilisateur de numérisation en direct par caméra mobile sans ajouter d'autres exigences doivent évaluer si la migration est appropriée avant de procéder.
Pour les équipes qui ont commencé avec Scanbot pour une application mobile MAUI et qui ont maintenant besoin du traitement des codes-barres dans ASP.NET Core, une version de bureau ou un pipeline de documents, la migration mécanique est simple. Le changement principal consiste à remplacer ScanbotSDKMain.Barcode.StartScannerAsync(configuration) par BarcodeReader.Read(source), où source est un chemin de fichier, un flux, un tableau d'octets ou un PDF.
Pourquoi migrer depuis le SDK Scanbot ?
Configuration requise pour le traitement côté serveur : le SDK Scanbot ne se compile pas dans ASP.NET Core, les applications console, Azure Functions ou tout projet non-MAUI. Lorsque l'application mobile nécessite un serveur associé qui traite également les codes-barres (en les extrayant des PDF téléchargés ou en validant les valeurs des codes-barres dans les documents entrants), Scanbot ne peut pas franchir cette limite. Code-barres IronBarcode fonctionne dans tous ces contextes avec la même API BarcodeReader.Read().
Support MAUI Desktop : Le package de Scanbot cible net10.0-android et net10.0-ios. Un projet MAUI qui ajoute net10.0-windows ou net10.0-maccatalyst à son TargetFrameworks échouera à construire les cibles de bureau car le package Scanbot ne fournit pas d'assemblages pour ces plateformes. Code-barres IronBarcode prend en charge Windows et macOS MAUI ainsi qu'iOS et Android, ce qui signifie que le même package fonctionne dans un projet MAUI multi-cible sans exclusions spécifiques à la plateforme ni références conditionnelles.
Flux de travail des documents PDF : Il n'y a pas de BarcodeScanner.Read(filePath) dans Scanbot. Lorsque le flux de travail évolue pour inclure la lecture de codes-barres provenant de documents téléchargés, d'archives d'images numérisées ou de factures PDF, l'architecture de Scanbot ne peut pas le prendre en charge. Code-barres IronBarcode lit directement les fichiers PDF et les images, chaque résultat indiquant le numéro de page sur lequel le code-barres a été trouvé.
Prévisibilité du modèle de tarification : Scanbot utilise un forfait annuel. Pour certaines organisations, le renouvellement annuel est le déclencheur pour évaluer des alternatives — en particulier lorsque le périmètre du projet s'est élargi pour inclure des cibles côté serveur ou de bureau qui ne sont pas couvertes par Scanbot. Code-barres IronBarcode est un achat perpétuel unique, éliminant ainsi l'obligation de renouvellement annuel.
Le problème fondamental
Le kit de développement logiciel Scanbot nécessite un flux vidéo en direct. Lorsque les exigences s'étendent au-delà du mobile, il n'existe pas de chemin équivalent à travers la dépendance existante :
// 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 accepte les mêmes types de sources (fichier, flux, tableau d'octets ou PDF) dans n'importe quel contexte de projet :
// 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})")
NextComparaison des fonctionnalités Code-barres IronBarcode et de Scanbot SDK
| Fonction | Kit de développement logiciel Scanbot | Code-barres IronBarcode |
|---|---|---|
| Entrée à partir du chemin du fichier | Non | Oui |
| Entrée du flux | Non | Oui |
| Entrée à partir d'un tableau d'octets | Non | Oui |
| extraction de codes-barres PDF | Non | Oui |
| viseur de caméra en direct | Oui | Non (utilisez MediaPicker) |
| génération de codes-barres | Non | Oui |
| iOS MAUI | Oui | Oui |
| Android MAUI | Oui | Oui |
| Windows MAUI | Non | Oui |
| macOS MAUI | Non | Oui |
| ASP.NET Core | Non | Oui |
| Console / Serveur | Non | Oui |
| Azure / Lambda / Docker | Non | Oui |
| .NET Framework 4.6.2+ | Non | Oui |
| Correction d'erreur ML | Non | Oui |
| Récupération de codes-barres endommagés | Non | Oui |
| Détection automatique du format | Oui | Oui |
| Formats 1D | 20+ | 30+ |
| Formats 2D | QR, DataMatrix, PDF417, Aztec | QR, DataMatrix, PDF417, Aztec, MaxiCode |
| Modèle de licence | Frais fixes annuels | perpétuel unique |
| Prix publiés | Contacter le service des ventes | Oui ($999–$5 999) |
Démarrage rapide : Migration du SDK Scanbot vers IronBarcode
Étape 1 : Remplacer le package NuGet
Supprimez le package Scanbot :
dotnet remove package ScanbotBarcodeSDK.MAUI
Si le projet utilise des références de package conditionnelles dans le fichier .csproj, supprimez également ces entrées :
<!-- Remove any Scanbot-related package references -->
<PackageReference Include="ScanbotBarcodeSDK.MAUI" Version="8.0.0" />
Installer IronBarcode:
dotnet add package IronBarcode
IronBarcode est disponible sur NuGet et prend en charge .NET 6, 7, 8, 9 et .NET Framework 4.6.2+. Pour un projet multi-cible MAUI, un seul dotnet add package fonctionne pour toutes les cibles — aucune référence de package conditionnelle à la plateforme n'est nécessaire.
Étape 2 : Mise à jour des espaces de noms
Remplacez les espaces de noms Scanbot par l'espace de noms IronBarcode :
// Remove
using ScanbotSDK.MAUI;
// Add
using IronBarCode;Imports IronBarCodeÉtape 3 : initialisation de la licence
Supprimez le bloc d'initialisation du Scanbot et remplacez-le par la clé de licence Code-barres IronBarcode . Ajoutez l'initialisation de la licence au démarrage de l'application dans MauiProgram.cs, App.xaml.cs, ou Program.cs en fonction du type de projet :
// 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"Exemples de migration de code
Capture de photos MAUI
L'appel de numérisation de Scanbot ouvre une interface utilisateur de caméra en plein écran et revient à la normale lorsque l'utilisateur scanne un code-barres ou annule. Code-barres IronBarcode ne fournit pas d'interface utilisateur pour la caméra ; le remplacement utilise MediaPicker de MAUI pour invoquer la caméra du système, capturer une photo et passer les octets de l'image à BarcodeReader.Read().
Approche du kit de développement logiciel Scanbot :
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 SubApproche IronBarcode :
// 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 SubLa modification de l'expérience utilisateur consiste à afficher l'écran de la caméra système plutôt que le viseur intégré du Scanbot avec une zone de numérisation superposée. Pour les applications professionnelles (inventaire, logistique, flux de documents), la caméra du système est adéquate. Le tutoriel sur le lecteur de codes-barres .NET MAUI couvre le modèle d'intégration complet pour les cibles iOS et Android, y compris la gestion des autorisations.
Options et configuration de numérisation
Le BarcodeScannerScreenConfiguration de Scanbot contrôle quels formats le scanner accepte et comment l'interface utilisateur de la caméra se présente. Le BarcodeReaderOptions d'IronBarcode contrôle comment l'image est analysée — vitesse de traitement, détection de plusieurs codes-barres et paramètres similaires. Les concepts de configuration correspondent à des problématiques différentes car les opérations sous-jacentes sont différentes.
Approche du kit de développement logiciel Scanbot :
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 IfApproche IronBarcode :
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 UsingLa spécification du format n'est pas requise — Code-barres IronBarcode détecte automatiquement tous les formats pris en charge. Les paramètres BarcodeReaderOptions qui correspondent le plus directement à la configuration de Scanbot sont Speed (contrôle la rigueur du traitement par rapport aux performances) et ExpectMultipleBarcodes (continue le balayage après la première correspondance).
Traitement PDF côté serveur
Ce scénario n'a pas d'équivalent chez Scanbot. Avec IronBarcode, le même package installé pour l'application mobile MAUI peut extraire les codes-barres des PDF dans un point de terminaison ASP.NET Core côté serveur, offrant ainsi aux équipes une seule dépendance de code-barres qui fonctionne dans les deux contextes de déploiement.
Approche du kit de développement logiciel Scanbot :
// Kit de développement logiciel Scanbot 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.
Approche IronBarcode :
// 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 FunctionIronBarcode gère nativement les PDF multi-pages — chaque résultat a une propriété PageNumber indiquant sur quelle page le code-barres a été trouvé. Le guide d'extraction des codes-barres PDF couvre l'ensemble des options de lecture PDF, y compris la sélection de la plage de pages et l'optimisation des performances pour les lots de documents volumineux.
Traitement en arrière-plan ASP.NET Core
Pour les flux de travail par lots tels que les Azure Functions ou les services de travail traitant des documents PDF archivés, Code-barres IronBarcode fournit la même API que celle utilisée dans l'application MAUI et le contrôleur ASP.NET Core .
Approche du kit de développement logiciel Scanbot :
// Kit de développement logiciel Scanbot does not support this deployment context.
// The package will not compile in Azure Functions or Worker Services.
Approche IronBarcode :
// 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 SubRéférence de mappage de l'API du SDK Scanbot vers IronBarcode
| Kit de développement logiciel Scanbot | Code-barres 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() ou results.FirstOrDefault() != null |
result.Barcodes | Valeur de retour de BarcodeReader.Read() |
barcode.Format | result.BarcodeType (IronBarCode.BarcodeEncoding) |
barcode.Text | result.Value |
BarcodeFormat.Code128 | BarcodeEncoding.Code128 |
BarcodeFormat.QrCode | BarcodeEncoding.QRCode |
BarcodeFormat.Ean13 | BarcodeEncoding.EAN13 |
BarcodeScannerScreenConfiguration.FinderAspectRatio | Aucun équivalent — le cadrage des images est géré par MediaPicker |
BarcodeScannerScreenConfiguration.FlashEnabled | Aucun équivalent — utilisez les options de MediaPicker |
| Entrée requise par caméra | Chemin de fichier, flux, tableau d'octets ou PDF |
| iOS et Android MAUI uniquement | Toutes les plateformes .NET et tous les types de projets |
Problèmes de migration courants et solutions
Problème n° 1 : Absence d'équivalent en mode viseur électronique
Kit de développement logiciel Scanbot : Fournit un viseur de caméra en temps réel intégré à l'expérience de numérisation, avec une superposition de zone de numérisation, un retour haptique et une détection continue des codes-barres dans le flux vidéo en direct.
Solution : Utilisez MediaPicker.CapturePhotoAsync() de MAUI pour ouvrir la caméra du système et capturer une image fixe pour le traitement :
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 UsingPour les applications professionnelles, la caméra du système est adéquate. Pour les applications grand public où la superposition en direct est essentielle à l'expérience utilisateur, évaluez si ce changement d'expérience utilisateur est acceptable avant de vous engager dans la migration.
Problème n° 2 : Différences concernant les autorisations d'utilisation des appareils photo
Kit de développement logiciel Scanbot : Le package Scanbot gérait les demandes d'autorisation d'accès à la caméra dans le cadre de son flux d'interface utilisateur ; les autorisations d'accès à la caméra étaient donc gérées implicitement par l'initialisation du kit de développement logiciel et le lancement du scanner.
Solution : Avec MediaPicker, MAUI gère les permissions via le mécanisme standard. Vérifiez que AndroidManifest.xml inclut la déclaration de permission de la caméra et que Info.plist inclut la clé NSCameraUsageDescription. Ces entrées sont généralement présentes dans les modèles de projets MAUI pré-structurés. Si l'application utilisait auparavant uniquement Scanbot pour l'accès à la caméra, vérifiez que les entrées suivantes du manifeste sont bien présentes avant de procéder au test :
<!-- Android: AndroidManifest.xml -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- iOS: Info.plist -->
<key>NSCameraUsageDescription</key>
<string>This app uses the camera to scan barcodes.</string>
Problème 3 : Correction des erreurs de compilation Windows
Scanbot SDK : Le package ScanbotBarcodeSDK.MAUI cible uniquement net10.0-android et net10.0-ios, causant des échecs de construction lorsque net10.0-windows est présent dans TargetFrameworks.
Solution : La suppression de la référence au package Scanbot résout l'échec de la compilation sous Windows. Code-barres IronBarcode fonctionne correctement sur toutes les cibles MAUI sans configuration spécifique à la plateforme :
# 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
Problème n° 4 : Modification de l'espace de noms des énumérations de format
Scanbot SDK : Utilise des valeurs d'énumération BarcodeFormat telles que BarcodeFormat.Code128 du namespace ScanbotBarcodeSDK.MAUI.
Solution : Code-barres IronBarcode utilise l'énumération BarcodeEncoding dans le namespace IronBarCode. Mettez à jour toutes les références de format et tout code qui stocke, compare ou active les valeurs d'énumération de format :
// 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.EAN13Notez qu'IronBarcode détecte automatiquement tous les formats pris en charge par défaut — le filtrage explicite des formats via BarcodeReaderOptions est uniquement nécessaire pour l'optimisation des performances lorsque le format attendu est connu à l'avance.
Liste de contrôle de migration du SDK Scanbot
Tâches préalables à la migration
Auditez le code source pour identifier toutes les utilisations du SDK Scanbot :
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" .
- Documentez tous les points d'appel de numérisation et indiquez s'ils se trouvent dans du code partagé, du code spécifique à la plateforme ou des gestionnaires d'événements d'interface utilisateur.
- Identifier si des pages ou des flux s'appuient sur le viseur en temps réel du Scanbot comme principale interaction utilisateur.
- Confirmez que les entrées de permission de la caméra existent dans
AndroidManifest.xmletInfo.plist - Examinez
.csprojpour toute référence de package conditionnelle liée à Scanbot
Tâches de mise à jour du code
- Supprimez le package NuGet
ScanbotSDK.MAUI - Supprimez toutes les entrées conditionnelles
<PackageReference>pour Scanbot de.csproj - Installez le package NuGet
IronBarcode - Remplacez
using ScanbotSDK.MAUI;parusing IronBarCode;dans tous les fichiers - Remplacez
ScanbotSDK.Initialize(...)parIronBarCode.License.LicenseKey = "key"au démarrage de l'application - Remplacez
ScanbotSDKMain.Barcode.StartScannerAsync(configuration)parMediaPicker.CapturePhotoAsync()suivi d'une copie de flux etBarcodeReader.Read(bytes)dans les flux de travail de la caméra MAUI - Remplacez
ScanbotSDKMain.Barcode.StartScannerAsync(configuration)parBarcodeReader.Read(filePath)ouBarcodeReader.Read(stream)dans les contextes côté serveur et traitement de fichiers - Remplacez les vérifications
result.Status == OperationResult.Okparresults.Any()ouresults.FirstOrDefault() != null - Remplacez les références de collection
result.Barcodespar la valeur de retour deBarcodeReader.Read() - Remplacez l'accès à la propriété
barcode.Textparresult.Value - Remplacez les valeurs d'énumération
BarcodeFormat.*par les équivalentsBarcodeEncoding.* - Remplacez
new BarcodeScannerScreenConfiguration()parnew BarcodeReaderOptions()là où des options de traitement sont nécessaires
Test de post-migration
- Vérifiez que la compilation réussit sur toutes les plateformes cibles MAUI, y compris Windows et macOS si elles sont présentes.
- Testez le flux
MediaPicker.CapturePhotoAsync()sur un appareil iOS physique et un appareil Android physique - Vérifier que les valeurs des codes-barres décodées par Code-barres IronBarcode correspondent aux valeurs précédemment décodées par Scanbot pour les mêmes codes-barres physiques.
- Tester l'extraction de PDF multipages si le projet inclut des flux de travail de traitement de documents.
- Vérifiez que la détection de format couvre tous les types de codes-barres précédemment configurés dans
BarcodeScannerScreenConfiguration.BarcodeFormats - Vérifiez que les points de terminaison côté serveur ou les tâches en arrière-plan produisent des résultats corrects sur les mêmes exemples de documents.
- Vérifiez que les invites d'autorisation d'accès à la caméra s'affichent correctement lors du premier lancement sur iOS et Android.
Principaux avantages de la migration vers IronBarcode
Package unifié pour toutes les cibles de déploiement : Code-barres IronBarcode s'installe une seule fois et s'exécute sur MAUI mobile, MAUI desktop, ASP.NET Core, Azure Functions, applications console et applications de bureau Windows. Les équipes n'ont plus besoin de dépendances de codes-barres distinctes pour les différentes parties d'un même système.
Traitement des PDF et des documents : Code-barres IronBarcode lit nativement les codes-barres des fichiers PDF, chaque résultat indiquant le numéro de page sur lequel il a été trouvé. Les flux de travail de document qui étaient auparavant impossibles dans le modèle Scanbot deviennent des opérations simples avec BarcodeReader.Read("document.pdf").
Prise en charge de MAUI pour Windows et macOS : Les projets MAUI multi-cibles incluant Windows ou macOS se compilent sans erreur après la suppression de Scanbot. Code-barres IronBarcode fournit la même API de lecture de codes-barres sur les quatre cibles MAUI, éliminant ainsi la gestion des dépendances conditionnelles à la plateforme requise par Scanbot.
Propriété de la licence perpétuelle : le modèle d'achat unique élimine les obligations de renouvellement annuel. Une fois la licence acquise, Code-barres IronBarcode peut être utilisé indéfiniment au niveau acheté, sans frais récurrents. Les équipes dont le périmètre du projet s'est étendu au-delà de la couverture mobile de Scanbot constatent que le modèle perpétuel correspond mieux à la planification des coûts à long terme.
Génération de codes-barres : Code-barres IronBarcode peut produire des codes-barres dans tous les formats pris en charge, sous forme de fichiers image, de flux ou de contenu intégré. Les projets nécessitant à la fois lecture et génération n'ont plus besoin d'une seconde bibliothèque en plus de Scanbot.
Lecture assistée par apprentissage automatique : Code-barres IronBarcode applique une correction d'erreurs basée sur l'apprentissage automatique et une récupération des codes-barres endommagés pour les images difficiles du monde réel (faible contraste, dommages partiels, mauvaise qualité d'impression) que les algorithmes de détection standard ne parviennent pas à décoder. Cette fonctionnalité est particulièrement pertinente pour les flux de travail de traitement de documents où la qualité d'image est variable.

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes et créer des manuels bien structurés et visuellement attrayants.