Recognize and generate PDF417 barcodes using VintaSoft Barcode .NET SDK
January 30, 2026
![]() |
![]() |
![]() |
/// <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();
}
}
}
}
/// <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;
}
}
/// <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();
}
}
}
}
/// <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);
}
}
/// <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);
}
}
/// <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();
}
}