VintaSoft Barcode .NET SDK 16.0: Documentation for .NET developer
In This Topic
    How to create 2D barcode that stores text and binary data?
    In This Topic
    Value of 2D barcode can be divided into value items, i.e. barcode value can store mix of text and binary data.

    Here is C#/VB.NET code that demonstrates how to create a 2D barcode with text and binary data.
    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