Wygeneruj i wyświetl obraz kodu kreskowego w WPF

Kod kreskowy zawiera informacje o produkcie lub firmie, przedstawione wizualnie w formie czytelnej dla komputera. Kody kreskowe są szeroko stosowane do śledzenia przesyłek i zarządzania zapasami. W aplikacjach WPF możemy łatwo generować różnego rodzaju kody kreskowe. W tym artykule dowiemy się, jak wygenerować i wyświetlić obraz kodu kreskowego w aplikacji WPF. Po wykonaniu wspomnianych kroków będziemy mieć własny generator kodów kreskowych WPF w języku C#. Więc zacznijmy.

Artykuł obejmie następujące tematy:

  1. Funkcje generatora kodów kreskowych WPF
  2. API generatora kodów kreskowych C#
  3. Kroki tworzenia generatora kodów kreskowych WPF
  4. Wygeneruj kod kreskowy z dodatkowymi opcjami
  5. Demonstracyjny generator kodów kreskowych WPF
  6. Pobierz kod źródłowy

Funkcje generatora kodów kreskowych WPF

Nasz generator kodów kreskowych WPF będzie miał następujące funkcje.

  1. Generuj następujące typy symboli kodów kreskowych:
    • Kod128
    • Kod11
    • Kod39
    • QR
    • Datamatrix
    • EAN13
    • EAN8
    • ITF14
    • PDF417
  2. Zapisz wygenerowany obraz kodu kreskowego w następujących formatach:
  3. Wyświetl podgląd wygenerowanego obrazu kodu kreskowego.

Interfejs API generatora kodów kreskowych C#

Będziemy używać API Aspose.BarCode for .NET do generowania obrazów kodów kreskowych i podglądu ich w aplikacji WPF. Jest to bogaty w funkcje interfejs API, który umożliwia generowanie, skanowanie i odczytywanie szerokiej gamy typów kodów kreskowych. Ponadto pozwala manipulować wyglądem generowanych kodów kreskowych, takim jak kolor tła, kolor paska, kąt obrotu, wymiar x, jakość obrazu, rozdzielczość, podpisy, rozmiar i wiele więcej.

Kroki, aby utworzyć generator kodów kreskowych WPF

Możemy wygenerować i wyświetlić obraz kodu kreskowego w aplikacji WPF, wykonując poniższe czynności:

  • Najpierw utwórz nowy projekt i wybierz szablon projektu aplikacji WPF.
  • Następnie wprowadź nazwę projektu np. „BarcodeGen”.

  • Następnie wybierz platformę .NET, a następnie wybierz opcję tworzenia.

  • Następnie otwórz Menedżera pakietów NuGet i zainstaluj pakiet Aspose.BarCode for .NET.

Zainstaluj Aspose.BarCode for .NET

Zainstaluj Aspose.BarCode for .NET

  • Następnie dodaj nową klasę Barcode.cs, aby zdefiniować kod kreskowy.
public class Barcode
{
    public string? Text { get; set; }

    public BaseEncodeType? BarcodeType { get; set; }

    public BarCodeImageFormat ImageType { get; set; }
}
  • Następnie otwórz plik MainWindow.xaml i dodaj wymagane kontrolki, jak pokazano poniżej:
Dodaj wymagane elementy sterujące

Dodaj wymagane elementy sterujące

Możesz również zastąpić zawartość pliku MainWindow.xaml następującym skryptem.

<Window x:Class="BarcodeGen.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:BarcodeGen"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">

    <Grid Width="800" Height="384">
        <Grid.RowDefinitions>
            <RowDefinition Height="191*"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Label Content="Select Barcode Type:" HorizontalAlignment="Left" Margin="10,16,0,0" VerticalAlignment="Top" FontSize="14" FontWeight="Bold"/>
        <ComboBox x:Name="comboBarcodeType" HorizontalAlignment="Left" Margin="10,47,0,305" Width="273" Text="Select Barcode Type" IsReadOnly="True" SelectedIndex="-1" FontSize="14" Height="30">
            <ComboBoxItem Content="Code128"></ComboBoxItem>
            <ComboBoxItem Content="Code11"></ComboBoxItem>
            <ComboBoxItem Content="Code32"></ComboBoxItem>
            <ComboBoxItem Content="QR"></ComboBoxItem>
            <ComboBoxItem Content="DataMatrix"></ComboBoxItem>
            <ComboBoxItem Content="EAN13"></ComboBoxItem>
            <ComboBoxItem Content="EAN8"></ComboBoxItem>
            <ComboBoxItem Content="ITF14"></ComboBoxItem>
            <ComboBoxItem Content="PDF417"></ComboBoxItem>
        </ComboBox>

        <Button Name="btnGenerate" Click="btnGenerate_Click" Content="Generate Barcode" HorizontalAlignment="Left" Margin="10,346,0,0" VerticalAlignment="Top" Height="28" Width="273" FontSize="14" FontWeight="Bold"/>
        <Label Content="Enter Your Text:" HorizontalAlignment="Left" Margin="10,92,0,0" VerticalAlignment="Top" FontSize="14" FontWeight="Bold"/>
        <TextBox Name="tbCodeText" TextWrapping="Wrap" Margin="10,123,517,134" Width="273" Height="125"/>
        <Label Content="Select Image Format:" HorizontalAlignment="Left" Margin="10,253,0,0" VerticalAlignment="Top" FontSize="14" FontWeight="Bold"/>
        <RadioButton Name="rbPng" Content="Png" GroupName="rbImageType" Margin="10,285,739,77" Width="51" Height="20" FontSize="14" IsChecked="True"/>
        <RadioButton Name="rbJpg" Content="Jpeg" GroupName="rbImageType" Margin="121,285,628,77" Width="51" Height="20" FontSize="14"/>
        <RadioButton Name="rbBmp" Content="Bmp" GroupName="rbImageType" Margin="232,285,517,77" Width="51" Height="20" FontSize="14"/>
        <CheckBox Name="cbGenerateWithOptions" Height="20" Margin="10,321,517,41" Content="Generate with Options" />
        <GroupBox Header="View Generated Barcode" Margin="317,0,22,0" FontSize="14" FontWeight="Bold">
            <Image Name="imgDynamic" Margin="6,-6,7,6" Stretch="None"  />
        </GroupBox>
    </Grid>
</Window>
  • Następnie otwórz klasę MainWindow.xaml.cs i dodaj zdarzenie btnGenerateClick, aby obsłużyć akcję kliknięcia dla przycisku Generuj kod kreskowy.
private void btnGenerate_Click(object sender, RoutedEventArgs e)
{
    // Ustaw domyślnie jako Png
    var imageType = "Png";

    // Uzyskaj wybrany przez użytkownika format obrazu
    if(rbPng.IsChecked == true)
    {
        imageType = rbPng.Content.ToString();
    }
    else if(rbBmp.IsChecked == true)
    {
        imageType = rbBmp.Content.ToString();
    }
    else if(rbJpg.IsChecked == true)
    {
        imageType = rbJpg.Content.ToString();
    }

    // Pobierz format obrazu z enum
    var imageFormat = (BarCodeImageFormat)Enum.Parse(typeof(BarCodeImageFormat), imageType.ToString());

    // Ustaw domyślnie jako Code128
    var encodeType = EncodeTypes.Code128;

    // Uzyskaj wybrany przez użytkownika typ kodu kreskowego
    if (!string.IsNullOrEmpty(comboBarcodeType.Text))
    {
        switch (comboBarcodeType.Text)
        {
            case "Code128":
                encodeType = EncodeTypes.Code128;
                break;

            case "ITF14":
                encodeType = EncodeTypes.ITF14;
                break;

            case "EAN13":
                encodeType = EncodeTypes.EAN13;
                break;

            case "Datamatrix":
                encodeType = EncodeTypes.DataMatrix;
                break;

            case "Code32":
                encodeType = EncodeTypes.Code32;
                break;

            case "Code11":
                encodeType = EncodeTypes.Code11;
                break;

            case "PDF417":
                encodeType = EncodeTypes.Pdf417;
                break;

            case "EAN8":
                encodeType = EncodeTypes.EAN8;
                break;

            case "QR":
                encodeType = EncodeTypes.QR;
                break;
        }
    }

    // Zainicjuj obiekt kodu kreskowego
    Barcode barcode = new Barcode();
    barcode.Text = tbCodeText.Text;
    barcode.BarcodeType = encodeType;
    barcode.ImageType = imageFormat;

    try
    {
        string imagePath = "";

        if (cbGenerateWithOptions.IsChecked == true)
        {
            // Wygeneruj kod kreskowy z dodatkowymi opcjami i uzyskaj ścieżkę do obrazu
            imagePath = GenerateBarcodeWithOptions(barcode);
        }
        else
        {
            // Wygeneruj kod kreskowy i uzyskaj ścieżkę obrazu
            imagePath = GenerateBarcode(barcode);
        }

        // Wyświetl obraz
        Uri fileUri = new Uri(Path.GetFullPath(imagePath));
        imgDynamic.Source = new BitmapImage(fileUri);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
  • Następnie dodaj funkcję do generowania kodu kreskowego.
private string GenerateBarcode(Barcode barcode)
{
    // Ścieżka obrazu
    string imagePath = comboBarcodeType.Text + "." + barcode.ImageType;

    // Uruchom generator kodów kreskowych
    BarcodeGenerator generator = new BarcodeGenerator(barcode.BarcodeType, barcode.Text);

    // Zapisz obraz
    generator.Save(imagePath, barcode.ImageType);

    return imagePath;
}
  • Na koniec uruchom aplikację.

Wygeneruj kod kreskowy z dodatkowymi opcjami

Możemy również generować kody kreskowe z dodatkowymi opcjami specyficznymi dla typów kodów kreskowych. W generatorze kodów kreskowych WPF dodaliśmy pole wyboru, aby wygenerować kod kreskowy z opcjami. Wywoła następującą funkcję określającą dodatkowe opcje dla różnych typów kodów kreskowych.

private string GenerateBarcodeWithOptions(Barcode barcode)
{
    // Ścieżka obrazu
    string imagePath = comboBarcodeType.Text + "." + barcode.ImageType;

    // Uruchom generator kodów kreskowych
    BarcodeGenerator generator = new BarcodeGenerator(barcode.BarcodeType, barcode.Text);

    if(barcode.BarcodeType == EncodeTypes.QR)
    {
        generator.Parameters.Barcode.XDimension.Pixels = 4;
        //ustaw wersję automatyczną
        generator.Parameters.Barcode.QR.QrVersion = QRVersion.Auto;
        //Ustaw typ automatycznego kodowania QR
        generator.Parameters.Barcode.QR.QrEncodeType = QREncodeType.Auto;
    } 
    else if(barcode.BarcodeType == EncodeTypes.Pdf417)
    {
        generator.Parameters.Barcode.XDimension.Pixels = 2;
        generator.Parameters.Barcode.Pdf417.Columns = 3;
    }
    else if(barcode.BarcodeType == EncodeTypes.DataMatrix)
    {
        //ustaw DataMatrix ECC na 140
        generator.Parameters.Barcode.DataMatrix.DataMatrixEcc = DataMatrixEccType.Ecc200;
    }
    else if(barcode.BarcodeType == EncodeTypes.Code32)
    {
        generator.Parameters.Barcode.XDimension.Millimeters = 1f;
    }
    else
    {
        generator.Parameters.Barcode.XDimension.Pixels = 2;
        //ustaw wysokość słupka 40
        generator.Parameters.Barcode.BarHeight.Pixels = 40;
    }

    // Zapisz obraz
    generator.Save(imagePath, barcode.ImageType);

    return imagePath;
}

Możesz przeczytać więcej o Specyfikacjach generacji dla typów kodów kreskowych w dokumentacji.

Demonstracyjny generator kodów kreskowych WPF

Poniżej znajduje się demonstracja aplikacji WPF Barcode Generator, którą właśnie stworzyliśmy.

Demonstracyjny generator kodów kreskowych WPF

Demonstracyjny generator kodów kreskowych WPF

Pobierz kod źródłowy

Możesz pobrać pełny kod źródłowy aplikacji WPF Barcode Generator z GitHub.

Uzyskaj bezpłatną licencję

Możesz uzyskać bezpłatną tymczasową licencję, aby wypróbować bibliotekę bez ograniczeń ewaluacyjnych.

Wniosek

W tym artykule nauczyliśmy się generować różne typy kodów kreskowych w aplikacji WPF. Widzieliśmy również, jak programowo wyświetlić podgląd wygenerowanego obrazu kodu kreskowego. Poza tym możesz dowiedzieć się więcej o Aspose.BarCode for .NET API korzystając z dokumentacji. W przypadku jakichkolwiek niejasności prosimy o kontakt na naszym forum.

Zobacz też