Gerar e exibir imagem de código de barras no WPF

Um código de barras contém informações sobre um produto ou uma empresa, apresentadas visualmente em um formato legível por máquina. Os códigos de barras são amplamente utilizados para rastrear remessas e gerenciamento de estoque. Podemos gerar facilmente vários tipos de códigos de barras em aplicativos WPF. Neste artigo, aprenderemos como gerar e exibir uma imagem de código de barras no aplicativo WPF. Após seguir os passos mencionados, teremos nosso próprio WPF Barcode Generator em C#. Então vamos começar.

O artigo deve abordar os seguintes tópicos:

  1. Recursos do WPF Barcode Generator
  2. API do gerador de código de barras C#
  3. Etapas para criar um gerador de código de barras WPF
  4. Gerar código de barras com opções adicionais
  5. Gerador de código de barras WPF de demonstração
  6. Baixar código-fonte

Recursos do gerador de código de barras WPF

Nosso gerador de código de barras WPF terá os seguintes recursos.

  1. Gere os seguintes tipos de simbologias de código de barras:
    • Código 128
    • Código 11
    • Código 39
    • QR
    • Matriz de dados
    • EAN13
    • EAN8
    • ITF14
    • PDF417
  2. Salve a imagem de código de barras gerada nos seguintes formatos:
  3. Visualize a imagem do código de barras gerada.

API do gerador de código de barras C#

Usaremos a API Aspose.BarCode for .NET para gerar imagens de código de barras e visualizá-las no aplicativo WPF. É uma API rica em recursos que permite gerar, digitalizar e ler uma ampla variedade de tipos de código de barras. Além disso, permite manipular a aparência dos códigos de barras gerados, como cor de fundo, cor da barra, ângulo de rotação, dimensão x, qualidade da imagem, resolução, legendas, tamanho e muito mais.

Etapas para criar o gerador de código de barras WPF

Podemos gerar e exibir uma imagem de código de barras no aplicativo WPF seguindo as etapas abaixo:

  • Em primeiro lugar, crie um novo projeto e selecione o modelo de projeto WPF Application.
Select the project template.

Select the project template.

  • Em seguida, digite o nome do projeto, por exemplo, “BarcodeGen”.

  • Em seguida, selecione a estrutura .NET e escolha criar.

  • Em seguida, abra o Gerenciador de Pacotes NuGet e instale o pacote Aspose.BarCode for .NET.

Instale o Aspose.BarCode para .NET

Instale o Aspose.BarCode para .NET

  • Em seguida, adicione uma nova classe Barcode.cs para definir o código de barras.
public class Barcode
{
    public string? Text { get; set; }

    public BaseEncodeType? BarcodeType { get; set; }

    public BarCodeImageFormat ImageType { get; set; }
}
  • Em seguida, abra o MainWindow.xaml e adicione os controles necessários conforme mostrado abaixo:
Adicione os controles necessários

Adicione os controles necessários

Você também pode substituir o conteúdo de MainWindow.xaml pelo script a seguir.

<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>
  • Em seguida, abra a classe MainWindow.xaml.cs e adicione o evento btnGenerateClick para manipular a ação de clique para o botão Gerar código de barras.
private void btnGenerate_Click(object sender, RoutedEventArgs e)
{
    // Definir padrão como png
    var imageType = "Png";

    // Obtenha o formato de imagem selecionado pelo usuário
    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();
    }

    // Obter formato de imagem de enum
    var imageFormat = (BarCodeImageFormat)Enum.Parse(typeof(BarCodeImageFormat), imageType.ToString());

    // Definir padrão como Código128
    var encodeType = EncodeTypes.Code128;

    // Obter o tipo de código de barras selecionado pelo usuário
    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;
        }
    }

    // Inicializar objeto de código de barras
    Barcode barcode = new Barcode();
    barcode.Text = tbCodeText.Text;
    barcode.BarcodeType = encodeType;
    barcode.ImageType = imageFormat;

    try
    {
        string imagePath = "";

        if (cbGenerateWithOptions.IsChecked == true)
        {
            // Gere código de barras com opções adicionais e obtenha o caminho da imagem
            imagePath = GenerateBarcodeWithOptions(barcode);
        }
        else
        {
            // Gerar código de barras e obter o caminho da imagem
            imagePath = GenerateBarcode(barcode);
        }

        // Exibir a imagem
        Uri fileUri = new Uri(Path.GetFullPath(imagePath));
        imgDynamic.Source = new BitmapImage(fileUri);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
  • Depois disso, adicione uma função para gerar um código de barras.
private string GenerateBarcode(Barcode barcode)
{
    // Caminho da imagem
    string imagePath = comboBarcodeType.Text + "." + barcode.ImageType;

    // Iniciar gerador de código de barras
    BarcodeGenerator generator = new BarcodeGenerator(barcode.BarcodeType, barcode.Text);

    // Salve a imagem
    generator.Save(imagePath, barcode.ImageType);

    return imagePath;
}
  • Por fim, execute o aplicativo.

Gerar código de barras com opções adicionais

Também podemos gerar códigos de barras com opções adicionais específicas para tipos de código de barras. No gerador de código de barras WPF, adicionamos uma caixa de seleção para gerar um código de barras com opções. Ele chamará a seguinte função especificando opções adicionais para diferentes tipos de código de barras.

private string GenerateBarcodeWithOptions(Barcode barcode)
{
    // Caminho da imagem
    string imagePath = comboBarcodeType.Text + "." + barcode.ImageType;

    // Iniciar gerador de código de barras
    BarcodeGenerator generator = new BarcodeGenerator(barcode.BarcodeType, barcode.Text);

    if(barcode.BarcodeType == EncodeTypes.QR)
    {
        generator.Parameters.Barcode.XDimension.Pixels = 4;
        //definir versão automática
        generator.Parameters.Barcode.QR.QrVersion = QRVersion.Auto;
        //Definir o tipo de codificação QR automática
        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)
    {
        //definir DataMatrix ECC para 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;
        //definir BarHeight 40
        generator.Parameters.Barcode.BarHeight.Pixels = 40;
    }

    // Salve a imagem
    generator.Save(imagePath, barcode.ImageType);

    return imagePath;
}

Você pode ler mais sobre Especificações de geração para tipos de código de barras na documentação.

Gerador de código de barras WPF de demonstração

A seguir está a demonstração do aplicativo WPF Barcode Generator que acabamos de criar.

Gerador de código de barras WPF de demonstração

Gerador de código de barras WPF de demonstração

Baixar código fonte

Você pode baixar o código-fonte completo do aplicativo WPF Barcode Generator de GitHub.

Obtenha uma licença gratuita

Você pode obter uma licença temporária gratuita para experimentar a biblioteca sem limitações de avaliação.

Conclusão

Neste artigo, aprendemos como gerar vários tipos de códigos de barras em um aplicativo WPF. Também vimos como visualizar a imagem de código de barras gerada programaticamente. Além disso, você pode aprender mais sobre Aspose.BarCode para .NET API usando a documentação. Em caso de qualquer ambiguidade, não hesite em contactar-nos no nosso fórum.

Veja também