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

Вот пример C#/VB.NET кода, который показывает, как создать изображение с штрих-кодом Aztec, DataMatrix, DotCode, QR, PDF417 и Micro PDF417, который хранит текст в разных текстовых кодировках.
using System;
using System.Text;

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

/// <summary>
/// Class that shows how to create an image with barcode Aztec, DataMatrix, QR, PDF417
/// or Micro PDF417, which stores text in different encodings.
/// Barcode value is encoded using the EciCharacterEncoder class.
/// </summary>
class EciCharacterEncoderExample
{
    /// <summary>
    /// Runs the test.
    /// </summary>
    public static void Run()
    {
        // ECI characters are available only for Aztec, DataMatrix, DotCode, QR, Han Xin Code, PDF417 or Micro PDF417 barcodes
        BarcodeType barcode = BarcodeType.DataMatrix;

        // create the encoder of Extended Channel Interpretation (ECI) characters
        EciCharacterEncoder eciEncoder = new EciCharacterEncoder(barcode);

        // create the ECI encoding for encoding text in codepage 28592
        EciCharacterEncoding cp28592EciEncoding =
            EciCharacterEncoding.GetEciCharacterEncodingForEncoding(Encoding.GetEncoding(28592));
        // append text in codepage 28592 to ECI encoder
        eciEncoder.AppendText(cp28592EciEncoding, "ążśźęćńółĄŻŚŹĘĆŃÓŁ");

        // create the ECI encoding for encoding text in codepage 28595
        EciCharacterEncoding cp28595EciEncoding =
            EciCharacterEncoding.GetEciCharacterEncodingForEncoding(Encoding.GetEncoding(28595));
        // append text in codepage 28595 to ECI encoder
        eciEncoder.AppendText(cp28595EciEncoding, "АБВГДЕЖЗИЙКЛМНОП");

        // create the ECI encoding for encoding text in codepage 950
        EciCharacterEncoding cp950EciEncoding =
            EciCharacterEncoding.GetEciCharacterEncodingForEncoding(Encoding.GetEncoding(950));
        // append text in codepage 950 to ECI encoder
        eciEncoder.AppendText(cp950EciEncoding, "日月火水木金土");

        // create the ECI encoding for encoding text in codepage 28591
        EciCharacterEncoding cp28591EciEncoding =
            EciCharacterEncoding.GetEciCharacterEncodingForEncoding(Encoding.GetEncoding(28591));
        // append text in codepage 28591 to ECI encoder
        eciEncoder.AppendText(cp28591EciEncoding, "test!");


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

            // set the barcode value as value encoded by ECI encoder
            writer.Settings.ValueItems = eciEncoder.ToValueItems();

            // create image with barcode
            using (VintasoftBitmap barcodeImage = writer.GetBarcodeAsVintasoftBitmap())
            {
                // create the barcode reader
                using (BarcodeReader reader = new BarcodeReader())
                {
                    // specify that reader must search for barcodes of specified type
                    reader.Settings.ScanBarcodeTypes = barcode;

                    // read barcode from image
                    ValueItemBase[] decodeItems = reader.ReadBarcodes(barcodeImage)[0].ValueItems;

                    // decode the barcode value
                    string decodedString = EciCharacterDecoder.Decode(decodeItems);

                    // if decoded value does not match source value
                    if (decodedString != "ążśźęćńółĄŻŚŹĘĆŃÓŁАБВГДЕЖЗИЙКЛМНОП日月火水木金土test!")
                        // throw exception
                        throw new ApplicationException();
                }
            }
        }

        Console.WriteLine("OK");
    }
}

Imports System.Text

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

''' <summary>
''' Class that shows how to create an image with barcode Aztec, DataMatrix, QR, PDF417
''' or Micro PDF417, which stores text in different encodings.
''' Barcode value is encoded using the EciCharacterEncoder class.
''' </summary>
Class EciCharacterEncoderExample
    ''' <summary>
    ''' Runs the test.
    ''' </summary>
    Public Shared Sub Run()
        ' ECI characters are available only for Aztec, DataMatrix, DotCode, QR,
        ' Han Xin Code, PDF417 or Micro PDF417 barcodes
        Dim barcode As BarcodeType = BarcodeType.DataMatrix

        ' create the encoder of Extended Channel Interpretation (ECI) characters
        Dim eciEncoder As New EciCharacterEncoder(barcode)

        ' create the ECI encoding for encoding text in codepage 28592
        Dim cp28592EciEncoding As EciCharacterEncoding = _
            EciCharacterEncoding.GetEciCharacterEncodingForEncoding(Encoding.GetEncoding(28592))
        ' append text in codepage 28592 to ECI encoder
        eciEncoder.AppendText(cp28592EciEncoding, "ążśźęćńółĄŻŚŹĘĆŃÓŁ")

        ' create the ECI encoding for encoding text in codepage 28595
        Dim cp28595EciEncoding As EciCharacterEncoding = _
            EciCharacterEncoding.GetEciCharacterEncodingForEncoding(Encoding.GetEncoding(28595))
        ' append text in codepage 28595 to ECI encoder
        eciEncoder.AppendText(cp28595EciEncoding, "АБВГДЕЖЗИЙКЛМНОП")

        ' create the ECI encoding for encoding text in codepage 950
        Dim cp950EciEncoding As EciCharacterEncoding = _
            EciCharacterEncoding.GetEciCharacterEncodingForEncoding(Encoding.GetEncoding(950))
        ' append text in codepage 950 to ECI encoder
        eciEncoder.AppendText(cp950EciEncoding, "日月火水木金土")

        ' create the ECI encoding for encoding text in codepage 28591
        Dim cp28591EciEncoding As EciCharacterEncoding = _
            EciCharacterEncoding.GetEciCharacterEncodingForEncoding(Encoding.GetEncoding(28591))
        ' append text in codepage 28591 to ECI encoder
        eciEncoder.AppendText(cp28591EciEncoding, "test!")


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

            ' set the barcode value as value encoded by ECI encoder
            writer.Settings.ValueItems = eciEncoder.ToValueItems()

            ' create image with barcode
            Using barcodeImage As VintasoftBitmap = writer.GetBarcodeAsVintasoftBitmap()
                ' create the barcode reader
                Using reader As New BarcodeReader()
                    ' specify that reader must search for barcodes of specified type
                    reader.Settings.ScanBarcodeTypes = barcode

                    ' read barcode from image
                    Dim decodeItems As ValueItemBase() = reader.ReadBarcodes(barcodeImage)(0).ValueItems

                    ' decode the barcode value
                    Dim decodedString As String = EciCharacterDecoder.Decode(decodeItems)

                    ' if decoded value does not match source value
                    If decodedString <> "ążśźęćńółĄŻŚŹĘĆŃÓŁАБВГДЕЖЗИЙКЛМНОП日月火水木金土test!" Then
                        ' throw exception
                        Throw New ApplicationException()
                    End If
                End Using
            End Using
        End Using

        Console.WriteLine("OK")
    End Sub
End Class