Generate PDF417 Barcode Generation in Java


PDF417 is a family of 2D variable-length stacked barcode standards that enables laser scanning for documents of high quality (with the exception of Compact PDF417, which supports only photo scanning). The PDF417 type provides smaller data density compared with matrix barcode types. However, it is several times larger than the data density of conventional 1D stacked barcode standards. PDF417 barcodes can be used to encode streams of bytes or Unicode characters and contain recovery data required for Reed-Solomon error correction.

One of the main specificities of PDF417 types is that they support the special format of encoding metadata. This allows dividing a single document into several parts marked with barcode labels indicating file name, creation date, checksum control, and some other additional information. Thereafter, these parts can be transmitted one by one and reassembled together according to barcode markers. Adding metadata to barcodes occupies extra barcode capacity.

The PDF417 layout configuration is composed of multiple rows and columns. Basic PDF417 can be used to encode at most 1,850 alphanumeric characters or 2,710 numerical digits or 1,108 bytes with the maximal configuration including 90 rows and 30 columns. In turn, the Micro PDF417 type can encode up to 266 alphanumeric characters or 366 numerical digits or 150 bytes with the maximal configuration of 44 rows and 4 columns.

PDF417 Standard


Basic PDF417 Can be used to work with documents of any quality and supports laser scanning
Micro PDF417 Allows minimizing the barcode area and can be used as an add-on for GS1 composite symbologies or applied to high-quality documents
Macro PDF417 Provides increased encoding capacity and supports metainformation
Compact PDF417 Supports optional metainformation and can be useful in cases of limited printing space. It suggests omitting the right-side block of metadata and removing the stop pattern is removed. Laser scanning is not supported; only photo scanning is available. It is applicable to high-quality documents only

Basic PDF417 and Macro PDF417 Types

Basic PDF417 and Macro PDF417 support the following configuration: from 1 to 30 columns to encode information; 2 columns to store metainformation (i.e. row indicator, layout information); start and stop patterns. It is possible to add from 3 to 90 rows. The key difference between Basic PDF417 and Macro PDF417 is that the latter supports metadata.

Micro PDF417 Symbology

The layout of Micro PDF417 supports adding from 4 to 44 rows and from 1 to 4 columns. Layout options are strictly predefined in terms of maximum and minimum numbers of rows and columns, as well as error correction codewords. Moreover, barcodes include two columns with metadata. Commonly, Micro PDF417 is suggested for use in high-quality documents to ensure correct recognition. However, this type supports laser scanning.

Compact PDF417 Symbology

Compact PDF417 has a specification like Basic PDF417 and Macro PDF417. The difference is that in Compact PDF417 barcodes, the right-side metainformation column and the corresponding stop pattern are eliminated to decrease barcode size. This is the only barcode type in the PDF417 family that does not support laser scanning. It should be also noted that reading low-quality barcode images may have issues due to the lack of metainformation redundancy. To enable the Compact PDF417 mode, developers can use the setPdf417Truncate method of class Pdf417Parameters.

PDF417 Encoding Modes

To enable the required encoding mode for PDF417 generation, it is necessary to call the setPdf417CompactionMode method of class Pdf417Parameters that is intended to manage data compaction regimes. Two other methods, i.e. setPdf417ECIEncoding and setCodeTextEncoding, can be used to enable encoding modes suitable for Unicode symbols. In this article, it is described how to work with different encoding modes.

ECI Encoding Mode

The setPdf417ECIEncoding method can be used to encode Unicode symbols to streams of bytes. Moreover, it allows determining an ECI identifier for the present encoding that can be detected and interpreted by decoders. When this method is called passing any value from the ECIEncodings enum besides ECIEncodings.NONE, information is processed using the determined ECI encoding. At present, Aspose.BarCode supports all widely used charset encodings included in the ECIEncodings enumeration.

Compaction Mode

Developers can enable the desired data compaction mode through the setPdf417CompactionMode method passing the value from the Pdf417CompactionMode enum.

Compaction Mode


AUTO Automatically selects the data compaction mode with the highest data density. If barcode data contains a digit greater than 255, data compaction is performed with the specified encoding
BINARY Encodes binary streams of bytes comprising digits from 0 to 255. If barcode data has a digit greater than 255, data compaction is conducted using the specified encoding
NUMERIC Legacy mode for numerical digits. Using the AUTO mode is recommended
TEXT Legacy mode for alphanumeric characters. Using the Auto mode is recommended

Following barcodes have been created applying various compaction modes.

Compaction Mode





Unicode Encoding Mode

The setCodeTextEncoding method can be used to encode Unicode characters.

Encoding Streams of Bytes in Binary Mode

Developers can encode and transmit an array of bytes through the BINARY mode that can be enabled through the setPdf417CompactionMode method of class Pdf417Parameters. To show the text line under a barcode, it is possible to call the setTwoDDisplayText method.

Layout Configuration Settings

Developers can define the required layout configuration for PDF417 generation using dedicated methods of class Pdf417Parameters, i.e. setRows and setColumns. All PDF417 standards besides Micro PDF417 may have the following configuration settings: from 1 to 30 columns and from 3 to 90 rows. The number of rows and columns can be defined separately. The layout of Micro PDF417 allows adding from 1 to 4 columns.

Following PDF417 barcodes have different layout configurations.

Layout Configuration

2 Columns

6 Rows

9 Rows and 6 Columns

Managing Error Correction Level

The PDF417 barcode family supports Reed-Solomon error correction to provide data recovery and integrity check. Micro PDF417 enables determining the size of redundant recovery data automatically. Other PDF417 standards allow customizing the error correction level through the setPdf417ErrorLevel method of class Pdf417Parameters. Each additional pair of error correction codewords serves to recover one unknown error or two known missing digits. A higher error correction level requires storing more codewords and enables more efficient data recovery for damaged barcodes. The maximal level of error correction, i.e. Level8, means that 265 errors can be corrected. However, data encoding capacity will decrease by 614 bytes. Available error correction levels are represented in the following table.

Eroor Correction Level

Number of Codewords

Error Correction Level

Number of Codewords

Level 0 2 codewords Level 5 64 codewords
Level 1 4 codewords Level 6 128 codewords
Level 2 8 codewords Level 7 256 codewords
Level 3 16 codewords Level 8 512 codewords
Level 4 32 codewords

Following PDF417 barcodes have different error correction levels.

Error Correction Level

Is Set to 2

Is Set to 5

Aspect Ratio Settings

In Aspose.BarCode for Java, Aspect Ratio is one of the main parameters used to manage barcode proportions along X and Y coordinates. Aspect Ratio can be determined as the ratio between barcode height and width or as the relative coefficient to the XDimension value. Its value can be modified through the setAspectRatio method of class Pdf417Parameters. To generate PDF417 barcodes, it is recommended to select the value of AspectRatio between 3 and 5.

Following PDF417 barcodes have been generated with different aspect ratio values.

Aspect Ratio

Is Set to 2

Is Set to 5

Working withPDF417 Metadata

Micro PDF417 and Macro PDF417 allow adding special metainformation about barcode data. Such metadata can be encoded together with main barcode information sharing the same blocks of data. It is possible to classify barcode metadata into permanent data and optional data as clarified further. All methods mentioned below correspond to class Pdf417Parameters.

Permanent Metadata

Permanent metadata can be used to encode different special parameters through the methods listed below.

Permanent Metadata Method


setPdf417MacroFileID Manually adjusted unique identifier used for a series of barcodes or a PDF417 file
setPdf417MacroSegmentID Identifier of the current barcode segment starting from 0. It is often used together with the setPdf417MacroSegmentsCount method that allows setting the number of barcodes in a series

Optional Metadata

Optional metadata are used to store information about various data properties that can be encoded through special methods described below.

Optional Metadata Method Description
setPdf417MacroSegmentsCount Number of barcodes in a series
setPdf417MacroFileName File name
setPdf417MacroChecksum Checksum computed based on the CCITT-16 polynomial
setPdf417MacroFileSize Overall size of bytes in a barcode series
setPdf417MacroTimeStamp Time spent to generate/send a file
setPdf417MacroAddressee File sender address
setPdf417MacroSender File sender name

Unicode Metadata

In Aspose.BarCode for Java, developers can re-encode optional metadata using the Unicode encoding through the setPdf417MacroECIEncoding method of class Pdf417Parameters. This method is intended to perform the conversion of metadata and send it along with the related encoding identifier.

Setting Special Parameters

In Aspose.BarCode for Java, developers can encode specific control parameters for PDF417 barcodes, i.e. hardware reader initialization and emulation for the Code 128 symbology.

Hardware Reader Initialization

Aspose.BarCode for Java provides the setReaderInitialization method of class Pdf417Parameters that allows encoding the special flag used to indicate that barcode data will serve for hardware reader initialization.

Code 128 Emulation

In some cases, it may be necessary to make hardware readers emulate information encoded in Micro PDF417 barcodes in the format of Code 128 barcode data. This can be done by calling the setCode128Emulation method of class Pdf417Parameters and passing the required value from the Code128Emulation enum. This method is applicable to Micro PDF417 barcodes only.