Przejdź do treści stopki
KORZYSTANIE Z IRONBARCODE

Jak zbudować aplikację SDK do skanowania kodów kreskowych w .NET MAUI

.NET MAUI spełnia obietnicę jednej bazy kodu przeznaczonej dla systemów Android, iOS i Windows. Wyzwaniem jest sytuacja, w której konieczne jest zintegrowanie natywnych funkcji sprzętowych, takich jak skanowanie BarCode. Ręczne łączenie interfejsów API kamer oznacza konfiguracje specyficzne dla platformy, dyrektywy kompilacji warunkówej i wiele godzin debugowania. Istnieje szybsza droga.

Ten samouczek pokazuje, jak zbudować działający, wielopłatformowy skaner kodów kreskowych w .NET MAUI przy użyciu IronBarcode. Będziesz konfigurować projekt, ustawiać uprawnienia platformy, skanować BarCodes z plików graficznych, odczytywać BarCodes z dokumentów PDF oraz obsługiwać wiele symboli za pomocą opcji skanowania — wszystko to za pomocą kodu, który można uruchomić na dowolnym obsługiwanym urządzeniu docelowym.

Rozpocznij bezpłatny okres próbny i postępuj zgodnie z poniższymi instrukcjami.

NuGet Zainstaluj za pomocą NuGet

PM >  Install-Package BarCode

Sprawdź IronBarcode na NuGet dla szybkiej instalacji. Z ponad 10 milionami pobrań, przekształca rozwój PDF z C#. Możesz również pobrać DLL.

Jak skonfigurować SDK skanera BARCODE w .NET MAUI?

Konfiguracja zestawu SDK skanera kodów kreskowych .NET MAUI wymaga utworzenia nowego projektu, zainstalowania pakietu NuGet oraz skonfigurowania uprawnień platformy. Cały proces konfiguracji zajmuje kilka minut w Visual Studio.

Utwórz projekt .NET MAUI

Otwórz program Visual Studio i utwórz nowy projekt aplikacji .NET MAUI. Nadaj projektowi opisową nazwę, np. "BarcodeScanner", i wybierz .NET Framework 8 lub nowszą wersję jako docelową platformę. Visual Studio generuje domyślną strukturę projektu z folderami specyficznymi dla platformy Android i iOS.

Jeśli Twoim celem jest .NET 10, obowiązuje ten sam szablon projektu. Zaktualizuj właściwość <TargetFrameworks> w pliku .csproj, aby uwzględnić net10.0-android, net10.0-ios i net10.0-windows10.0.19041.0 zgodnie z wymaganiami. Pełną listę nazw frameworków docelowych oraz minimalnych wymagań dotyczących wersji systemu operacyjnego można znaleźć w dokumentacji dotyczącej platform obsługiwanych przez .NET MAUI.

Zainstaluj IronBarcode

Zainstaluj pakiet IronBarcode NuGet za pomocą konsoli menedżera pakietów:

Install-Package BarCode

To polecenie pobiera i instaluje zestaw SDK skanera kodów kreskowych wraz ze wszystkimi wymagańymi zależnościami dla aplikacji .NET MAUI.

Konfiguracja uprawnień platformy

Nawet w przypadku skanowania z plików graficznych, a nie z obrazu na żywo z kamery, dobrą praktyką jest skonfigurowanie następujących uprawnień dla aplikacji skanującej kody kreskowe .NET MAUI.

W przypadku systemu Android dodaj następujący fragment do Platforms/Android/AndroidManifest.xml:

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

W przypadku systemu iOS dodaj te wpisy do Platforms/iOS/Info.plist:

<key>NSPhotoLibraryUsageDescription</key>
<string>Access needed to select barcode images for scanning.</string>
<key>NSCameraUsageDescription</key>
<string>Camera permission for barcode scanning.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Access needed to select barcode images for scanning.</string>
<key>NSCameraUsageDescription</key>
<string>Camera permission for barcode scanning.</string>
XML

Zainicjuj SDK

Ustaw klucz licencyjny na wczesnym etapie cyklu życia aplikacji, aby zapewnić pełną aktywację IronBarcode przed wykonaniem jakichkolwiek wywołań skanowania. Umieść aktywację w MauiProgram.cs:

using IronBarCode;

var builder = MauiApp.CreateBuilder();
builder
    .UseMauiApp<App>()
    .ConfigureFonts(fonts =>
    {
        fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
    });

// Activate IronBarcode before the app starts
License.LicenseKey = "YOUR_LICENSE_KEY_HERE";

return builder.Build();
using IronBarCode;

var builder = MauiApp.CreateBuilder();
builder
    .UseMauiApp<App>()
    .ConfigureFonts(fonts =>
    {
        fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
    });

// Activate IronBarcode before the app starts
License.LicenseKey = "YOUR_LICENSE_KEY_HERE";

return builder.Build();
Imports IronBarCode

Dim builder = MauiApp.CreateBuilder()
builder _
    .UseMauiApp(Of App)() _
    .ConfigureFonts(Sub(fonts)
        fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular")
    End Sub)

' Activate IronBarcode before the app starts
License.LicenseKey = "YOUR_LICENSE_KEY_HERE"

Return builder.Build()
$vbLabelText   $csharpLabel

IronBarcode oferuje bezpłatną licencję probną do celów programistycznych i testowych. Ustaw klucz raz podczas uruchamiania; wszystkie kolejne wywołania BarcodeReader i BarcodeWriter w ramach tego samego procesu będą korzystać z aktywowanej licencji.

Jak odczytywać BarCodes z plików graficznych?

Podstawową funkcją każdego skanera BARCODE MAUI jest odczytywanie BARCODE-ów z wybranych obrazów. Metoda BarcodeReader.Read() przyjmuje ścieżkę do pliku i zwraca zbiór obiektów BarcodeResult, po jednym dla każdego wykrytego BARCODE'a.

Zaprojektuj interfejs użytkownika

Stwórz przejrzysty interfejs w MainPage.xaml, który pozwoli użytkownikom wybrać plik obrazu i wyświetlić zeskanowane dane BarCode:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="BarcodeScanner.MainPage">
    <VerticalStackLayout Padding="20" Spacing="15">
        <Label Text=".NET MAUI Barcode Scanner" FontSize="24" HorizontalOptions="Center"/>
        <Button Text="Select Image to Scan" Clicked="OnSelectImageClicked"/>
        <Image x:Name="SelectedImageView" HeightRequest="200"/>
        <Label x:Name="ResultLabel" FontSize="16"/>
    </VerticalStackLayout>
</ContentPage>
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="BarcodeScanner.MainPage">
    <VerticalStackLayout Padding="20" Spacing="15">
        <Label Text=".NET MAUI Barcode Scanner" FontSize="24" HorizontalOptions="Center"/>
        <Button Text="Select Image to Scan" Clicked="OnSelectImageClicked"/>
        <Image x:Name="SelectedImageView" HeightRequest="200"/>
        <Label x:Name="ResultLabel" FontSize="16"/>
    </VerticalStackLayout>
</ContentPage>
XML

Wdrożenie skanowania BarCode

Dodaj logikę skanowania do MainPage.xaml.cs. Ten kod obsługuje wybór obrazu za pośrednictwem interfejsu API MAUI FilePicker i przekazuje wybraną ścieżkę pliku do IronBarcode:

using IronBarCode;

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private async void OnSelectImageClicked(object sender, EventArgs e)
    {
        var result = await FilePicker.PickAsync(new PickOptions
        {
            FileTypes = FilePickerFileType.Images,
            PickerTitle = "Select a barcode image"
        });

        if (result != null)
        {
            // Display the selected image
            SelectedImageView.Source = ImageSource.FromFile(result.FullPath);

            // Read barcodes from the image file
            var barcodes = BarcodeReader.Read(result.FullPath);

            ResultLabel.Text = barcodes.Any()
                ? $"Found: {barcodes.First().Value}"
                : "No barcodes detected in selected image.";
        }
    }
}
using IronBarCode;

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private async void OnSelectImageClicked(object sender, EventArgs e)
    {
        var result = await FilePicker.PickAsync(new PickOptions
        {
            FileTypes = FilePickerFileType.Images,
            PickerTitle = "Select a barcode image"
        });

        if (result != null)
        {
            // Display the selected image
            SelectedImageView.Source = ImageSource.FromFile(result.FullPath);

            // Read barcodes from the image file
            var barcodes = BarcodeReader.Read(result.FullPath);

            ResultLabel.Text = barcodes.Any()
                ? $"Found: {barcodes.First().Value}"
                : "No barcodes detected in selected image.";
        }
    }
}
Imports IronBarCode

Public Partial Class MainPage
    Inherits ContentPage

    Public Sub New()
        InitializeComponent()
    End Sub

    Private Async Sub OnSelectImageClicked(sender As Object, e As EventArgs)
        Dim result = Await FilePicker.PickAsync(New PickOptions With {
            .FileTypes = FilePickerFileType.Images,
            .PickerTitle = "Select a barcode image"
        })

        If result IsNot Nothing Then
            ' Display the selected image
            SelectedImageView.Source = ImageSource.FromFile(result.FullPath)

            ' Read barcodes from the image file
            Dim barcodes = BarcodeReader.Read(result.FullPath)

            ResultLabel.Text = If(barcodes.Any(), $"Found: {barcodes.First().Value}", "No barcodes detected in selected image.")
        End If
    End Sub
End Class
$vbLabelText   $csharpLabel

Wynik

.NET MAUI BarCode Scanner SDK: Stwórz skaner wielopłatformowy w kilka minut: Obraz 1 – Wynik zeskanowanego BarCode'a

Metoda BarcodeReader.Read() analizuje wybrany obraz i zwraca wszystkie wykryte BARCODES. IronBarcode automatycznie rozpoznaje wiele symboli kodów kreskowych, w tym kody QR, Code 128, Code 39, EAN-13 i wiele innych obsługiwanych formatów. Zbiór wyników udostępnia właściwości, takie jak BarcodeType, Value, PageNumber oraz współrzędne prostokąta ograniczającego dla każdego wykrytego kodu.

Jak skanować BarCodes z dokumentów PDF?

Jedną z funkcji, która wyróżnia IronBarcode spośród wielu alternatywnych rozwiązań, jest odczytywanie kodów kreskowych bezpośrednio z plików PDF. Ma to kluczowe znaczenie dla aplikacji .NET MAUI obsługujących przepływ dokumentów — listy przewozowe, zamówienia zakupu, dokumentacja medyczna i podobne przypadki użycia opierają się na BARCODES-ach osadzonych w plikach PDF.

Metoda BarcodeReader.ReadPdf() przyjmuje ścieżkę do pliku i zwraca tę samą kolekcję BarcodeResult co czytnik obrazów, z dodatkową właściwością PageNumber, która identyfikuje, z której strony PDF pochodzi każdy BARCODE:

using IronBarCode;

private async void OnSelectPdfClicked(object sender, EventArgs e)
{
    var result = await FilePicker.PickAsync(new PickOptions
    {
        PickerTitle = "Select a PDF with barcodes"
    });

    if (result != null)
    {
        // Read barcodes from every page of the PDF
        var barcodes = BarcodeReader.ReadPdf(result.FullPath);

        var output = string.Join("\n", barcodes.Select(b =>
            $"Page {b.PageNumber}: [{b.BarcodeType}] {b.Value}"));

        await DisplayAlert("Scan Results", output.Length > 0 ? output : "No barcodes found.", "OK");
    }
}
using IronBarCode;

private async void OnSelectPdfClicked(object sender, EventArgs e)
{
    var result = await FilePicker.PickAsync(new PickOptions
    {
        PickerTitle = "Select a PDF with barcodes"
    });

    if (result != null)
    {
        // Read barcodes from every page of the PDF
        var barcodes = BarcodeReader.ReadPdf(result.FullPath);

        var output = string.Join("\n", barcodes.Select(b =>
            $"Page {b.PageNumber}: [{b.BarcodeType}] {b.Value}"));

        await DisplayAlert("Scan Results", output.Length > 0 ? output : "No barcodes found.", "OK");
    }
}
Imports IronBarCode

Private Async Sub OnSelectPdfClicked(sender As Object, e As EventArgs)
    Dim result = Await FilePicker.PickAsync(New PickOptions With {
        .PickerTitle = "Select a PDF with barcodes"
    })

    If result IsNot Nothing Then
        ' Read barcodes from every page of the PDF
        Dim barcodes = BarcodeReader.ReadPdf(result.FullPath)

        Dim output = String.Join(vbLf, barcodes.Select(Function(b) $"Page {b.PageNumber}: [{b.BarcodeType}] {b.Value}"))

        Await DisplayAlert("Scan Results", If(output.Length > 0, output, "No barcodes found."), "OK")
    End If
End Sub
$vbLabelText   $csharpLabel

Wynik

.NET MAUI BarCode Scanner SDK: Stwórz skaner wielopłatformowy w kilka minut: Obraz 2 – Wynik skanowania pliku PDF zawierającego kody QR

Metoda ReadPdf() skanuje wszystkie strony pliku PDF i zwraca dane BARCODE wraz z numerami stron, co ułatwia przetwarzanie dokumentów zawierających wiele BARCODE. Jeśli plik PDF ma kilkadziesiąt stron, rozważ przekazanie obiektu BarcodeReaderOptions z PageNumbers ustawionym na określony zakres, aby ograniczyć skanowanie do odpowiednich stron i skrócić czas przetwarzania.

Jak radzisz sobie z wieloma kodami kreskowymi i kodami QR?

Aplikacje produkcyjne często muszą wykrywać wiele BARCODE-ów na jednym obrazie lub filtrować wyniki według typu BARCODE-a. Klasa BarcodeReaderOptions udostępnia właściwości konfiguracyjne, które kontrolują zachowanie wykrywania. Ustawienie ExpectMultipleBarcodes na true informuje czytelnika, aby kontynuował skanowanie po pierwszym dopasowaniu, zamiast zatrzymywać się przedwcześnie:

using IronBarCode;

// Configure the reader for multi-barcode detection with type filtering
var options = new BarcodeReaderOptions
{
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
    Speed = ReadingSpeed.Balanced
};

var barcodes = BarcodeReader.Read(imagePath, options);

foreach (var barcode in barcodes)
{
    Console.WriteLine($"Type: {barcode.BarcodeType}, Value: {barcode.Value}");
}
using IronBarCode;

// Configure the reader for multi-barcode detection with type filtering
var options = new BarcodeReaderOptions
{
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
    Speed = ReadingSpeed.Balanced
};

var barcodes = BarcodeReader.Read(imagePath, options);

foreach (var barcode in barcodes)
{
    Console.WriteLine($"Type: {barcode.BarcodeType}, Value: {barcode.Value}");
}
Imports IronBarCode

' Configure the reader for multi-barcode detection with type filtering
Dim options As New BarcodeReaderOptions With {
    .ExpectMultipleBarcodes = True,
    .ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128,
    .Speed = ReadingSpeed.Balanced
}

Dim barcodes = BarcodeReader.Read(imagePath, options)

For Each barcode In barcodes
    Console.WriteLine($"Type: {barcode.BarcodeType}, Value: {barcode.Value}")
Next
$vbLabelText   $csharpLabel

Właściwość Speed kontroluje kompromis między czasem skanowania a dokładnością. ReadingSpeed.Faster priorytetowo traktuje przepustowość, co sprawdza się w aplikacjach skanujących masowo obrazy o wysokiej jakości. ReadingSpeed.ExtraSlow stosuje bardziej agresywne etapy korekcji obrazu w przypadku trudnych danych wejściowych — niskiego kontrastu, przekrzywionych kątów lub częściowo zasłoniętych kodów. ReadingSpeed.Balanced jest właściwym punktem wyjścia dla większości zastosowań.

Wyliczenie BarcodeEncoding obsługuje kombinacje bitowe, dzięki czemu można ograniczyć skanowanie wyłącznie do symboli istotnych dla danego przypadku użycia, nie obniżając wydajności poprzez zbędne kontrole.

Jak odczytywać BarCodes ze strumieni pamięci?

Ścieżki plików sprawdzają się w większości scenariuszy, ale niektóre przepływy pracy .NET MAUI przekazują dane obrazu przez pamięć — klatki przechwycone z podglądu kamery, bajty pobrane z REST API lub dane obrazu generowane w trakcie procesu. IronBarcode obsługuje dane wejściowe System.IO.Stream bezpośrednio w przeciążeniu BarcodeReader.Read():

using IronBarCode;
using System.IO;

// Read a barcode from a MemoryStream (e.g., an in-memory image buffer)
private BarcodeResult[] ReadFromStream(Stream imageStream)
{
    return BarcodeReader.Read(imageStream);
}

// Example: download an image and scan without writing to disk
private async Task<string> ScanDownloadedBarcode(string imageUrl)
{
    using var httpClient = new HttpClient();
    using var stream = await httpClient.GetStreamAsync(imageUrl);
    using var memoryStream = new MemoryStream();

    await stream.CopyToAsync(memoryStream);
    memoryStream.Position = 0;

    var barcodes = BarcodeReader.Read(memoryStream);
    return barcodes.Any() ? barcodes.First().Value : string.Empty;
}
using IronBarCode;
using System.IO;

// Read a barcode from a MemoryStream (e.g., an in-memory image buffer)
private BarcodeResult[] ReadFromStream(Stream imageStream)
{
    return BarcodeReader.Read(imageStream);
}

// Example: download an image and scan without writing to disk
private async Task<string> ScanDownloadedBarcode(string imageUrl)
{
    using var httpClient = new HttpClient();
    using var stream = await httpClient.GetStreamAsync(imageUrl);
    using var memoryStream = new MemoryStream();

    await stream.CopyToAsync(memoryStream);
    memoryStream.Position = 0;

    var barcodes = BarcodeReader.Read(memoryStream);
    return barcodes.Any() ? barcodes.First().Value : string.Empty;
}
Imports IronBarCode
Imports System.IO
Imports System.Net.Http
Imports System.Threading.Tasks

' Read a barcode from a MemoryStream (e.g., an in-memory image buffer)
Private Function ReadFromStream(imageStream As Stream) As BarcodeResult()
    Return BarcodeReader.Read(imageStream)
End Function

' Example: download an image and scan without writing to disk
Private Async Function ScanDownloadedBarcode(imageUrl As String) As Task(Of String)
    Using httpClient As New HttpClient()
        Using stream As Stream = Await httpClient.GetStreamAsync(imageUrl)
            Using memoryStream As New MemoryStream()
                Await stream.CopyToAsync(memoryStream)
                memoryStream.Position = 0

                Dim barcodes = BarcodeReader.Read(memoryStream)
                Return If(barcodes.Any(), barcodes.First().Value, String.Empty)
            End Using
        End Using
    End Using
End Function
$vbLabelText   $csharpLabel

Przeciążenie strumienia akceptuje dowolną podklasę Stream, w tym MemoryStream, FileStream oraz strumienie sieciowe. Biblioteka wewnętrznie obsługuje wykrywanie formatu, więc nie trzeba określać typu obrazu przed wywołaniem Read().

Jak generować BarCodes w aplikacji MAUI?

IronBarcode obsługuje zarówno generowanie, jak i odczytywanie kodów kreskowych. Klasa BarcodeWriter generuje BARCODE jako pliki graficzne, obiekty Bitmap lub instancje Stream, które można wyświetlać w widoku MAUI. Jest to przydatne w aplikacjach do zarządzania zapasami, które oprócz funkcji skanowania wymagają drukowania lub udostępniania BarCodes:

using IronBarCode;

// Generate a QR code and display it in a MAUI Image control
private async void OnGenerateQrClicked(object sender, EventArgs e)
{
    // Create a QR code barcode
    var qrCode = QRCodeWriter.CreateQrCode(
        value: "https://ironsoftware.com/csharp/barcode/",
        qrCodeSize: 500,
        errorCorrection: QRCodeWriter.QrErrorCorrectionLevel.Medium
    );

    // Save to a temporary file and display
    var tempPath = Path.Combine(FileSystem.CacheDirectory, "generated-qr.png");
    qrCode.SaveAsPng(tempPath);

    GeneratedImageView.Source = ImageSource.FromFile(tempPath);
}
using IronBarCode;

// Generate a QR code and display it in a MAUI Image control
private async void OnGenerateQrClicked(object sender, EventArgs e)
{
    // Create a QR code barcode
    var qrCode = QRCodeWriter.CreateQrCode(
        value: "https://ironsoftware.com/csharp/barcode/",
        qrCodeSize: 500,
        errorCorrection: QRCodeWriter.QrErrorCorrectionLevel.Medium
    );

    // Save to a temporary file and display
    var tempPath = Path.Combine(FileSystem.CacheDirectory, "generated-qr.png");
    qrCode.SaveAsPng(tempPath);

    GeneratedImageView.Source = ImageSource.FromFile(tempPath);
}
Imports IronBarCode

' Generate a QR code and display it in a MAUI Image control
Private Async Sub OnGenerateQrClicked(sender As Object, e As EventArgs)
    ' Create a QR code barcode
    Dim qrCode = QRCodeWriter.CreateQrCode(
        value:="https://ironsoftware.com/csharp/barcode/",
        qrCodeSize:=500,
        errorCorrection:=QRCodeWriter.QrErrorCorrectionLevel.Medium
    )

    ' Save to a temporary file and display
    Dim tempPath = Path.Combine(FileSystem.CacheDirectory, "generated-qr.png")
    qrCode.SaveAsPng(tempPath)

    GeneratedImageView.Source = ImageSource.FromFile(tempPath)
End Sub
$vbLabelText   $csharpLabel

Klasa QRCodeWriter obsługuje wszystkie cztery poziomy korekcji błędów QR (Low, Medium, Quartile, High), niestandardowe rozmiary oraz opcje stylizacji, w tym kontrolę koloru pierwszego planu i tła. W przypadku symboli innych niż QR należy użyć BarcodeWriter.CreateBarcode() z odpowiednią wartością BarcodeEncoding. Dokumentacja API generowania kodów kreskowych zawiera informacje o wszystkich obsługiwanych formatach wyjściowych.

Jakie są kluczowe możliwości tej biblioteki skanera BarCode?

IronBarcode zapewnia kilka korzyści dla projektów skanowania kodów kreskowych .NET MAUI, które odróżniają go od alternatywnych rozwiązań open source, takich jak ZXing.Net.MAUI:

Możliwości IronBarcode for .NET MAUI
MożliwościSzczegóły
Obsługa wielu platformObsługuje systemy Android, iOS i Windows z jednego pakietu NuGet
Wiele źródeł danych wejściowychSkanowanie ze ścieżek plików, strumieni pamięci i dokumentów PDF
Zakres formatowaniaOdczytuje ponad 30 symboli 1D i 2D, w tym QR, Data Matrix i PDF417
Generowanie BarCode'ówGeneruje kody QR i kody BARCODE 1D w formacie PNG, bitmapowym lub strumieniowym
Korekta obrazówAutomatycznie obsługuje dane wejściowe obrócone, przekrzywione i o niskim kontraście
Brak natywnej zależności od SDKCzysta biblioteka .NET, niewymagająca natywnych powiązań specyficznych dla platformy

Kwestia "braku zależności od natywnego SDK" ma znaczenie w projektach .NET MAUI, ponieważ biblioteki natywne specyficzne dla platformy wymagają oddzielnych etapów łączenia dla każdego celu. IronBarcode całkowicie eliminuje tę złożoność, co oznacza, że to samo odwołanie NuGet generuje działające pliki binarne dla wszystkich trzech obsługiwanych platform bez dodatkowej konfiguracji.

Pełna lista obsługiwanych formatów kodów kreskowych znajduje się w dokumentacji dotyczącej formatów obsługiwanych przez IronBarcode. Aby zapoznać się z cenami i warunkami licencji dotyczącymi wdrożenia produkcyjnego, przejrzyj stronę licencyjną IronBarcode.

Jakie są najlepsze praktyki dotyczące skanowania BarCodes w produkcji?

Wdrożenie skanera BARCODE do środowiska produkcyjnego wymaga zwrócenia uwagi na kilka obszarów wykraczających poza podstawowe wywołanie odczytu. Poniższe wytyczne dotyczą najczęstszych błędów w aplikacjach do obsługi kodów kreskowych .NET MAUI.

Wybierz odpowiednią prędkość czytania. ReadingSpeed.Balanced poprawnie obsługuje większość rzeczywistych obrazów. Zastrzeż ReadingSpeed.ExtraSlow dla skanów wydrukowanych dokumentów lub obrazów, których użytkownicy nie mogą ponownie uchwycić. Należy unikać ReadingSpeed.ExtraSlow w przypadku procesów o dużej objętości, ponieważ każde skanowanie trwa znacznie dłużej.

Filtruj według oczekiwanych typów. Jeśli aplikacja przetwarza wyłącznie kody QR, ustaw ExpectBarcodeTypes = BarcodeEncoding.QRCode. Ograniczenie obszaru wyszukiwania skraca czas przetwarzania i eliminuje fałszywe alarmy spowodowane innymi symbolami obecnymi w grafice tła.

Używaj ExpectMultipleBarcodes tylko wtedy, gdy jest to konieczne. Ustawienie tego na true zawsze powoduje, że czytelnik musi czytać tekst dodatkowo. W przypadku wprowadzania pojedynczych BARCODE-ów należy pozostawić wartość domyślną (false), aby skanowanie zakończyło się natychmiast po znalezieniu pierwszego prawidłowego BARCODE-a.

Elegancko obsługuj puste wyniki. BarcodeReader.Read() zwraca pustą tablicę zamiast generować wyjątek, gdy nie wykryto żadnych BarCode'ów. Sprawdź .Any() przed uzyskaniem dostępu do First() i wyświetl użytkownikowi jasny komunikat. Monit o ponowną próbę z instrukcją ("upewnij się, że BarCode jest dobrze oświetlony i wyśrodkowany") poprawia komfort użytkowania bardziej niż ogólny komunikat o błędzie.

Zapisz obiekt opcji w pamięci podręcznej. Tworzenie instancji BarcodeReaderOptions przy każdym skanowaniu powoduje przydzielanie pamięci. Zdefiniuj opcje raz na poziomie klasy i wykorzystuj je wielokrotnie w kolejnych wywołaniach.

Aby uzyskać dodatkowe wskazówki dotyczące diagnozowania błędów skanowania i optymalizacji wydajności, zapoznaj się z przewodnikiem rozwiązywania problemów IronBarcode oraz samouczkiem dotyczącym czytnika kodów kreskowych.

Jakie są Twoje kolejne kroki?

Zbudowanie skanera kodów kreskowych .NET MAUI za pomocą IronBarcode wymaga zainstalowania jednego pakietu NuGet, skonfigurowania uprawnień platformy oraz wywołania BarcodeReader.Read() z ścieżką do pliku lub strumieniem. To samo API jest przeznaczone dla systemów Android, iOS i Windows bez gałęzi kodu specyficznych dla danej platformy.

Aby rozszerzyć możliwości aplikacji, warto rozważyć następujące zasoby:

Rozpocznij bezpłatny okres próbny, aby uzyskać klucz licencyjny do celów programistycznych, lub zapoznaj się z opcjami licencyjnymi dotyczącymi wdrożenia produkcyjnego.

Często Zadawane Pytania

Czym jest .NET MAUI i dlaczego integracja skanowania BARCODE stanowi wyzwanie?

.NET MAUI to wieloplatformowy framework UI, który obsługuje systemy Android, iOS i Windows z poziomu jednej bazy kodu. Skanowanie kodów kreskowych stanowi wyzwanie, ponieważ każda platforma udostępnia inne interfejsy API kamery i pamięci. IronBarcode zapewnia ujednolicony interfejs API .NET, który radzi sobie z różnicami między platformami za użytkownika.

Jakie formaty kodów kreskowych obsługuje IronBarcode w aplikacjach .NET MAUI?

IronBarcode obsługuje ponad 30 symboli kodów kreskowych, w tym QR Code, Code 128, Code 39, EAN-13, EAN-8, UPC-A, UPC-E, Data Matrix, PDF417, Aztec i ITF. Użyj wyliczenia BarcodeEncoding, aby filtrować według określonych formatów.

Czy IronBarcode może odczytywać kody kreskowe z plików PDF w aplikacji .NET MAUI?

Tak. Metoda BarcodeReader.ReadPdf() skanuje wszystkie strony dokumentu PDF i zwraca kolekcję BarcodeResult. Każdy wynik zawiera wartość kodu kreskowego, typ oraz numer strony.

Czy IronBarcode działa na wszystkich platformach docelowych .NET MAUI?

IronBarcode obsługuje platformy Android, iOS i Windows w projekcie .NET MAUI przy użyciu jednego pakietu NuGet. Nie są wymagane żadne natywne powiązania SDK specyficzne dla platformy.

Jak zeskanować wiele BarCodes z jednego obrazu?

Ustaw ExpectMultipleBarCodes = true w BarcodeReaderOptions i przekaż obiekt opcji do BarcodeReader.Read(). Czytnik wykona dodatkowe przejścia skanowania, aby wykryć wszystkie kody kreskowe na obrazie.

Jaka jest różnica między ReadingSpeed.Faster a ReadingSpeed.ExtraSlow?

ReadingSpeed.Faster stawia na przepustowość i sprawdza się w przypadku obrazów o wysokiej jakości. ReadingSpeed.ExtraSlow stosuje bardziej agresywną korekcję obrazu i nadaje się do trudnych danych wejściowych, takich jak BarCodes o niskim kontraście, obrócone lub częściowo zasłonięte.

Czy IronBarcode może odczytywać kody kreskowe z MemoryStream?

Tak. Metoda BarcodeReader.Read() przyjmuje parametr System.IO.Stream, który obejmuje MemoryStream, FileStream oraz strumienie sieciowe. Umożliwia to skanowanie danych obrazu przechowywanych w pamięci bez zapisywania ich na dysku.

Jak wygenerować kod QR w aplikacji .NET MAUI za pomocą IronBarcode?

Użyj metody QRCodeWriter.CreateQrCode() z wartością docelową, rozmiarem i poziomem korekcji błędów. Zapisz wynik jako plik PNG za pomocą metody SaveAsPng() i wyświetl go w kontrolce MAUI Image za pomocą metody ImageSource.FromFile().

Jakie uprawnienia są potrzebne do skanowania kodów kreskowych w aplikacji .NET MAUI na Androida?

Dodaj android.permission.READ_EXTERNAL_STORAGE i android.permission.CAMERA do pliku AndroidManifest.xml. W przypadku systemu iOS dodaj klucze NSPhotoLibraryUsageDescription i NSCameraUsageDescription do pliku Info.plist.

Jordi Bardia
Inżynier oprogramowania
Jordi jest najbardziej biegły w Pythonie, C# i C++. Kiedy nie wykorzystuje swoich umiejętności w Iron Software, programuje gry. Dzieląc odpowiedzialność za testowanie produktów, rozwój produktów i badania, Jordi wnosi ogromną wartość do ciągłej poprawy produktów. Różnorodne doświadczenia ...
Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie