VintaSoft Barcode .NET SDK-ի միջոցով ճանաչեք և ստեղծեք PDF417 շտրիխ կոդեր

Բլոգի կատեգորիա՝ Barcode.NET

30.01.2026

VintaSoft Barcode .NET SDK-ն պրոֆեսիոնալ խաչաձև հարթակային SDK է Windows-ի, Linux-ի, macOS-ի համար, որը թույլ է տալիս ճանաչել և ստեղծել PDF417 շտրիխ կոդեր .NET, WPF, Web, MAUI լեզուներով: Ձեզ անհրաժեշտ է ընդամենը մի քանի տող կոդ՝ ձեր .NET հավելվածին PDF417 շտրիխ կոդեր ճանաչելու և ստեղծելու հնարավորությունը ավելացնելու համար:

Ի՞նչ է PDF417 շտրիխ կոդը:

PDF417 շտրիխ կոդը բարձր խտության, բազմաշերտ 2D շտրիխ կոդ է, որն օգտագործվում է մեծ քանակությամբ տվյալներ (մինչև 1850 նիշ կամ 1108 բայթ) պահելու համար: Ստեղծվել է 1991 թվականին և լայնորեն օգտագործվում է կառավարական նույնականացման քարտերի, ուղևորության անցագրերի և լոգիստիկայի մեջ: Այն օգտագործում է 4 շերտ/4 տարածություն, 17 տարրից բաղկացած կոդային բառի համար նախատեսված կառուցվածք, աջակցում է ներկառուցված սխալների ուղղմանը և ապահովում է կոմպակտ և հուսալի տվյալների պահպանում:

Ահա PDF417 շտրիխ կոդի պատկերը՝


PDF417 շտրիխ կոդը աջակցում է հետևյալ տվյալների պահպանման ռեժիմներին՝

PDF417 շտրիխ կոդը օգտագործում է Ռիդ-Սոլոմոնի սխալի ուղղման ալգորիթմը, որը թույլ է տալիս ճանաչել վնասված PDF417 շտրիխ կոդերը։

PDF417 շտրիխ կոդը կարող է կոդավորել հետևյալ հատուկ նիշերը՝

PDF417 շտրիխ կոդի կառուցվածք

PDF417 շտրիխ կոդը բաղկացած է մի շարք մոդուլներից, որոնք կարելի է բաժանել երեք տարբեր խմբերի՝



Յուրաքանչյուր մոդուլ սկսվում է սև սյունակով և ավարտվում սպիտակ սյունակով՝ տեսողականորեն նշելու համար, թե որտեղ է սկսվում և ավարտվում յուրաքանչյուր մոդուլը։Շտրիխ կոդի երկու կողմերում կա նաև դատարկ տարածք, որը հայտնի է որպես հանգիստ գոտի։

Որոնման մեկնարկի և ավարտի կաղապարները նշում են շտրիխ կոդի սկզբի և ավարտի տարածքները։ Դրանք օգնում են շտրիխ կոդի սկաներին հայտնաբերել շտրիխ կոդը, բայց չեն պարունակում որևէ տվյալ։

Ձախ և աջ ցուցիչները պարունակում են շտրիխ կոդի մասին տեղեկատվություն, ինչպիսիք են շտրիխ կոդի տողերի քանակը, սխալի ուղղման մակարդակը և այլն։

Տվյալների կոդային բառի մոդուլը պարունակում է շտրիխ կոդի տվյալները։ PDF417 շտրիխ կոդի չափը կախված է կոդավորված տվյալների քանակից։ Տվյալների կոդային բառի մոդուլը կարող է պարունակել 1-ից 30 կոդային բառ և 3-ից 90 տող։ Վերևում պատկերված նկարում, տվյալների կոդային բառի մոդուլը պարունակում է 4 կոդային բառ յուրաքանչյուր տողում, որոնք նշված են մանուշակագույնով: Վերևում պատկերված նկարում, տվյալների կոդային բառի մոդուլը բաղկացած է 4 տողից:

Յուրաքանչյուր կոդային բառ ունի 17 բջիջ երկարություն և բաղկացած է 4 սև և 4 սպիտակ շերտերից, այստեղից էլ՝ PDF417 անվանումը։ Յուրաքանչյուր տվյալ կոդային բառ կարդացվում է ձախից աջ, վերևից ներքև։


Ի՞նչ է PDF417 Compact շտրիխկոդը:

PDF417 Compact շտրիխկոդը PDF417 շտրիխկոդի տարբերակ է, որը հեռացնում է աջ ցուցիչը և որոնման դադարեցման ձևը՝ տեղ խնայելու համար:
Ահա PDF417 Compact շտրիխ կոդի պատկերը՝



Ի՞նչ է Micro PDF417 շտրիխ կոդը:

Micro PDF417 շտրիխ կոդը PDF417 շտրիխ կոդի կոմպակտ տարբերակն է: Micro PDF417 շտրիխ կոդերը սովորաբար օգտագործվում են որպես կոմպոզիտային կոդերի մաս (օրինակ՝ GS1 DataBar)՝ ապրանքների պիտակավորման, փաստաթղթերի պիտակավորման և առողջապահական կիրառությունների համար՝


Micro PDF417 շտրիխ կոդը աջակցում է հետևյալ տվյալների պահպանման ռեժիմները՝

Micro PDF417 շտրիխկոդը կարող է կոդավորել հետևյալ հատուկ նիշերը՝

Ի՞նչ է AAMVA շտրիխկոդը։

AAMVA (DL/ID Card Design Standard) շտրիխ կոդ - սա PDF417 շտրիխ կոդ է, որը պահպանում է վարորդական իրավունքի տեղեկատվությունը: VintaSoft Barcode .NET SDK-ն կարող է կոդավորել և վերծանել տվյալները AAMVA ձևաչափով:
Ահա AAMVA շտրիխկոդի պատկերը՝



Ի՞նչ է XFA սեղմված PDF417 շտրիխկոդը։

"XFA Compressed PDF417" շտրիխ կոդը PDF417 շտրիխ կոդ է, որը պահպանում է Adobe XFA սպեցիֆիկացիայի համաձայն սեղմված տվյալներ։ VintaSoft Barcode .NET SDK-ն կարող է ստեղծել և ճանաչել "XFA Compressed PDF417" շտրիխ կոդերը։
Ահա "XFA սեղմված QR" շտրիխկոդի պատկերը՝



"Structure Append" հատուկ նիշը

PDF417 շտրիխկոդը աջակցում է "Structure Append" հատուկ նիշը, որը թույլ է տալիս տվյալները բաժանել մի քանի (մինչև 99,999) PDF417 շտրիխկոդերի։ "Structure Append" հատուկ նիշը կոդավորված է շտրիխ կոդի մեջ և թույլ է տալիս եզակիորեն նույնականացնել շտրիխ կոդի մասերի քանակը և դրանց հերթականությունը։

Ահա PDF417 շտրիխ կոդի պատկեր՝ "Միակ սիմվոլից ավելի մեծ չափի հաղորդագրությունները տեղավորելու կամ դրանք մշակելու համար, տվյալների հաղորդագրությունը կարող է բաշխվել մի քանի սիմվոլների միջև։ Aztec, Code 16K, DataMatrix, DotCode, MaxiCode, QR Code, PDF417, Micro PDF417 սիմվոլները կարող են կցվել կառուցվածքային ձևաչափով"։

Եվ ահա հինգ PDF417 շտրիխ կոդեր նույն տեքստով, բայց ավելի փոքր չափսերով։ Այս հինգ PDF417 շտրիխ կոդերը միավորված են մեկ արժեքի մեջ՝ օգտագործելով "Structure Append" հատուկ նիշի միջոցով.

VintaSoft Barcode .NET SDK-ն պարունակում է ալգորիթմ՝ PDF417 շտրիխ կոդի մասերից տվյալները վերականգնելու համար, որոնք առանձնացվել են "Structure Append" հատուկ նիշի միջոցով:


Ի՞նչ PDF417 շտրիխ կոդեր կարելի է ճանաչել VintaSoft Barcode .NET SDK-ի միջոցով:

VintaSoft Barcode .NET SDK-ն կարող է ճանաչել PDF417 շտրիխ կոդերի բոլոր տեսակները՝ PDF417, PDF417 Compact, Micro PDF417, AAMVA և XFA Compressed PDF417: Ճանաչման համար օգտագործվում են եզակի ալգորիթմներ, որոնք թույլ են տալիս արագորեն ճանաչել շտրիխ կոդերը տարբեր խնդիրներ ունեցող պատկերներում՝



Ահա C# կոդը, որը ցույց է տալիս, թե ինչպես ճանաչել PDF417 շտրիխ կոդերը տեսախցիկից նկարահանված պատկերում.
/// <summary>
/// Reads PDF417 barcodes from a <see cref="System.Drawing.Bitmap"/>.
/// </summary>
/// <param name="bitmap">A bitmap with barcodes.</param>
public static void ReadPdf417BarcodesFromBitmap(System.Drawing.Bitmap bitmap)
{
    // create barcode reader
    using (Vintasoft.Barcode.BarcodeReader reader = new Vintasoft.Barcode.BarcodeReader())
    {
        // specify that reader must search for PDF417 barcodes
        reader.Settings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.PDF417;

        // read barcodes from image
        Vintasoft.Barcode.IBarcodeInfo[] infos = Vintasoft.Barcode.GdiExtensions.ReadBarcodes(reader, bitmap);

        // if barcodes are not detected
        if (infos.Length == 0)
        {
            System.Console.WriteLine("No barcodes found.");
        }
        // if barcodes are detected
        else
        {
            // get information about extracted barcodes

            System.Console.WriteLine(string.Format("{0} barcodes found:", infos.Length));
            System.Console.WriteLine();
            for (int i = 0; i < infos.Length; i++)
            {
                Vintasoft.Barcode.IBarcodeInfo info = infos[i];
                System.Console.WriteLine(string.Format("[{0}:{1}]", i + 1, info.BarcodeType));
                System.Console.WriteLine(string.Format("Value:      {0}", info.Value));
                System.Console.WriteLine(string.Format("Region:     {0}", info.Region));
                System.Console.WriteLine();
            }
        }
    }
}


Ահա C# կոդը, որը ցույց է տալիս, թե ինչպես ստեղծել և ճանաչել AAMVA շտրիխ կոդ.
/// <summary>
/// Generates and recognizes AAMVA barcode.
/// </summary>
public static void GenerateAndRecognizeAamvaBarcode()
{
    // create DL data elements
    AamvaDataElement[] dlElements = new AamvaDataElement[] {
        new AamvaDataElement(AamvaDataElementIdentifiers.DAQ, "C12345678"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DCS, "CARPENTER"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DDE, "N"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DAC, "JON"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DDF, "N"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DAD, "T"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DDG, "N"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DCA, "D"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DCB, "1"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DCD, "NONE"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DBD, "10052015"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DBB, "07241984"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DBA, "01092022"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DBC, "1"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DAU, "067 in"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DAY, "BLK"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DAG, "3211 SANCTUARY LANE"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DAI, "LOUISVILLE"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DAJ, "KY"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DAK, "123454321"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DCF, "9876543210123456"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DCG, "USA"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DCK, "1234567890123456"),
        new AamvaDataElement(AamvaDataElementIdentifiers.DDB, "01062016")
    };

    // create ZK data elements
    AamvaDataElement[] zkElements = new AamvaDataElement[] {
        new AamvaDataElement("ZKA", "Y"),
        new AamvaDataElement("ZKB", "TEST"),
        new AamvaDataElement("ZKC", "9876"),
        new AamvaDataElement("ZKD", "DUP"),
    };

    // create subfiles
    AamvaSubfile[] subfiles = new AamvaSubfile[]{
        new AamvaSubfile("DL", dlElements),
        new AamvaSubfile("ZK", zkElements)
    };
    
    // create AAMVA barcode value
    AamvaBarcodeValue barcodeValue = new AamvaBarcodeValue(AamvaVersionLevel.AAMVA2016, 636046, 0, subfiles);
    
    // generate barcode image
    using (VintasoftBitmap barcodeImage = GenerateAamvaBarcode(barcodeValue))
    {
        // recognize barcode value
        AamvaBarcodeInfo recognizedBarcode = RecognizeAamvaBarcode(barcodeImage);

        // check value
        if (barcodeValue.ToString() != recognizedBarcode.AamvaValue.ToString())
            throw new ApplicationException();

        // print value
        Console.WriteLine("Version:         {0}", recognizedBarcode.VersionLevel);
        Console.WriteLine("Country:         {0}", recognizedBarcode.CountryId);
        Console.WriteLine("IIN:             {0}", recognizedBarcode.IssuerIdentificationNumber);
        Console.WriteLine("License number:  {0}", recognizedBarcode.LicenseNumber);
        Console.WriteLine("First name:      {0}", recognizedBarcode.FirstName);
        Console.WriteLine("Family name:     {0}", recognizedBarcode.FamilyName);
        Console.WriteLine("Middle name:     {0}", recognizedBarcode.MiddleName);
        Console.WriteLine("Sex (1=M;2=F):   {0}", recognizedBarcode.Sex);
        Console.WriteLine("Eye color:       {0}", recognizedBarcode.EyeColor);            
        Console.WriteLine("Date of birth:   {0}", recognizedBarcode.DateOfBirth.ToShortDateString());
        Console.WriteLine("Issue date:      {0}", recognizedBarcode.IssueDate.ToShortDateString());
        Console.WriteLine("Expiration date: {0}", recognizedBarcode.ExpirationDate.ToShortDateString());
        Console.WriteLine("State code:      {0}", recognizedBarcode.AddressStateCode);
        Console.WriteLine("City:            {0}", recognizedBarcode.AddressCity);
        Console.WriteLine("Postal code:     {0}", recognizedBarcode.AddressPostalCode);
        Console.WriteLine("Street:          {0}", recognizedBarcode.AddressStreet1);
        Console.WriteLine();
        Console.WriteLine("Data elements:");
        foreach (AamvaSubfile subfile in recognizedBarcode.Subfiles)
        {
            Console.WriteLine("[{0}] subfile:", subfile.SubfileType);
            foreach (AamvaDataElement dataElement in subfile.DataElements)
            {
                if (dataElement.Identifier.VersionLevel != AamvaVersionLevel.Undefined)
                    Console.Write("  [{0}] {1}:", dataElement.Identifier.ID, dataElement.Identifier.Description);
                else
                    Console.Write("  [{0}]:", dataElement.Identifier.ID);
                Console.WriteLine(" {0}", dataElement.Value);
            }
        }
    }
}

/// <summary>
/// Generates the AAMVA barcode image.
/// </summary>
/// <param name="barcodeValue">The barcode value.</param>
private static VintasoftBitmap GenerateAamvaBarcode(AamvaBarcodeValue barcodeValue)
{
    // create barcode writer
    using (BarcodeWriter writer = new BarcodeWriter())
    {
        // encode AAMVA barcode to writer settings
        BarcodeSymbologySubsets.AAMVA.Encode(barcodeValue, writer.Settings);

        // generate barcode image
        return writer.GetBarcodeAsVintasoftBitmap();
    }
}

/// <summary>
/// Recognizes the AAMVA barcode from image.
/// </summary>
/// <param name="barcodeImage">The barcode image.</param>
private static AamvaBarcodeInfo RecognizeAamvaBarcode(VintasoftBitmap barcodeImage)
{
    // create barcode reader
    using (BarcodeReader reader = new BarcodeReader())
    {
        // specify that AAMVA barcode must be recognized
        reader.Settings.ScanBarcodeSubsets.Add(BarcodeSymbologySubsets.AAMVA);

        // recognize barcodes
        IBarcodeInfo info = reader.ReadBarcodes(barcodeImage)[0];

        // return information about recognized AAMVA barcode
        return (AamvaBarcodeInfo)info;
    }
}


Ահա C# կոդը, որը ցույց է տալիս, թե ինչպես ստեղծել և ճանաչել PDF417 շտրիխ կոդ, որը պահպանում է Adobe XFA սպեցիֆիկացիայի համաձայն սեղմված տվյալները.
/// <summary>
/// Generates PDF417 barcode with XFA compression.
/// </summary>
public void GeneratePdf417BarcodeWithXfaCompression()
{
    string barcodeText =
        "https://www.vintasoft.com/vsbarcode-dotnet-index.html" + System.Environment.NewLine +
        "https://www.vintasoft.com/vstwain-dotnet-index.html" + System.Environment.NewLine +
        "https://www.vintasoft.com/vstwain-index.html" + System.Environment.NewLine +
        "https://www.vintasoft.com/vsimaging-dotnet-index.html" + System.Environment.NewLine +
        "https://www.vintasoft.com/vsannotation-dotnet-index.html" + System.Environment.NewLine +
        "https://www.vintasoft.com/vspdf-dotnet-index.html" + System.Environment.NewLine +
        "https://www.vintasoft.com/vsjbig2-dotnet-index.html" + System.Environment.NewLine +
        "https://www.vintasoft.com/vsjpeg2000-dotnet-index.html" + System.Environment.NewLine +
        "https://www.vintasoft.com/vsdoccleanup-dotnet-index.html" + System.Environment.NewLine +
        "https://www.vintasoft.com/vsocr-dotnet-index.html" + System.Environment.NewLine +
        "https://www.vintasoft.com/vsdicom-dotnet-index.html" + System.Environment.NewLine +
        "https://www.vintasoft.com/vsformsprocessing-dotnet-index.html" + System.Environment.NewLine +
        "https://www.vintasoft.com/vsoffice-dotnet-index.html";

    // create the barcode writer
    using (Vintasoft.Barcode.BarcodeWriter barcodeWriter = new Vintasoft.Barcode.BarcodeWriter())
    {
        // create the XFA compressed PDF417 barcode symbology
        Vintasoft.Barcode.SymbologySubsets.XFACompressedPDF417BarcodeSymbology xfaCompressedPdf417BarcodeSymbology =
            new Vintasoft.Barcode.SymbologySubsets.XFACompressedPDF417BarcodeSymbology();
        // encode barcode text using XFA compressed PDF417 barcode symbology
        xfaCompressedPdf417BarcodeSymbology.Encode(barcodeText, barcodeWriter.Settings);

        // save the barcode image to a file
        barcodeWriter.SaveBarcodeAsImage("pdf417-barcode-with-xfa-compression.png");
    }
}

/// <summary>
/// Recognizes PDF417 barcode with XFA compression.
/// </summary>
public void RecognizePdf417BarcodeWithXfaCompression()
{
    // create barcode reader
    using (Vintasoft.Barcode.BarcodeReader reader = new Vintasoft.Barcode.BarcodeReader())
    {
        // specify that reader must search for XFA compressed PDF417 barcodes
        reader.Settings.ScanBarcodeSubsets.Add(Vintasoft.Barcode.SymbologySubsets.BarcodeSymbologySubsets.XFACompressedPDF417);

        // read barcodes from image file
        Vintasoft.Barcode.IBarcodeInfo[] barcodeInfos = reader.ReadBarcodes("pdf417-barcode-with-xfa-compression.png");

        // if barcodes are not detected
        if (barcodeInfos.Length == 0)
        {
            System.Console.WriteLine("Barcodes are not found.");
        }
        // if barcodes are detected
        else
        {
            // get information about recognized barcodes

            System.Console.WriteLine(string.Format("{0} barcode(s) found:", barcodeInfos.Length));
            System.Console.WriteLine();
            for (int i = 0; i < barcodeInfos.Length; i++)
            {
                Vintasoft.Barcode.IBarcodeInfo barcodeInfo = barcodeInfos[i];
                System.Console.WriteLine(string.Format("[{0}:{1}]", i + 1, barcodeInfo.BarcodeType));
                System.Console.WriteLine(string.Format("Value:      {0}", barcodeInfo.Value));
                System.Console.WriteLine(string.Format("Region:     {0}", barcodeInfo.Region));
                System.Console.WriteLine();
            }
        }
    }
}


Ո՞ր PDF417 շտրիխ կոդերով կարելի է ստեղծել VintaSoft Barcode .NET SDK:

VintaSoft Barcode .NET SDK-ը ստեղծել է PDF417 շտրիխ կոդերի բոլոր տեսակները՝ PDF417, PDF417 Compact, Micro PDF417, AAMVA, XFA Compressed PDF417:

Ահա C# կոդը, որը ցույց է տալիս, թե ինչպես ստեղծել PDF417 շտրիխ կոդի բիթմապ պատկեր՝
/// <summary>
/// Returns the PDF417 barcode as <see cref="System.Drawing.Bitmap"/>.
/// </summary>
/// <param name="value">The barcode value.</param>
/// <returns>A <see cref="System.Drawing.Bitmap"/> object.</returns>
public static System.Drawing.Bitmap GetPdf417BarcodeAsBitmap(string value)
{
    // create the barcode writer
    using (Vintasoft.Barcode.BarcodeWriter barcodeWriter = new Vintasoft.Barcode.BarcodeWriter())
    {
        // set barcode writer settings
        barcodeWriter.Settings.Barcode = Vintasoft.Barcode.BarcodeType.PDF417;
        barcodeWriter.Settings.Value = value;

        // get a barcode image as System.Drawing.Bitmap
        return Vintasoft.Barcode.GdiExtensions.GetBarcodeAsBitmap(barcodeWriter);
    }
}


Ահա C# կոդը, որը ցույց է տալիս, թե ինչպես ստեղծել Micro PDF417 շտրիխ կոդի բիթմապ պատկեր՝
/// <summary>
/// Returns the Micro PDF417 barcode as <see cref="System.Drawing.Bitmap"/>.
/// </summary>
/// <param name="value">The barcode value.</param>
/// <returns>A <see cref="System.Drawing.Bitmap"/> object.</returns>
public static System.Drawing.Bitmap GetMicroPdf417BarcodeAsBitmap(string value)
{
    // create the barcode writer
    using (Vintasoft.Barcode.BarcodeWriter barcodeWriter = new Vintasoft.Barcode.BarcodeWriter())
    {
        // set barcode writer settings
        barcodeWriter.Settings.Barcode = Vintasoft.Barcode.BarcodeType.MicroPDF417;
        barcodeWriter.Settings.Value = value;

        // get a barcode image as System.Drawing.Bitmap
        return Vintasoft.Barcode.GdiExtensions.GetBarcodeAsBitmap(barcodeWriter);
    }
}


Ահա C# կոդը, որը ցույց է տալիս, թե ինչպես ստեղծել PDF417 շտրիխ կոդի վեկտորային (SVG) պատկեր՝
/// <summary>
/// Returns the PDF417 barcode in vector form as a SVG string.
/// </summary>
/// <param name="barcodeValue">Barcode value.</param>
public static void GetPdf417BarcodeAsSvgString(string barcodeValue)
{
    // create the barcode writer
    using (Vintasoft.Barcode.BarcodeWriter barcodeWriter = new Vintasoft.Barcode.BarcodeWriter())
    {
        // set barcode writer settings
        barcodeWriter.Settings.Barcode = Vintasoft.Barcode.BarcodeType.PDF417;
        barcodeWriter.Settings.Value = barcodeValue;

        // generate PDF417 barcode as a SVG string
        return barcodeWriter.GetBarcodeAsSvgFile();
    }
}