VintaSoft Barcode .NET SDK 16.0: Руководство для .NET разработчика
В этом разделе
Как создать двумерный штрих-код, хранящий текст и двоичные данные?
В этом разделе
Значение двумерного штрих-кода может быть разделено на элементы, т.е. значение штрих-кода может хранить смесь текста и двоичных данных.

Вот пример C#/VB.NET кода, который демонстрирует, как создать двумерный штрих-код с текстом и двоичными данными.
using System;
using System.Text;

using Vintasoft.Barcode;
using Vintasoft.Barcode.BarcodeInfo;
using Vintasoft.Imaging;

/// <summary>
/// Test that shows how to create a 2D barcode image with text and binary data.
/// </summary>
class ValueItemsExample
{

    /// <summary>
    /// Runs the test.
    /// </summary>
    public static void Test()
    {
        // generate binary data
        byte[] data = new byte[16];
        for (int i = 0; i < data.Length; i++)
            data[i] = (byte)(i * 16);

        // create image with PDF417 barcode
        using (VintasoftBitmap barcodeImage = CreateBarcodeWithTextAndBinaryData(BarcodeType.PDF417, data))
        {
            // read barcode from image
            ReadBarcode(barcodeImage, BarcodeType.PDF417);
        }

        // create image with Aztec barcode
        using (VintasoftBitmap barcodeImage = CreateBarcodeWithTextAndBinaryData(BarcodeType.Aztec, data))
        {
            // read barcode from image
            ReadBarcode(barcodeImage, BarcodeType.Aztec);
        }

        // create image with DataMatrix barcode
        using (VintasoftBitmap barcodeImage = CreateBarcodeWithTextAndBinaryData(BarcodeType.DataMatrix, data))
        {
            // read barcode from image
            ReadBarcode(barcodeImage, BarcodeType.DataMatrix);
        }

        // create image with QR barcode
        using (VintasoftBitmap barcodeImage = CreateBarcodeWithTextAndBinaryData(BarcodeType.QR, data))
        {
            // read barcode from image
            ReadBarcode(barcodeImage, BarcodeType.QR);
        }
    }
    
    /// <summary>
    /// Creates image with barcode, which contains text and binary data.
    /// </summary>
    static VintasoftBitmap CreateBarcodeWithTextAndBinaryData(BarcodeType barcodeType, byte[] data)
    {
        // create text value item
        TextValueItem textData = new TextValueItem("BINARY DATA: ");
        // create binary value item
        BinaryValueItem binaryData = new BinaryValueItem(data);

        // create the barcode writer
        using (BarcodeWriter writer = new BarcodeWriter())
        {
            // specify that writer must generate barcode of spefied type
            writer.Settings.Barcode = barcodeType;

            // set the barcode value items
            writer.Settings.ValueItems = new ValueItemBase[] { textData, binaryData };

            // create image with barcode
            return writer.GetBarcodeAsVintasoftBitmap();
        }
    }

    /// <summary>
    /// Reads barcode from image and shows the barcode value items.
    /// </summary>
    static void ReadBarcode(VintasoftBitmap image, BarcodeType barcode)
    {
        // create the barcode reader
        using (BarcodeReader reader = new BarcodeReader())
        {
            // specify that reader must search for barcodes of specified types
            reader.Settings.ScanBarcodeTypes = barcode;

            // read barcode from image
            IBarcodeInfo barcodeInfo = reader.ReadBarcodes(image)[0];

            // for each found barcode
            for (int i = 0; i < barcodeInfo.ValueItems.Length; i++)
            {
                // show the barcode value tems

                StringBuilder itemValue = new StringBuilder();
                if (barcodeInfo.ValueItems[i] is BinaryValueItem)
                {
                    byte[] data = ((BinaryValueItem)barcodeInfo.ValueItems[i]).Value;
                    for (int j = 0; j < data.Length; j++)
                        itemValue.Append(string.Format("{0} ", data[j]));
                }
                else
                {
                    itemValue.Append(barcodeInfo.ValueItems[i].ToString());
                }
                Console.WriteLine(
                    string.Format("[{0}] {1}", barcodeInfo.ValueItems[i].GetType().Name, itemValue));
            }
        }

        Console.WriteLine();
    }

}

Imports System.Text

Imports Vintasoft.Barcode
Imports Vintasoft.Barcode.BarcodeInfo
Imports Vintasoft.Imaging

''' <summary>
''' Test that shows how to create a 2D barcode image with text and binary data.
''' </summary>
Class ValueItemsExample

    ''' <summary>
    ''' Runs the test.
    ''' </summary>
    Public Shared Sub Test()
        ' generate binary data
        Dim data As Byte() = New Byte(15) {}
        For i As Integer = 0 To data.Length - 1
            data(i) = CByte(i * 16)
        Next

        ' create image with PDF417 barcode
        Using barcodeImage As VintasoftBitmap = CreateBarcodeWithTextAndBinaryData(BarcodeType.PDF417, data)
            ' read barcode from image
            ReadBarcode(barcodeImage, BarcodeType.PDF417)
        End Using

        ' create image with Aztec barcode
        Using barcodeImage As VintasoftBitmap = CreateBarcodeWithTextAndBinaryData(BarcodeType.Aztec, data)
            ' read barcode from image
            ReadBarcode(barcodeImage, BarcodeType.Aztec)
        End Using

        ' create image with DataMatrix barcode
        Using barcodeImage As VintasoftBitmap = CreateBarcodeWithTextAndBinaryData(BarcodeType.DataMatrix, data)
            ' read barcode from image
            ReadBarcode(barcodeImage, BarcodeType.DataMatrix)
        End Using

        ' create image with QR barcode
        Using barcodeImage As VintasoftBitmap = CreateBarcodeWithTextAndBinaryData(BarcodeType.QR, data)
            ' read barcode from image
            ReadBarcode(barcodeImage, BarcodeType.QR)
        End Using
    End Sub

    ''' <summary>
    ''' Creates image with barcode, which contains text and binary data.
    ''' </summary>
    Private Shared Function CreateBarcodeWithTextAndBinaryData(barcodeType As BarcodeType, data As Byte()) As VintasoftBitmap
        ' create text value item
        Dim textData As New TextValueItem("BINARY DATA: ")
        ' create binary value item
        Dim binaryData As New BinaryValueItem(data)

        ' create the barcode writer
        Using writer As New BarcodeWriter()
            ' specify that writer must generate barcode of spefied type
            writer.Settings.Barcode = barcodeType

            ' set the barcode value items
            writer.Settings.ValueItems = New ValueItemBase() {textData, binaryData}

            ' create image with barcode
            Return writer.GetBarcodeAsVintasoftBitmap()
        End Using
    End Function

    ''' <summary>
    ''' Reads barcode from image and shows the barcode value items.
    ''' </summary>
    Private Shared Sub ReadBarcode(image As VintasoftBitmap, barcode As BarcodeType)
        ' create the barcode reader
        Using reader As New BarcodeReader()
            ' specify that reader must search for barcodes of specified types
            reader.Settings.ScanBarcodeTypes = barcode

            ' read barcode from image
            Dim barcodeInfo As IBarcodeInfo = reader.ReadBarcodes(image)(0)

            ' for each found barcode
            For i As Integer = 0 To barcodeInfo.ValueItems.Length - 1
                ' show the barcode value tems

                Dim itemValue As New StringBuilder()
                If TypeOf barcodeInfo.ValueItems(i) Is BinaryValueItem Then
                    Dim data As Byte() = DirectCast(barcodeInfo.ValueItems(i), BinaryValueItem).Value
                    For j As Integer = 0 To data.Length - 1
                        itemValue.Append(String.Format("{0} ", data(j)))
                    Next
                Else
                    itemValue.Append(barcodeInfo.ValueItems(i).ToString())
                End If
                Console.WriteLine(String.Format("[{0}] {1}", barcodeInfo.ValueItems(i).[GetType]().Name, itemValue))
            Next
        End Using

        Console.WriteLine()
    End Sub

End Class