com.lowagie.text.pdf

## Class BarcodePDF417

- java.lang.Object
- - com.lowagie.text.pdf.BarcodePDF417

-     public class BarcodePDF417
      extends java.lang.Object

  Generates the 2D barcode PDF417. Supports dimensioning auto-sizing, fixed and variable sizes, automatic and manual error levels, raw codeword input, codeword size optimization and bitmap inversion. The output can be a CCITT G4 `Image` or a raw bitmap.
  Author:
    Paulo Soares (psoares@consiste.pt)

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `protected static class` | `BarcodePDF417.Segment`
    `protected static class` | `BarcodePDF417.SegmentList`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected static int` | `ABSOLUTE_MAX_TEXT_SIZE`
    `protected static int` | `AL`
    `protected static int` | `ALPHA`
    `protected static int` | `AS`
    `private float` | `aspectRatio` Holds value of property aspectRatio.
    `private int` | `bitColumns` Holds value of property bitColumns.
    `protected int` | `bitPtr`
    `protected static int` | `BYTE_MODE`
    `protected static int` | `BYTE_MODE_6`
    `protected static int` | `BYTESHIFT`
    `private static int[][]` | `CLUSTERS`
    `private int` | `codeColumns` Holds value of property codeColumns.
    `private int` | `codeRows` Holds value of property codeRows.
    `private int[]` | `codewords` Holds value of property codewords.
    `protected int` | `cwPtr`
    `private static int[][]` | `ERROR_LEVEL`
    `private int` | `errorLevel` Holds value of property errorLevel.
    `protected static int` | `ISBYTE`
    `private int` | `lenCodewords` Holds value of property lenCodewords.
    `protected static int` | `LL`
    `protected static int` | `LOWER`
    `protected static int` | `MACRO_LAST_SEGMENT`
    `protected static int` | `MACRO_SEGMENT_ID`
    `private java.lang.String` | `macroFileId`
    `private int` | `macroIndex`
    `private int` | `macroSegmentCount`
    `private int` | `macroSegmentId`
    `protected static int` | `MAX_DATA_CODEWORDS`
    `protected static int` | `MIXED`
    `private static java.lang.String` | `MIXED_SET`
    `protected static int` | `ML`
    `protected static int` | `MOD`
    `protected static int` | `NUMERIC_MODE`
    `private int` | `options` Holds value of property options.
    `private byte[]` | `outBits` Holds value of property outBits.
    `protected static int` | `PAL`
    `static int` | `PDF417_AUTO_ERROR_LEVEL` The error level correction is set automatically according to ISO 15438 recommendations.
    `static int` | `PDF417_FIXED_COLUMNS` The size will be at least `codeColumns` with a variable number of `codeRows`.
    `static int` | `PDF417_FIXED_RECTANGLE` The size of the barcode will be at least `codeColumns*codeRows`.
    `static int` | `PDF417_FIXED_ROWS` The size will be at least `codeRows` with a variable number of `codeColumns`.
    `static int` | `PDF417_FORCE_BINARY` One single binary segment is used
    `static int` | `PDF417_INVERT_BITMAP` Inverts the output bits of the raw bitmap that is normally bit one for black.
    `static int` | `PDF417_USE_ASPECT_RATIO` Auto-size is made based on `aspectRatio` and `yHeight`.
    `static int` | `PDF417_USE_ERROR_LEVEL` The error level correction is set by the user.
    `static int` | `PDF417_USE_MACRO` Use Macro PDF417 Encoding
    `static int` | `PDF417_USE_RAW_CODEWORDS` No `text` interpretation is done and the content of `codewords` is used directly.
    `protected static int` | `PL`
    `protected static int` | `PS`
    `protected static int` | `PUNCTUATION`
    `private static java.lang.String` | `PUNCTUATION_SET`
    `protected BarcodePDF417.SegmentList` | `segmentList`
    `protected static int` | `SPACE`
    `protected static int` | `START_CODE_SIZE`
    `protected static int` | `START_PATTERN`
    `protected static int` | `STOP_PATTERN`
    `protected static int` | `STOP_SIZE`
    `private byte[]` | `text` Holds value of property text.
    `protected static int` | `TEXT_MODE`
    `private float` | `yHeight` Holds value of property yHeight.

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `BarcodePDF417()` Creates a new `BarcodePDF417` with the default settings.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `private void` | `append(int in, int len)`
    `private void` | `append(java.lang.String s)`
    `protected void` | `assemble()`
    `private void` | `basicNumberCompaction(byte[] input, int start, int length)`
    `protected void` | `basicNumberCompaction(int start, int length)`
    `(package private) void` | `breakString()`
    `(package private) void` | `byteCompaction(int start, int length)`
    `protected void` | `byteCompaction6(int start)`
    `protected void` | `calculateErrorCorrection(int dest)`
    `protected boolean` | `checkSegmentType(BarcodePDF417.Segment segment, char type)`
    `java.awt.Image` | `createAwtImage(java.awt.Color foreground, java.awt.Color background)` Creates a `java.awt.Image`.
    `protected void` | `dumpList()`
    `float` | `getAspectRatio()` Gets the barcode aspect ratio.
    `int` | `getBitColumns()` Gets the number of X pixels of `outBits`.
    `int` | `getCodeColumns()` Gets the number of barcode data columns.
    `int` | `getCodeRows()` Gets the number of Y pixels of `outBits`.
    `int[]` | `getCodewords()` Gets the codeword array.
    `int` | `getErrorLevel()` Gets the error level correction used for the barcode.
    `Image` | `getImage()` Gets an `Image` with the barcode.
    `int` | `getLenCodewords()` Gets the length of the codewords.
    `protected int` | `getMaxSquare()`
    `int` | `getOptions()` Gets the options to generate the barcode.
    `byte[]` | `getOutBits()` Gets the raw image bits of the barcode.
    `protected int` | `getSegmentLength(BarcodePDF417.Segment segment)`
    `byte[]` | `getText()` Gets the bytes that form the barcode.
    `private static int` | `getTextTypeAndValue(byte[] input, int maxLength, int idx)`
    `protected int` | `getTextTypeAndValue(int maxLength, int idx)`
    `float` | `getYHeight()` Gets the Y pixel height relative to X.
    `private void` | `macroCodes()`
    `protected static int` | `maxPossibleErrorLevel(int remain)`
    `private void` | `numberCompaction(byte[] input, int start, int length)`
    `protected void` | `numberCompaction(int start, int length)`
    `protected void` | `outCodeword(int codeword)`
    `protected void` | `outCodeword17(int codeword)`
    `protected void` | `outCodeword18(int codeword)`
    `protected void` | `outPaintCode()`
    `protected void` | `outStartPattern()`
    `protected void` | `outStopPattern()`
    `void` | `paintCode()` Paints the barcode.
    `void` | `setAspectRatio(float aspectRatio)` Sets the barcode aspect ratio.
    `void` | `setCodeColumns(int codeColumns)` Sets the number of barcode data columns.
    `void` | `setCodeRows(int codeRows)` Sets the number of barcode rows.
    `void` | `setDefaultParameters()` Set the default settings that correspond to `PDF417_USE_ASPECT_RATIO` and `PDF417_AUTO_ERROR_LEVEL`.
    `void` | `setErrorLevel(int errorLevel)` Sets the error level correction for the barcode.
    `void` | `setLenCodewords(int lenCodewords)` Sets the length of the codewords.
    `void` | `setMacroFileId(java.lang.String id)` Sets the File ID for macro PDF417 encoding
    `void` | `setMacroSegmentCount(int cnt)` Sets the segment count for macro PDF417 encoding
    `void` | `setMacroSegmentId(int id)` Sets the segment id for macro PDF417 encoding
    `void` | `setOptions(int options)` Sets the options to generate the barcode.
    `void` | `setText(byte[] text)` Sets the bytes that form the barcode.
    `void` | `setText(java.lang.String s)` Sets the text that will form the barcode.
    `void` | `setYHeight(float yHeight)` Sets the Y pixel height relative to X.
    `private void` | `textCompaction(byte[] input, int start, int length)`
    `protected void` | `textCompaction(int start, int length)`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### PDF417_USE_ASPECT_RATIO

          public static final int PDF417_USE_ASPECT_RATIO

      Auto-size is made based on `aspectRatio` and `yHeight`.
      See Also:
        Constant Field Values

    - #### PDF417_FIXED_RECTANGLE

          public static final int PDF417_FIXED_RECTANGLE

      The size of the barcode will be at least `codeColumns*codeRows`.
      See Also:
        Constant Field Values

    - #### PDF417_FIXED_COLUMNS

          public static final int PDF417_FIXED_COLUMNS

      The size will be at least `codeColumns` with a variable number of `codeRows`.
      See Also:
        Constant Field Values

    - #### PDF417_FIXED_ROWS

          public static final int PDF417_FIXED_ROWS

      The size will be at least `codeRows` with a variable number of `codeColumns`.
      See Also:
        Constant Field Values

    - #### PDF417_AUTO_ERROR_LEVEL

          public static final int PDF417_AUTO_ERROR_LEVEL

      The error level correction is set automatically according to ISO 15438 recommendations.
      See Also:
        Constant Field Values

    - #### PDF417_USE_ERROR_LEVEL

          public static final int PDF417_USE_ERROR_LEVEL

      The error level correction is set by the user. It can be 0 to 8.
      See Also:
        Constant Field Values

    - #### PDF417_FORCE_BINARY

          public static final int PDF417_FORCE_BINARY

      One single binary segment is used
      See Also:
        Constant Field Values

    - #### PDF417_USE_RAW_CODEWORDS

          public static final int PDF417_USE_RAW_CODEWORDS

      No `text` interpretation is done and the content of `codewords` is used directly.
      See Also:
        Constant Field Values

    - #### PDF417_INVERT_BITMAP

          public static final int PDF417_INVERT_BITMAP

      Inverts the output bits of the raw bitmap that is normally bit one for black. It has only effect for the raw bitmap.
      See Also:
        Constant Field Values

    - #### PDF417_USE_MACRO

          public static final int PDF417_USE_MACRO

      Use Macro PDF417 Encoding
      See Also:
        `setMacroFileId(String)`, `setMacroSegmentId(int)`, `setMacroSegmentCount(int)`, Constant Field Values

    - #### macroSegmentCount

          private int macroSegmentCount

    - #### macroSegmentId

          private int macroSegmentId

    - #### macroFileId

          private java.lang.String macroFileId

    - #### macroIndex

          private int macroIndex

    - #### bitPtr

          protected int bitPtr

    - #### cwPtr

          protected int cwPtr

    - #### segmentList

          protected BarcodePDF417.SegmentList segmentList

    - #### START_PATTERN

          protected static final int START_PATTERN

      See Also:
        Constant Field Values

    - #### STOP_PATTERN

          protected static final int STOP_PATTERN

      See Also:
        Constant Field Values

    - #### START_CODE_SIZE

          protected static final int START_CODE_SIZE

      See Also:
        Constant Field Values

    - #### STOP_SIZE

          protected static final int STOP_SIZE

      See Also:
        Constant Field Values

    - #### MOD

          protected static final int MOD

      See Also:
        Constant Field Values

    - #### ALPHA

          protected static final int ALPHA

      See Also:
        Constant Field Values

    - #### LOWER

          protected static final int LOWER

      See Also:
        Constant Field Values

    - #### MIXED

          protected static final int MIXED

      See Also:
        Constant Field Values

    - #### PUNCTUATION

          protected static final int PUNCTUATION

      See Also:
        Constant Field Values

    - #### ISBYTE

          protected static final int ISBYTE

      See Also:
        Constant Field Values

    - #### BYTESHIFT

          protected static final int BYTESHIFT

      See Also:
        Constant Field Values

    - #### PL

          protected static final int PL

      See Also:
        Constant Field Values

    - #### LL

          protected static final int LL

      See Also:
        Constant Field Values

    - #### AS

          protected static final int AS

      See Also:
        Constant Field Values

    - #### ML

          protected static final int ML

      See Also:
        Constant Field Values

    - #### AL

          protected static final int AL

      See Also:
        Constant Field Values

    - #### PS

          protected static final int PS

      See Also:
        Constant Field Values

    - #### PAL

          protected static final int PAL

      See Also:
        Constant Field Values

    - #### SPACE

          protected static final int SPACE

      See Also:
        Constant Field Values

    - #### TEXT_MODE

          protected static final int TEXT_MODE

      See Also:
        Constant Field Values

    - #### BYTE_MODE_6

          protected static final int BYTE_MODE_6

      See Also:
        Constant Field Values

    - #### BYTE_MODE

          protected static final int BYTE_MODE

      See Also:
        Constant Field Values

    - #### NUMERIC_MODE

          protected static final int NUMERIC_MODE

      See Also:
        Constant Field Values

    - #### ABSOLUTE_MAX_TEXT_SIZE

          protected static final int ABSOLUTE_MAX_TEXT_SIZE

      See Also:
        Constant Field Values

    - #### MAX_DATA_CODEWORDS

          protected static final int MAX_DATA_CODEWORDS

      See Also:
        Constant Field Values

    - #### MACRO_SEGMENT_ID

          protected static final int MACRO_SEGMENT_ID

      See Also:
        Constant Field Values

    - #### MACRO_LAST_SEGMENT

          protected static final int MACRO_LAST_SEGMENT

      See Also:
        Constant Field Values

    - #### MIXED_SET

          private static final java.lang.String MIXED_SET

      See Also:
        Constant Field Values

    - #### PUNCTUATION_SET

          private static final java.lang.String PUNCTUATION_SET

      See Also:
        Constant Field Values

    - #### CLUSTERS

          private static final int[][] CLUSTERS

    - #### ERROR_LEVEL

          private static final int[][] ERROR_LEVEL

    - #### outBits

          private byte[] outBits

      Holds value of property outBits.

    - #### bitColumns

          private int bitColumns

      Holds value of property bitColumns.

    - #### codeRows

          private int codeRows

      Holds value of property codeRows.

    - #### codeColumns

          private int codeColumns

      Holds value of property codeColumns.

    - #### codewords

          private int[] codewords

      Holds value of property codewords.

    - #### lenCodewords

          private int lenCodewords

      Holds value of property lenCodewords.

    - #### errorLevel

          private int errorLevel

      Holds value of property errorLevel.

    - #### text

          private byte[] text

      Holds value of property text.

    - #### options

          private int options

      Holds value of property options.

    - #### aspectRatio

          private float aspectRatio

      Holds value of property aspectRatio.

    - #### yHeight

          private float yHeight

      Holds value of property yHeight.

  - ### Constructor Detail

    - #### BarcodePDF417

          public BarcodePDF417()

      Creates a new `BarcodePDF417` with the default settings.

  - ### Method Detail

    - #### setMacroSegmentId

          public void setMacroSegmentId(int id)

      Sets the segment id for macro PDF417 encoding
      Parameters:
        `id` - the id (starting at 0)
      See Also:
        `setMacroSegmentCount(int)`

    - #### setMacroSegmentCount

          public void setMacroSegmentCount(int cnt)

      Sets the segment count for macro PDF417 encoding
      Parameters:
        `cnt` - the number of macro segments
      See Also:
        `setMacroSegmentId(int)`

    - #### setMacroFileId

          public void setMacroFileId(java.lang.String id)

      Sets the File ID for macro PDF417 encoding
      Parameters:
        `id` - the file id

    - #### checkSegmentType

          protected boolean checkSegmentType(BarcodePDF417.Segment segment,
                                 char type)

    - #### getSegmentLength

          protected int getSegmentLength(BarcodePDF417.Segment segment)

    - #### setDefaultParameters

          public void setDefaultParameters()

      Set the default settings that correspond to `PDF417_USE_ASPECT_RATIO` and `PDF417_AUTO_ERROR_LEVEL`.

    - #### outCodeword17

          protected void outCodeword17(int codeword)

    - #### outCodeword18

          protected void outCodeword18(int codeword)

    - #### outCodeword

          protected void outCodeword(int codeword)

    - #### outStopPattern

          protected void outStopPattern()

    - #### outStartPattern

          protected void outStartPattern()

    - #### outPaintCode

          protected void outPaintCode()

    - #### calculateErrorCorrection

          protected void calculateErrorCorrection(int dest)

    - #### getTextTypeAndValue

          private static int getTextTypeAndValue(byte[] input,
                                int maxLength,
                                int idx)

    - #### getTextTypeAndValue

          protected int getTextTypeAndValue(int maxLength,
                                int idx)

    - #### textCompaction

          private void textCompaction(byte[] input,
                            int start,
                            int length)

    - #### textCompaction

          protected void textCompaction(int start,
                            int length)

    - #### basicNumberCompaction

          protected void basicNumberCompaction(int start,
                                   int length)

    - #### basicNumberCompaction

          private void basicNumberCompaction(byte[] input,
                                   int start,
                                   int length)

    - #### numberCompaction

          private void numberCompaction(byte[] input,
                              int start,
                              int length)

    - #### numberCompaction

          protected void numberCompaction(int start,
                              int length)

    - #### byteCompaction6

          protected void byteCompaction6(int start)

    - #### byteCompaction

          void byteCompaction(int start,
                            int length)

    - #### breakString

          void breakString()

    - #### assemble

          protected void assemble()

    - #### macroCodes

          private void macroCodes()

    - #### append

          private void append(int in,
                    int len)

    - #### append

          private void append(java.lang.String s)

    - #### maxPossibleErrorLevel

          protected static int maxPossibleErrorLevel(int remain)

    - #### dumpList

          protected void dumpList()

    - #### getMaxSquare

          protected int getMaxSquare()

    - #### paintCode

          public void paintCode()

      Paints the barcode. If no exception was thrown a valid barcode is available.

    - #### getImage

          public Image getImage()
                         throws BadElementException

      Gets an `Image` with the barcode. The image will have to be scaled in the Y direction by `yHeight`for the barcode to have the right printing aspect.
      Returns:
        the barcode `Image`
      Throws:
        `BadElementException` - on error

    - #### createAwtImage

          public java.awt.Image createAwtImage(java.awt.Color foreground,
                                      java.awt.Color background)

      Creates a `java.awt.Image`.
      Parameters:
        `foreground` - the color of the bars
        `background` - the color of the background
      Returns:
        the image

    - #### getOutBits

          public byte[] getOutBits()

      Gets the raw image bits of the barcode. The image will have to be scaled in the Y direction by `yHeight`.
      Returns:
        The raw barcode image

    - #### getBitColumns

          public int getBitColumns()

      Gets the number of X pixels of `outBits`.
      Returns:
        the number of X pixels of `outBits`

    - #### getCodeRows

          public int getCodeRows()

      Gets the number of Y pixels of `outBits`. It is also the number of rows in the barcode.
      Returns:
        the number of Y pixels of `outBits`

    - #### setCodeRows

          public void setCodeRows(int codeRows)

      Sets the number of barcode rows. This number may be changed to keep the barcode valid.
      Parameters:
        `codeRows` - the number of barcode rows

    - #### getCodeColumns

          public int getCodeColumns()

      Gets the number of barcode data columns.
      Returns:
        he number of barcode data columns

    - #### setCodeColumns

          public void setCodeColumns(int codeColumns)

      Sets the number of barcode data columns. This number may be changed to keep the barcode valid.
      Parameters:
        `codeColumns` - the number of barcode data columns

    - #### getCodewords

          public int[] getCodewords()

      Gets the codeword array. This array is always 928 elements long. It can be written to if the option `PDF417_USE_RAW_CODEWORDS` is set.
      Returns:
        the codeword array

    - #### getLenCodewords

          public int getLenCodewords()

      Gets the length of the codewords.
      Returns:
        the length of the codewords

    - #### setLenCodewords

          public void setLenCodewords(int lenCodewords)

      Sets the length of the codewords.
      Parameters:
        `lenCodewords` - the length of the codewords

    - #### getErrorLevel

          public int getErrorLevel()

      Gets the error level correction used for the barcode. It may different from the previously set value.
      Returns:
        the error level correction used for the barcode

    - #### setErrorLevel

          public void setErrorLevel(int errorLevel)

      Sets the error level correction for the barcode.
      Parameters:
        `errorLevel` - the error level correction for the barcode

    - #### getText

          public byte[] getText()

      Gets the bytes that form the barcode. This bytes should be interpreted in the codepage Cp437.
      Returns:
        the bytes that form the barcode

    - #### setText

          public void setText(byte[] text)

      Sets the bytes that form the barcode. This bytes should be interpreted in the codepage Cp437.
      Parameters:
        `text` - the bytes that form the barcode

    - #### setText

          public void setText(java.lang.String s)

      Sets the text that will form the barcode. This text is converted to bytes using the encoding Cp437.
      Parameters:
        `s` - the text that will form the barcode

    - #### getOptions

          public int getOptions()

      Gets the options to generate the barcode.
      Returns:
        the options to generate the barcode

    - #### setOptions

          public void setOptions(int options)

      Sets the options to generate the barcode. This can be all the `PDF417_*` constants.
      Parameters:
        `options` - the options to generate the barcode

    - #### getAspectRatio

          public float getAspectRatio()

      Gets the barcode aspect ratio.
      Returns:
        the barcode aspect ratio

    - #### setAspectRatio

          public void setAspectRatio(float aspectRatio)

      Sets the barcode aspect ratio. A ratio or 0.5 will make the barcode width twice as large as the height.
      Parameters:
        `aspectRatio` - the barcode aspect ratio

    - #### getYHeight

          public float getYHeight()

      Gets the Y pixel height relative to X.
      Returns:
        the Y pixel height relative to X

    - #### setYHeight

          public void setYHeight(float yHeight)

      Sets the Y pixel height relative to X. It is usually 3.
      Parameters:
        `yHeight` - the Y pixel height relative to X