Generar y mostrar imágenes de código de barras en WPF

Un código de barras contiene información sobre un producto o una empresa, presentada visualmente en un formato legible por máquina. Los códigos de barras se utilizan ampliamente para realizar un seguimiento de los envíos y la gestión de inventario. Podemos generar fácilmente varios tipos de códigos de barras en aplicaciones WPF. En este artículo, aprenderemos cómo generar y mostrar una imagen de código de barras en la aplicación WPF. Luego de seguir los pasos mencionados, tendremos nuestro propio generador de código de barras WPF en C#. Vamos a empezar.

El artículo cubrirá los siguientes temas:

  1. Características del generador de código de barras WPF
  2. API del generador de código de barras de C#
  3. Pasos para crear un generador de código de barras WPF
  4. Generar código de barras con opciones adicionales
  5. Generador de código de barras WPF de demostración
  6. Descargar código fuente

Características del generador de código de barras WPF

Nuestro generador de código de barras WPF tendrá las siguientes características.

  1. Genere los siguientes tipos de simbologías de códigos de barras:
    • código128
    • Código11
    • código39
    • código QR
    • Matriz de datos
    • EAN13
    • EAN8
    • ITF14
    • PDF417
  2. Guarde la imagen del código de barras generada en los siguientes formatos:
  3. Obtenga una vista previa de la imagen del código de barras generada.

API del generador de código de barras C#

Usaremos la API Aspose.BarCode for .NET para generar imágenes de código de barras y obtener una vista previa en la aplicación WPF. Es una API rica en funciones que le permite generar, escanear y leer una amplia gama de tipos de códigos de barras. Además, permite manipular la apariencia de los códigos de barras generados, como el color de fondo, el color de la barra, el ángulo de rotación, la dimensión x, la calidad de la imagen, la resolución, los subtítulos, el tamaño y mucho más.

Pasos para crear un generador de código de barras WPF

Podemos generar y mostrar una imagen de código de barras en la aplicación WPF siguiendo los pasos que se indican a continuación:

  • En primer lugar, cree un nuevo proyecto y seleccione la plantilla de proyecto de la aplicación WPF.
Select the project template.

Select the project template.

  • A continuación, introduzca el nombre del proyecto, por ejemplo, “BarcodeGen”.

  • Luego, seleccione el marco .NET y luego elija crear.

  • A continuación, abra NuGet Package Manager e instale el paquete Aspose.BarCode for .NET.

Instalar Aspose.BarCode para .NET

Instalar Aspose.BarCode para .NET

  • Luego, agregue una nueva clase Barcode.cs para definir el código de barras.
public class Barcode
{
    public string? Text { get; set; }

    public BaseEncodeType? BarcodeType { get; set; }

    public BarCodeImageFormat ImageType { get; set; }
}
  • A continuación, abra MainWindow.xaml y agregue los controles necesarios como se muestra a continuación:
Agregar los controles necesarios

Agregar los controles necesarios

También puede reemplazar el contenido de MainWindow.xaml con el siguiente script.

<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>
  • Luego, abra la clase MainWindow.xaml.cs y agregue el evento btnGenerateClick para manejar la acción de clic para el botón Generar código de barras.
private void btnGenerate_Click(object sender, RoutedEventArgs e)
{
    // Establecer por defecto como Png
    var imageType = "Png";

    // Obtener el formato de imagen seleccionado por el usuario
    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();
    }

    // Obtener formato de imagen de enumeración
    var imageFormat = (BarCodeImageFormat)Enum.Parse(typeof(BarCodeImageFormat), imageType.ToString());

    // Establecer por defecto como Code128
    var encodeType = EncodeTypes.Code128;

    // Obtener el tipo de código de barras seleccionado por el usuario
    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)
        {
            // Genere un código de barras con opciones adicionales y obtenga la ruta de la imagen
            imagePath = GenerateBarcodeWithOptions(barcode);
        }
        else
        {
            // Generar código de barras y obtener la ruta de la imagen
            imagePath = GenerateBarcode(barcode);
        }

        // Mostrar la imagen
        Uri fileUri = new Uri(Path.GetFullPath(imagePath));
        imgDynamic.Source = new BitmapImage(fileUri);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
  • Después de eso, agregue una función para generar un código de barras.
private string GenerateBarcode(Barcode barcode)
{
    // Ruta de la imagen
    string imagePath = comboBarcodeType.Text + "." + barcode.ImageType;

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

    // Guarda la imagen
    generator.Save(imagePath, barcode.ImageType);

    return imagePath;
}
  • Finalmente, ejecute la aplicación.

Generar código de barras con opciones adicionales

También podemos generar códigos de barras con opciones adicionales específicas para los tipos de códigos de barras. En el generador de código de barras WPF, hemos agregado una casilla de verificación para generar un código de barras con opciones. Llamará a la siguiente función especificando opciones adicionales para diferentes tipos de códigos de barras.

private string GenerateBarcodeWithOptions(Barcode barcode)
{
    // Ruta de la imagen
    string imagePath = comboBarcodeType.Text + "." + barcode.ImageType;

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

    if(barcode.BarcodeType == EncodeTypes.QR)
    {
        generator.Parameters.Barcode.XDimension.Pixels = 4;
        //establecer la versión automática
        generator.Parameters.Barcode.QR.QrVersion = QRVersion.Auto;
        //Establecer el tipo de codificación QR automático
        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)
    {
        //establezca DataMatrix ECC en 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;
        //establecer BarHeight 40
        generator.Parameters.Barcode.BarHeight.Pixels = 40;
    }

    // Guarda la imagen
    generator.Save(imagePath, barcode.ImageType);

    return imagePath;
}

Puede leer más sobre Especificaciones de generación para tipos de código de barras en la documentación.

Generador de código de barras WPF de demostración

La siguiente es la demostración de la aplicación WPF Barcode Generator que acabamos de crear.

Generador de código de barras WPF de demostración

Generador de código de barras WPF de demostración

Descargar código fuente

Puede descargar el código fuente completo de la aplicación WPF Barcode Generator desde GitHub.

Obtenga una licencia gratis

Puede obtener una licencia temporal gratuita para probar la biblioteca sin limitaciones de evaluación.

Conclusión

En este artículo, hemos aprendido cómo generar varios tipos de códigos de barras en una aplicación WPF. También hemos visto cómo obtener una vista previa de la imagen del código de barras generada mediante programación. Además, puede obtener más información sobre Aspose.BarCode para la API de .NET utilizando la documentación. En caso de cualquier ambigüedad, no dude en contactarnos en nuestro foro.

Ver también