## 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
`protected static class` `BarcodePDF417.Segment`
`protected static class` `BarcodePDF417.SegmentList`

Field Summary
`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`
`(package 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`
`(package 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_COUNT`
`protected static int` `MACRO_SEGMENT_ID`
`private java.lang.String` `macroFileId`
`private int` `macroSegmentCount`
`private int` `macroSegmentId`
`protected static int` `MAX_DATA_CODEWORDS`
`protected static int` `MIXED`
`(package 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 recomendations.
`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`
`(package 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
`BarcodePDF417()` Creates a new `BarcodePDF417` with the default settings.

Method Summary
`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 recomendations.

  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

### 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_SEGMENT_COUNT

    protected static final int MACRO_SEGMENT_COUNT

See Also:
  Constant Field Values

### MACRO_LAST_SEGMENT

    protected static final int MACRO_LAST_SEGMENT

See Also:
  Constant Field Values

### MIXED_SET

    static java.lang.String MIXED_SET

### PUNCTUATION_SET

    static java.lang.String PUNCTUATION_SET

### CLUSTERS

    static int[][] CLUSTERS

### ERROR_LEVEL

    static 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 writen 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
  Throws:
    `java.io.UnsupportedEncodingException` - if the encoding Cp437 is not supported

### 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