Class ColumnText

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

public class ColumnText extends 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.

  • Field Details

    • AR_NOVOWEL

      public static final int AR_NOVOWEL
      Eliminate the arabic vowels
      See Also:
    • AR_COMPOSEDTASHKEEL

      public static final int AR_COMPOSEDTASHKEEL
      Compose the tashkeel in the ligatures.
      See Also:
    • AR_LIG

      public static final int AR_LIG
      Do some extra double ligatures.
      See Also:
    • DIGITS_EN2AN

      public static final int DIGITS_EN2AN
      Digit shaping option: Replace European digits (U+0030...U+0039) by Arabic-Indic digits.
      See Also:
    • DIGITS_AN2EN

      public static final int DIGITS_AN2EN
      Digit shaping option: Replace Arabic-Indic digits by European digits (U+0030...U+0039).
      See Also:
    • 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:
    • 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:
    • DIGIT_TYPE_AN

      public static final int DIGIT_TYPE_AN
      Digit type option: Use Arabic-Indic digits (U+0660...U+0669).
      See Also:
    • 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:
    • GLOBAL_SPACE_CHAR_RATIO

      public static final float GLOBAL_SPACE_CHAR_RATIO
      the space char ratio
      See Also:
    • START_COLUMN

      public static final int START_COLUMN
      Initial value of the status.
      See Also:
    • NO_MORE_TEXT

      public static final int NO_MORE_TEXT
      Signals that there is no more text available.
      See Also:
    • NO_MORE_COLUMN

      public static final int NO_MORE_COLUMN
      Signals that there is no more column.
      See Also:
    • LINE_STATUS_OK

      protected static final int LINE_STATUS_OK
      The column is valid.
      See Also:
    • LINE_STATUS_OFFLIMITS

      protected static final int LINE_STATUS_OFFLIMITS
      The line is out the column limits.
      See Also:
    • LINE_STATUS_NOLINE

      protected static final int LINE_STATUS_NOLINE
      The line cannot fit this column position.
      See Also:
    • runDirection

      protected int runDirection
    • 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 List<float[]> leftWall
      The left column bound.
    • rightWall

      protected List<float[]> 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
    • descender

      protected float descender
    • composite

      protected boolean composite
    • compositeColumn

      protected ColumnText compositeColumn
    • compositeElements

      protected LinkedList<Element> compositeElements
    • listIdx

      protected int listIdx
    • waitPhrase

      protected Phrase waitPhrase
    • 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.
    • splittedRow

      private boolean splittedRow
    • 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 Details

    • ColumnText

      public ColumnText(PdfContentByte canvas)
      Creates a ColumnText.
      Parameters:
      canvas - the place where the text will be written to. Can be a template.
  • Method Details

    • duplicate

      public static ColumnText duplicate(ColumnText org)
      Creates an independent duplicated of the instance org.
      Parameters:
      org - the original ColumnText
      Returns:
      the duplicated
    • 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
    • hasMoreText

      public static boolean hasMoreText(int status)
      Checks the status variable and looks if there's still some text.
      Parameters:
      status - statues variable
      Returns:
      true if there's still some text else false
    • 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 List<float[]> 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(List<float[]> 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-leadingand 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 - lower-left-x
      lly - lower-left-y
      urx - upper-right-x
      ury - upper-right-y
    • 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
    • setLeading

      public void setLeading(float leading)
      Sets the leading to fixed.
      Parameters:
      leading - the leading
    • getMultipliedLeading

      public float getMultipliedLeading()
      Gets the variable leading.
      Returns:
      the leading
    • getYLine

      public float getYLine()
      Gets the yLine.
      Returns:
      the yLine
    • setYLine

      public void setYLine(float yLine)
      Sets the yLine. The line will be written to yLine-leading.
      Parameters:
      yLine - the yLine
    • getAlignment

      public int getAlignment()
      Gets the alignment.
      Returns:
      the alignment
    • setAlignment

      public void setAlignment(int alignment)
      Sets the alignment.
      Parameters:
      alignment - the alignment
    • getIndent

      public float getIndent()
      Gets the first paragraph line indent.
      Returns:
      the indent
    • setIndent

      public void setIndent(float indent)
      Sets the first paragraph line indent.
      Parameters:
      indent - the indent
    • getFollowingIndent

      public float getFollowingIndent()
      Gets the following paragraph lines indent.
      Returns:
      the indent
    • setFollowingIndent

      public void setFollowingIndent(float indent)
      Sets the following paragraph lines indent.
      Parameters:
      indent - the indent
    • getRightIndent

      public float getRightIndent()
      Gets the right paragraph lines indent.
      Returns:
      the indent
    • setRightIndent

      public void setRightIndent(float indent)
      Sets the right paragraph lines indent.
      Parameters:
      indent - 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
    • getRunDirection

      public int getRunDirection()
      Gets the run direction.
      Returns:
      the run direction
    • setRunDirection

      public void setRunDirection(int runDirection)
      Sets the run direction.
      Parameters:
      runDirection - 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
    • 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 - an object of PdfContentByte
    • getCanvases

      public PdfContentByte[] getCanvases()
      Gets the canvases.
      Returns:
      an array of PdfContentByte
    • setCanvases

      public void setCanvases(PdfContentByte[] canvases)
      Sets the canvases.
      Parameters:
      canvases - 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
    • 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