com.lowagie.text.pdf

## Class ColumnText

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

-     public class ColumnText
      extends java.lang.Object

  Formats text in a columnwise form. The text is bound on the left and on the right by a sequence of lines. This allows the column to have any shape, not only rectangular.

  Several parameters can be set like the first paragraph line indent and extra space between paragraphs.

  A call to the method `go` will return one of the following situations: the column ended or the text ended.

  I the column ended, a new column definition can be loaded with the method `setColumns` and the method `go` can be called again.

  If the text ended, more text can be loaded with `addText` and the method `go` can be called again.
  The only limitation is that one or more complete paragraphs must be loaded each time.

  Full bidirectional reordering is supported. If the run direction is `PdfWriter.RUN_DIRECTION_RTL` the meaning of the horizontal alignments and margins is mirrored.

  Author:
    Paulo Soares (psoares@consiste.pt)

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `private boolean` | `adjustFirstLine`
    `protected int` | `alignment` The column alignment.
    `static int` | `AR_COMPOSEDTASHKEEL` Compose the tashkeel in the ligatures.
    `static int` | `AR_LIG` Do some extra double ligatures.
    `static int` | `AR_NOVOWEL` Eliminate the arabic vowels
    `private int` | `arabicOptions` Holds value of property arabicOptions.
    `protected BidiLine` | `bidiLine` The chunks that form the text.
    `protected PdfContentByte` | `canvas` The `PdfContent` where the text will be written to.
    `protected PdfContentByte[]` | `canvases`
    `protected boolean` | `composite`
    `protected ColumnText` | `compositeColumn`
    `protected java.util.LinkedList` | `compositeElements`
    `protected float` | `currentLeading` The leading for the current line.
    `protected float` | `descender`
    `static int` | `DIGIT_TYPE_AN` Digit type option: Use Arabic-Indic digits (U+0660...U+0669).
    `static int` | `DIGIT_TYPE_AN_EXTENDED` Digit type option: Use Eastern (Extended) Arabic-Indic digits (U+06f0...U+06f9).
    `static int` | `DIGITS_AN2EN` Digit shaping option: Replace Arabic-Indic digits by European digits (U+0030...U+0039).
    `static int` | `DIGITS_EN2AN` Digit shaping option: Replace European digits (U+0030...U+0039) by Arabic-Indic digits.
    `static int` | `DIGITS_EN2AN_INIT_AL` Digit shaping option: Replace European digits (U+0030...U+0039) by Arabic-Indic digits if the most recent strongly directional character is an Arabic letter (its Bidi direction value is RIGHT_TO_LEFT_ARABIC).
    `static int` | `DIGITS_EN2AN_INIT_LR` Digit shaping option: Replace European digits (U+0030...U+0039) by Arabic-Indic digits if the most recent strongly directional character is an Arabic letter (its Bidi direction value is RIGHT_TO_LEFT_ARABIC).
    `protected float` | `extraParagraphSpace` The extra space between paragraphs.
    `private float` | `filledWidth` Holds value of property filledWidth.
    `private float` | `firstLineY`
    `private boolean` | `firstLineYDone`
    `protected float` | `fixedLeading` The fixed text leading.
    `protected float` | `followingIndent` The following paragraph lines indent.
    `static float` | `GLOBAL_SPACE_CHAR_RATIO` the space char ratio
    `protected float` | `indent` The first paragraph line indent.
    `private boolean` | `lastWasNewline`
    `protected java.util.ArrayList` | `leftWall` The left column bound.
    `protected float` | `leftX`
    `protected static int` | `LINE_STATUS_NOLINE` The line cannot fit this column position.
    `protected static int` | `LINE_STATUS_OFFLIMITS` The line is out the column limits.
    `protected static int` | `LINE_STATUS_OK` The column is valid.
    `protected int` | `lineStatus` The line status when trying to fit a line to a column.
    `private int` | `linesWritten` Holds value of property linesWritten.
    `protected int` | `listIdx`
    `protected float` | `maxY` Upper bound of the column.
    `protected float` | `minY` Lower bound of the column.
    `protected float` | `multipliedLeading` The text leading that is multiplied by the biggest font size in the line.
    `static int` | `NO_MORE_COLUMN` Signals that there is no more column.
    `static int` | `NO_MORE_TEXT` Signals that there is no more text available.
    `protected boolean` | `rectangularMode`
    `protected float` | `rectangularWidth` The width of the line when the column is defined as a simple rectangle.
    `protected float` | `rightIndent` The right paragraph lines indent.
    `protected java.util.ArrayList` | `rightWall` The right column bound.
    `protected float` | `rightX`
    `protected int` | `runDirection`
    `private float` | `spaceCharRatio` Holds value of property spaceCharRatio.
    `private boolean` | `splittedRow`
    `static int` | `START_COLUMN` Initial value of the status.
    `private boolean` | `useAscender` if true, first line height is adjusted so that the max ascender touches the top
    `protected Phrase` | `waitPhrase`
    `protected float` | `yLine` The current y line location.

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ColumnText(PdfContentByte canvas)` Creates a `ColumnText`.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addElement(Element element)` Adds an element.
    `void` | `addText(Chunk chunk)` Adds a `Chunk` to the current text array.
    `void` | `addText(Phrase phrase)` Adds a `Phrase` to the current text array.
    `private void` | `addWaitingPhrase()`
    `void` | `clearChunks()` Clears the chunk array.
    `protected java.util.ArrayList` | `convertColumn(float[] cLine)` Converts a sequence of lines representing one of the column bounds into an internal format.
    `static ColumnText` | `duplicate(ColumnText org)` Creates an independent duplicated of the instance `org`.
    `protected float[]` | `findLimitsOneLine()` Finds the intersection between the `yLine` and the two column bounds.
    `protected float` | `findLimitsPoint(java.util.ArrayList wall)` Finds the intersection between the `yLine` and the column.
    `protected float[]` | `findLimitsTwoLines()` Finds the intersection between the `yLine`, the `yLine-leading`and the two column bounds.
    `int` | `getAlignment()` Gets the alignment.
    `int` | `getArabicOptions()` Gets the arabic shaping options.
    `PdfContentByte` | `getCanvas()` Gets the canvas.
    `PdfContentByte[]` | `getCanvases()` Gets the canvases.
    `float` | `getDescender()` Gets the biggest descender value of the last line written.
    `float` | `getExtraParagraphSpace()` Sets the extra space between paragraphs.
    `float` | `getFilledWidth()` Gets the real width used by the largest line.
    `float` | `getFollowingIndent()` Gets the following paragraph lines indent.
    `float` | `getIndent()` Gets the first paragraph line indent.
    `float` | `getLeading()` Gets the fixed leading.
    `int` | `getLinesWritten()` Gets the number of lines written.
    `float` | `getMultipliedLeading()` Gets the variable leading.
    `float` | `getRightIndent()` Gets the right paragraph lines indent.
    `int` | `getRunDirection()` Gets the run direction.
    `float` | `getSpaceCharRatio()` Gets the space/character extra spacing ratio for fully justified text.
    `static float` | `getWidth(Phrase phrase)` Gets the width that the line will occupy after writing.
    `static float` | `getWidth(Phrase phrase, int runDirection, int arabicOptions)` Gets the width that the line will occupy after writing.
    `float` | `getYLine()` Gets the yLine.
    `int` | `go()` Outputs the lines to the document.
    `int` | `go(boolean simulate)` Outputs the lines to the document.
    `protected int` | `goComposite(boolean simulate)`
    `static boolean` | `hasMoreText(int status)` Checks the status variable and looks if there's still some text.
    `boolean` | `isAdjustFirstLine()` Gets the first line adjustment property.
    `boolean` | `isUseAscender()` Checks if UseAscender is enabled/disabled.
    `ColumnText` | `setACopy(ColumnText org)` Makes this instance an independent copy of `org`.
    `void` | `setAdjustFirstLine(boolean adjustFirstLine)` Sets the first line adjustment.
    `void` | `setAlignment(int alignment)` Sets the alignment.
    `void` | `setArabicOptions(int arabicOptions)` Sets the arabic shaping options.
    `void` | `setCanvas(PdfContentByte canvas)` Sets the canvas.
    `void` | `setCanvases(PdfContentByte[] canvases)` Sets the canvases.
    `void` | `setColumns(float[] leftLine, float[] rightLine)` Sets the columns bounds.
    `void` | `setExtraParagraphSpace(float extraParagraphSpace)` Sets the extra space between paragraphs.
    `void` | `setFilledWidth(float filledWidth)` Sets the real width used by the largest line.
    `void` | `setFollowingIndent(float indent)` Sets the following paragraph lines indent.
    `void` | `setIndent(float indent)` Sets the first paragraph line indent.
    `void` | `setLeading(float leading)` Sets the leading to fixed.
    `void` | `setLeading(float fixedLeading, float multipliedLeading)` Sets the leading fixed and variable.
    `void` | `setRightIndent(float indent)` Sets the right paragraph lines indent.
    `void` | `setRunDirection(int runDirection)` Sets the run direction.
    `void` | `setSimpleColumn(float llx, float lly, float urx, float ury)` Simplified method for rectangular columns.
    `void` | `setSimpleColumn(float llx, float lly, float urx, float ury, float leading, int alignment)` Simplified method for rectangular columns.
    `void` | `setSimpleColumn(Phrase phrase, float llx, float lly, float urx, float ury, float leading, int alignment)` Simplified method for rectangular columns.
    `protected void` | `setSimpleVars(ColumnText org)`
    `void` | `setSpaceCharRatio(float spaceCharRatio)` Sets the ratio between the extra word spacing and the extra character spacing when the text is fully justified.
    `void` | `setText(Phrase phrase)` Replaces the current text array with this `Phrase`.
    `void` | `setUseAscender(boolean useAscender)` Enables/Disables adjustment of first line height based on max ascender.
    `void` | `setYLine(float yLine)` Sets the yLine.
    `static void` | `showTextAligned(PdfContentByte canvas, int alignment, Phrase phrase, float x, float y, float rotation)` Shows a line of text.
    `static void` | `showTextAligned(PdfContentByte canvas, int alignment, Phrase phrase, float x, float y, float rotation, int runDirection, int arabicOptions)` Shows a line of text.
    `void` | `updateFilledWidth(float w)` Replaces the `filledWidth` if greater than the existing one.
    `boolean` | `zeroHeightElement()` Checks if the element has a height of 0.

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

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

- - ### Field Detail

    - #### AR_NOVOWEL

          public static final int AR_NOVOWEL

      Eliminate the arabic vowels
      See Also:
        Constant Field Values

    - #### AR_COMPOSEDTASHKEEL

          public static final int AR_COMPOSEDTASHKEEL

      Compose the tashkeel in the ligatures.
      See Also:
        Constant Field Values

    - #### AR_LIG

          public static final int AR_LIG

      Do some extra double ligatures.
      See Also:
        Constant Field Values

    - #### DIGITS_EN2AN

          public static final int DIGITS_EN2AN

      Digit shaping option: Replace European digits (U+0030...U+0039) by Arabic-Indic digits.
      See Also:
        Constant Field Values

    - #### DIGITS_AN2EN

          public static final int DIGITS_AN2EN

      Digit shaping option: Replace Arabic-Indic digits by European digits (U+0030...U+0039).
      See Also:
        Constant Field Values

    - #### DIGITS_EN2AN_INIT_LR

          public static final int DIGITS_EN2AN_INIT_LR

      Digit shaping option: Replace European digits (U+0030...U+0039) by Arabic-Indic digits if the most recent strongly directional character is an Arabic letter (its Bidi direction value is RIGHT_TO_LEFT_ARABIC). The initial state at the start of the text is assumed to be not an Arabic, letter, so European digits at the start of the text will not change. Compare to DIGITS_ALEN2AN_INIT_AL.
      See Also:
        Constant Field Values

    - #### DIGITS_EN2AN_INIT_AL

          public static final int DIGITS_EN2AN_INIT_AL

      Digit shaping option: Replace European digits (U+0030...U+0039) by Arabic-Indic digits if the most recent strongly directional character is an Arabic letter (its Bidi direction value is RIGHT_TO_LEFT_ARABIC). The initial state at the start of the text is assumed to be an Arabic, letter, so European digits at the start of the text will change. Compare to DIGITS_ALEN2AN_INT_LR.
      See Also:
        Constant Field Values

    - #### DIGIT_TYPE_AN

          public static final int DIGIT_TYPE_AN

      Digit type option: Use Arabic-Indic digits (U+0660...U+0669).
      See Also:
        Constant Field Values

    - #### DIGIT_TYPE_AN_EXTENDED

          public static final int DIGIT_TYPE_AN_EXTENDED

      Digit type option: Use Eastern (Extended) Arabic-Indic digits (U+06f0...U+06f9).
      See Also:
        Constant Field Values

    - #### runDirection

          protected int runDirection

    - #### GLOBAL_SPACE_CHAR_RATIO

          public static final float GLOBAL_SPACE_CHAR_RATIO

      the space char ratio
      See Also:
        Constant Field Values

    - #### START_COLUMN

          public static final int START_COLUMN

      Initial value of the status.
      See Also:
        Constant Field Values

    - #### NO_MORE_TEXT

          public static final int NO_MORE_TEXT

      Signals that there is no more text available.
      See Also:
        Constant Field Values

    - #### NO_MORE_COLUMN

          public static final int NO_MORE_COLUMN

      Signals that there is no more column.
      See Also:
        Constant Field Values

    - #### LINE_STATUS_OK

          protected static final int LINE_STATUS_OK

      The column is valid.
      See Also:
        Constant Field Values

    - #### LINE_STATUS_OFFLIMITS

          protected static final int LINE_STATUS_OFFLIMITS

      The line is out the column limits.
      See Also:
        Constant Field Values

    - #### LINE_STATUS_NOLINE

          protected static final int LINE_STATUS_NOLINE

      The line cannot fit this column position.
      See Also:
        Constant Field Values

    - #### maxY

          protected float maxY

      Upper bound of the column.

    - #### minY

          protected float minY

      Lower bound of the column.

    - #### leftX

          protected float leftX

    - #### rightX

          protected float rightX

    - #### alignment

          protected int alignment

      The column alignment. Default is left alignment.

    - #### leftWall

          protected java.util.ArrayList leftWall

      The left column bound.

    - #### rightWall

          protected java.util.ArrayList rightWall

      The right column bound.

    - #### bidiLine

          protected BidiLine bidiLine

      The chunks that form the text.

    - #### yLine

          protected float yLine

      The current y line location. Text will be written at this line minus the leading.

    - #### currentLeading

          protected float currentLeading

      The leading for the current line.

    - #### fixedLeading

          protected float fixedLeading

      The fixed text leading.

    - #### multipliedLeading

          protected float multipliedLeading

      The text leading that is multiplied by the biggest font size in the line.

    - #### canvas

          protected PdfContentByte canvas

      The `PdfContent` where the text will be written to.

    - #### canvases

          protected PdfContentByte[] canvases

    - #### lineStatus

          protected int lineStatus

      The line status when trying to fit a line to a column.

    - #### indent

          protected float indent

      The first paragraph line indent.

    - #### followingIndent

          protected float followingIndent

      The following paragraph lines indent.

    - #### rightIndent

          protected float rightIndent

      The right paragraph lines indent.

    - #### extraParagraphSpace

          protected float extraParagraphSpace

      The extra space between paragraphs.

    - #### rectangularWidth

          protected float rectangularWidth

      The width of the line when the column is defined as a simple rectangle.

    - #### rectangularMode

          protected boolean rectangularMode

    - #### spaceCharRatio

          private float spaceCharRatio

      Holds value of property spaceCharRatio.

    - #### lastWasNewline

          private boolean lastWasNewline

    - #### linesWritten

          private int linesWritten

      Holds value of property linesWritten.

    - #### firstLineY

          private float firstLineY

    - #### firstLineYDone

          private boolean firstLineYDone

    - #### arabicOptions

          private int arabicOptions

      Holds value of property arabicOptions.

    - #### descender

          protected float descender

    - #### composite

          protected boolean composite

    - #### compositeColumn

          protected ColumnText compositeColumn

    - #### compositeElements

          protected java.util.LinkedList compositeElements

    - #### listIdx

          protected int listIdx

    - #### splittedRow

          private boolean splittedRow

    - #### waitPhrase

          protected Phrase waitPhrase

    - #### useAscender

          private boolean useAscender

      if true, first line height is adjusted so that the max ascender touches the top

    - #### filledWidth

          private float filledWidth

      Holds value of property filledWidth.

    - #### adjustFirstLine

          private boolean adjustFirstLine

  - ### Constructor Detail

    - #### ColumnText

          public ColumnText(PdfContentByte canvas)

      Creates a `ColumnText`.
      Parameters:
        `canvas` - the place where the text will be written to. Can be a template.

  - ### Method Detail

    - #### duplicate

          public static ColumnText duplicate(ColumnText org)

      Creates an independent duplicated of the instance `org`.
      Parameters:
        `org` - the original `ColumnText`
      Returns:
        the duplicated

    - #### setACopy

          public ColumnText setACopy(ColumnText org)

      Makes this instance an independent copy of `org`.
      Parameters:
        `org` - the original `ColumnText`
      Returns:
        itself

    - #### setSimpleVars

          protected void setSimpleVars(ColumnText org)

    - #### addWaitingPhrase

          private void addWaitingPhrase()

    - #### addText

          public void addText(Phrase phrase)

      Adds a `Phrase` to the current text array. Will not have any effect if addElement() was called before.
      Parameters:
        `phrase` - the text

    - #### setText

          public void setText(Phrase phrase)

      Replaces the current text array with this `Phrase`. Anything added previously with addElement() is lost.
      Parameters:
        `phrase` - the text

    - #### addText

          public void addText(Chunk chunk)

      Adds a `Chunk` to the current text array. Will not have any effect if addElement() was called before.
      Parameters:
        `chunk` - the text

    - #### addElement

          public void addElement(Element element)

      Adds an element. Elements supported are `Paragraph`, `List`, `PdfPTable`, `Image` and `Graphic`.

      It removes all the text placed with `addText()`.

      Parameters:
        `element` - the `Element`

    - #### convertColumn

          protected java.util.ArrayList convertColumn(float[] cLine)

      Converts a sequence of lines representing one of the column bounds into an internal format.

      Each array element will contain a `float[4]` representing the line x = ax + b.

      Parameters:
        `cLine` - the column array
      Returns:
        the converted array

    - #### findLimitsPoint

          protected float findLimitsPoint(java.util.ArrayList wall)

      Finds the intersection between the `yLine` and the column. It will set the `lineStatus` appropriately.
      Parameters:
        `wall` - the column to intersect
      Returns:
        the x coordinate of the intersection

    - #### findLimitsOneLine

          protected float[] findLimitsOneLine()

      Finds the intersection between the `yLine` and the two column bounds. It will set the `lineStatus` appropriately.
      Returns:
        a `float[2]`with the x coordinates of the intersection

    - #### findLimitsTwoLines

          protected float[] findLimitsTwoLines()

      Finds the intersection between the `yLine`, the `yLine-leading`and the two column bounds. It will set the `lineStatus` appropriately.
      Returns:
        a `float[4]`with the x coordinates of the intersection

    - #### setColumns

          public void setColumns(float[] leftLine,
                        float[] rightLine)

      Sets the columns bounds. Each column bound is described by a `float[]` with the line points [x1,y1,x2,y2,...]. The array must have at least 4 elements.
      Parameters:
        `leftLine` - the left column bound
        `rightLine` - the right column bound

    - #### setSimpleColumn

          public void setSimpleColumn(Phrase phrase,
                             float llx,
                             float lly,
                             float urx,
                             float ury,
                             float leading,
                             int alignment)

      Simplified method for rectangular columns.
      Parameters:
        `phrase` - a `Phrase`
        `llx` - the lower left x corner
        `lly` - the lower left y corner
        `urx` - the upper right x corner
        `ury` - the upper right y corner
        `leading` - the leading
        `alignment` - the column alignment

    - #### setSimpleColumn

          public void setSimpleColumn(float llx,
                             float lly,
                             float urx,
                             float ury,
                             float leading,
                             int alignment)

      Simplified method for rectangular columns.
      Parameters:
        `llx` - the lower left x corner
        `lly` - the lower left y corner
        `urx` - the upper right x corner
        `ury` - the upper right y corner
        `leading` - the leading
        `alignment` - the column alignment

    - #### setSimpleColumn

          public void setSimpleColumn(float llx,
                             float lly,
                             float urx,
                             float ury)

      Simplified method for rectangular columns.
      Parameters:
        `llx` -
        `lly` -
        `urx` -
        `ury` -

    - #### setLeading

          public void setLeading(float leading)

      Sets the leading to fixed.
      Parameters:
        `leading` - the leading

    - #### setLeading

          public void setLeading(float fixedLeading,
                        float multipliedLeading)

      Sets the leading fixed and variable. The resultant leading will be fixedLeading+multipliedLeading*maxFontSize where maxFontSize is the size of the biggest font in the line.
      Parameters:
        `fixedLeading` - the fixed leading
        `multipliedLeading` - the variable leading

    - #### getLeading

          public float getLeading()

      Gets the fixed leading.
      Returns:
        the leading

    - #### getMultipliedLeading

          public float getMultipliedLeading()

      Gets the variable leading.
      Returns:
        the leading

    - #### setYLine

          public void setYLine(float yLine)

      Sets the yLine. The line will be written to yLine-leading.
      Parameters:
        `yLine` - the yLine

    - #### getYLine

          public float getYLine()

      Gets the yLine.
      Returns:
        the yLine

    - #### setAlignment

          public void setAlignment(int alignment)

      Sets the alignment.
      Parameters:
        `alignment` - the alignment

    - #### getAlignment

          public int getAlignment()

      Gets the alignment.
      Returns:
        the alignment

    - #### setIndent

          public void setIndent(float indent)

      Sets the first paragraph line indent.
      Parameters:
        `indent` - the indent

    - #### getIndent

          public float getIndent()

      Gets the first paragraph line indent.
      Returns:
        the indent

    - #### setFollowingIndent

          public void setFollowingIndent(float indent)

      Sets the following paragraph lines indent.
      Parameters:
        `indent` - the indent

    - #### getFollowingIndent

          public float getFollowingIndent()

      Gets the following paragraph lines indent.
      Returns:
        the indent

    - #### setRightIndent

          public void setRightIndent(float indent)

      Sets the right paragraph lines indent.
      Parameters:
        `indent` - the indent

    - #### getRightIndent

          public float getRightIndent()

      Gets the right paragraph lines indent.
      Returns:
        the indent

    - #### go

          public int go()
                 throws DocumentException

      Outputs the lines to the document. It is equivalent to `go(false)`.
      Returns:
        returns the result of the operation. It can be `NO_MORE_TEXT` and/or `NO_MORE_COLUMN`
      Throws:
        `DocumentException` - on error

    - #### go

          public int go(boolean simulate)
                 throws DocumentException

      Outputs the lines to the document. The output can be simulated.
      Parameters:
        `simulate` - `true` to simulate the writing to the document
      Returns:
        returns the result of the operation. It can be `NO_MORE_TEXT` and/or `NO_MORE_COLUMN`
      Throws:
        `DocumentException` - on error

    - #### getExtraParagraphSpace

          public float getExtraParagraphSpace()

      Sets the extra space between paragraphs.
      Returns:
        the extra space between paragraphs

    - #### setExtraParagraphSpace

          public void setExtraParagraphSpace(float extraParagraphSpace)

      Sets the extra space between paragraphs.
      Parameters:
        `extraParagraphSpace` - the extra space between paragraphs

    - #### clearChunks

          public void clearChunks()

      Clears the chunk array. A call to `go()` will always return NO_MORE_TEXT.

    - #### getSpaceCharRatio

          public float getSpaceCharRatio()

      Gets the space/character extra spacing ratio for fully justified text.
      Returns:
        the space/character extra spacing ratio

    - #### setSpaceCharRatio

          public void setSpaceCharRatio(float spaceCharRatio)

      Sets the ratio between the extra word spacing and the extra character spacing when the text is fully justified. Extra word spacing will grow `spaceCharRatio` times more than extra character spacing. If the ratio is `PdfWriter.NO_SPACE_CHAR_RATIO` then the extra character spacing will be zero.
      Parameters:
        `spaceCharRatio` - the ratio between the extra word spacing and the extra character spacing

    - #### setRunDirection

          public void setRunDirection(int runDirection)

      Sets the run direction.
      Parameters:
        `runDirection` - the run direction

    - #### getRunDirection

          public int getRunDirection()

      Gets the run direction.
      Returns:
        the run direction

    - #### getLinesWritten

          public int getLinesWritten()

      Gets the number of lines written.
      Returns:
        the number of lines written

    - #### getArabicOptions

          public int getArabicOptions()

      Gets the arabic shaping options.
      Returns:
        the arabic shaping options

    - #### setArabicOptions

          public void setArabicOptions(int arabicOptions)

      Sets the arabic shaping options. The option can be AR_NOVOWEL, AR_COMPOSEDTASHKEEL and AR_LIG.
      Parameters:
        `arabicOptions` - the arabic shaping options

    - #### getDescender

          public float getDescender()

      Gets the biggest descender value of the last line written.
      Returns:
        the biggest descender value of the last line written

    - #### getWidth

          public static float getWidth(Phrase phrase,
                       int runDirection,
                       int arabicOptions)

      Gets the width that the line will occupy after writing. Only the width of the first line is returned.
      Parameters:
        `phrase` - the `Phrase` containing the line
        `runDirection` - the run direction
        `arabicOptions` - the options for the arabic shaping
      Returns:
        the width of the line

    - #### getWidth

          public static float getWidth(Phrase phrase)

      Gets the width that the line will occupy after writing. Only the width of the first line is returned.
      Parameters:
        `phrase` - the `Phrase` containing the line
      Returns:
        the width of the line

    - #### showTextAligned

          public static void showTextAligned(PdfContentByte canvas,
                             int alignment,
                             Phrase phrase,
                             float x,
                             float y,
                             float rotation,
                             int runDirection,
                             int arabicOptions)

      Shows a line of text. Only the first line is written.
      Parameters:
        `canvas` - where the text is to be written to
        `alignment` - the alignment. It is not influenced by the run direction
        `phrase` - the `Phrase` with the text
        `x` - the x reference position
        `y` - the y reference position
        `rotation` - the rotation to be applied in degrees counterclockwise
        `runDirection` - the run direction
        `arabicOptions` - the options for the arabic shaping

    - #### showTextAligned

          public static void showTextAligned(PdfContentByte canvas,
                             int alignment,
                             Phrase phrase,
                             float x,
                             float y,
                             float rotation)

      Shows a line of text. Only the first line is written.
      Parameters:
        `canvas` - where the text is to be written to
        `alignment` - the alignment
        `phrase` - the `Phrase` with the text
        `x` - the x reference position
        `y` - the y reference position
        `rotation` - the rotation to be applied in degrees counterclockwise

    - #### goComposite

          protected int goComposite(boolean simulate)
                             throws DocumentException

      Throws:
        `DocumentException`

    - #### getCanvas

          public PdfContentByte getCanvas()

      Gets the canvas. If a set of four canvases exists, the TEXTCANVAS is returned.
      Returns:
        a PdfContentByte.

    - #### setCanvas

          public void setCanvas(PdfContentByte canvas)

      Sets the canvas. If before a set of four canvases was set, it is being unset.
      Parameters:
        `canvas` -

    - #### setCanvases

          public void setCanvases(PdfContentByte[] canvases)

      Sets the canvases.
      Parameters:
        `canvases` -

    - #### getCanvases

          public PdfContentByte[] getCanvases()

      Gets the canvases.
      Returns:
        an array of PdfContentByte

    - #### zeroHeightElement

          public boolean zeroHeightElement()

      Checks if the element has a height of 0.
      Returns:
        true or false
      Since:
        2.1.2

    - #### isUseAscender

          public boolean isUseAscender()

      Checks if UseAscender is enabled/disabled.
      Returns:
        true is the adjustment of the first line height is based on max ascender.

    - #### setUseAscender

          public void setUseAscender(boolean useAscender)

      Enables/Disables adjustment of first line height based on max ascender.
      Parameters:
        `useAscender` - enable adjustment if true

    - #### hasMoreText

          public static boolean hasMoreText(int status)

      Checks the status variable and looks if there's still some text.

    - #### getFilledWidth

          public float getFilledWidth()

      Gets the real width used by the largest line.
      Returns:
        the real width used by the largest line

    - #### setFilledWidth

          public void setFilledWidth(float filledWidth)

      Sets the real width used by the largest line. Only used to set it to zero to start another measurement.
      Parameters:
        `filledWidth` - the real width used by the largest line

    - #### updateFilledWidth

          public void updateFilledWidth(float w)

      Replaces the `filledWidth` if greater than the existing one.
      Parameters:
        `w` - the new `filledWidth` if greater than the existing one

    - #### isAdjustFirstLine

          public boolean isAdjustFirstLine()

      Gets the first line adjustment property.
      Returns:
        the first line adjustment property.

    - #### setAdjustFirstLine

          public void setAdjustFirstLine(boolean adjustFirstLine)

      Sets the first line adjustment. Some objects have properties, like spacing before, that behave differently if the object is the first to be written after go() or not. The first line adjustment is `true` by default but can be changed if several objects are to be placed one after the other in the same column calling go() several times.
      Parameters:
        `adjustFirstLine` - `true` to adjust the first line, `false` otherwise