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.
AR_COMPOSEDTASHKEEL
public static final int AR_COMPOSEDTASHKEEL
Compose the tashkeel in the ligatures.
AR_LIG
public static final int AR_LIG
Do some extra double ligatures.
AR_NOVOWEL
public static final int AR_NOVOWEL
Eliminate the arabic vowels
DIGITS_AN2EN
public static final int DIGITS_AN2EN
Digit shaping option: Replace Arabic-Indic digits by European digits (U+0030...U+0039).
DIGITS_EN2AN
public static final int DIGITS_EN2AN
Digit shaping option: Replace European digits (U+0030...U+0039) by Arabic-Indic digits.
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.
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.
DIGIT_TYPE_AN
public static final int DIGIT_TYPE_AN
Digit type option: Use Arabic-Indic digits (U+0660...U+0669).
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).
GLOBAL_SPACE_CHAR_RATIO
public static final float GLOBAL_SPACE_CHAR_RATIO
the space char ratio
LINE_STATUS_NOLINE
protected static final int LINE_STATUS_NOLINE
The line cannot fit this column position.
LINE_STATUS_OFFLIMITS
protected static final int LINE_STATUS_OFFLIMITS
The line is out the column limits.
LINE_STATUS_OK
protected static final int LINE_STATUS_OK
The column is valid.
NO_MORE_COLUMN
public static final int NO_MORE_COLUMN
Signals that there is no more column.
NO_MORE_TEXT
public static final int NO_MORE_TEXT
Signals that there is no more text available.
alignment
protected int alignment
The column alignment. Default is left alignment.
arabicOptions
private int arabicOptions
Holds value of property arabicOptions.
bidiLine
protected BidiLine bidiLine
The chunks that form the text.
canvas
protected PdfContentByte canvas
The PdfContent
where the text will be written to.
composite
protected boolean composite
compositeColumn
protected ColumnText compositeColumn
compositeElements
protected LinkedList compositeElements
currentLeading
protected float currentLeading
The leading for the current line.
descender
protected float descender
extraParagraphSpace
protected float extraParagraphSpace
The extra space between paragraphs.
firstLineY
private float firstLineY
firstLineYDone
private boolean firstLineYDone
fixedLeading
protected float fixedLeading
The fixed text leading.
followingIndent
protected float followingIndent
The following paragraph lines indent.
indent
protected float indent
The first paragraph line indent.
lastWasNewline
private boolean lastWasNewline
leftWall
protected ArrayList leftWall
The left column bound.
leftX
protected float leftX
lineStatus
protected int lineStatus
The line status when trying to fit a line to a column.
linesWritten
private int linesWritten
Holds value of property linesWritten.
listIdx
protected int listIdx
maxY
protected float maxY
Upper bound of the column.
minY
protected float minY
Lower bound of the column.
multipliedLeading
protected float multipliedLeading
The text leading that is multiplied by the biggest font size in the line.
rectangularWidth
protected float rectangularWidth
The width of the line when the column is defined as a simple rectangle.
rightIndent
protected float rightIndent
The right paragraph lines indent.
rightWall
protected ArrayList rightWall
The right column bound.
rightX
protected float rightX
runDirection
protected int runDirection
spaceCharRatio
private float spaceCharRatio
Holds value of property spaceCharRatio.
splittedRow
private boolean splittedRow
useAscender
private boolean useAscender
if true, first line height is adjusted so that the max ascender touches the top
waitPhrase
protected Phrase waitPhrase
yLine
protected float yLine
The current y line location. Text will be written at this line minus the leading.
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()
.
addText
public void addText(Chunk chunk)
Adds a Chunk
to the current text array.
Will not have any effect if addElement() was called before.
addText
public void addText(Phrase phrase)
Adds a Phrase
to the current text array.
Will not have any effect if addElement() was called before.
addWaitingPhrase
private void addWaitingPhrase()
clearChunks
public void clearChunks()
Clears the chunk array. A call to go()
will always return
NO_MORE_TEXT.
convertColumn
protected ArrayList convertColumn(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.
duplicate
public static ColumnText duplicate(ColumnText org)
Creates an independent duplicated of the instance org
.
org
- the original ColumnText
findLimitsOneLine
protected float[] findLimitsOneLine()
Finds the intersection between the yLine
and the two
column bounds. It will set the lineStatus
apropriatly.
- a
float[2]
with the x coordinates of the intersection
findLimitsPoint
protected float findLimitsPoint(ArrayList wall)
Finds the intersection between the yLine
and the column. It will
set the lineStatus
apropriatly.
wall
- the column to intersect
- the x coordinate 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
apropriatly.
- a
float[4]
with the x coordinates of the intersection
getAlignment
public int getAlignment()
Gets the alignment.
getArabicOptions
public int getArabicOptions()
Gets the arabic shaping options.
- the arabic shaping options
getDescender
public float getDescender()
Gets the biggest descender value of the last line written.
- the biggest descender value of the last line written
getExtraParagraphSpace
public float getExtraParagraphSpace()
Sets the extra space between paragraphs.
- the extra space between paragraphs
getFollowingIndent
public float getFollowingIndent()
Gets the following paragraph lines indent.
getIndent
public float getIndent()
Gets the first paragraph line indent.
getLeading
public float getLeading()
Gets the fixed leading
getLinesWritten
public int getLinesWritten()
Gets the number of lines written.
- the number of lines written
getMultipliedLeading
public float getMultipliedLeading()
Gets the variable leading
getRightIndent
public float getRightIndent()
Gets the right paragraph lines indent.
getRunDirection
public int getRunDirection()
Gets the run direction.
getSpaceCharRatio
public float getSpaceCharRatio()
Gets the space/character extra spacing ratio for
fully justified text.
- the space/character extra spacing ratio
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.
phrase
- the Phrase
containing the line
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.
phrase
- the Phrase
containing the linerunDirection
- the run directionarabicOptions
- the options for the arabic shaping
getYLine
public float getYLine()
Gets the yLine.
go
public int go()
throws DocumentException
Outputs the lines to the document. It is equivalent to go(false)
.
- returns the result of the operation. It can be
NO_MORE_TEXT
and/or NO_MORE_COLUMN
go
public int go(boolean simulate)
throws DocumentException
Outputs the lines to the document. The output can be simulated.
simulate
- true
to simulate the writting to the document
- returns the result of the operation. It can be
NO_MORE_TEXT
and/or NO_MORE_COLUMN
isUseAscender
public boolean isUseAscender()
Checks if UseAscender is enabled/disabled.
- true is the adjustment of the first line height is based on max ascender.
setACopy
public ColumnText setACopy(ColumnText org)
Makes this instance an independent copy of org
.
org
- the original ColumnText
setAlignment
public void setAlignment(int alignment)
Sets the alignment.
alignment
- the alignment
setArabicOptions
public void setArabicOptions(int arabicOptions)
Sets the arabic shaping options. The option can be AR_NOVOWEL,
AR_COMPOSEDTASHKEEL and AR_LIG.
arabicOptions
- the arabic shaping options
setCanvas
public void setCanvas(PdfContentByte canvas)
Sets the canvas.
setColumns
public void setColumns(leftLine[] ,
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.
setExtraParagraphSpace
public void setExtraParagraphSpace(float extraParagraphSpace)
Sets the extra space between paragraphs.
extraParagraphSpace
- the extra space between paragraphs
setFollowingIndent
public void setFollowingIndent(float indent)
Sets the following paragraph lines indent.
setIndent
public void setIndent(float indent)
Sets the first paragraph line indent.
setLeading
public void setLeading(float leading)
Sets the leading to fixed
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 bigest font in the line.
fixedLeading
- the fixed leadingmultipliedLeading
- the variable leading
setRightIndent
public void setRightIndent(float indent)
Sets the right paragraph lines indent.
setRunDirection
public void setRunDirection(int runDirection)
Sets the run direction.
runDirection
- the run direction
setSimpleColumn
public void setSimpleColumn(Phrase phrase,
float llx,
float lly,
float urx,
float ury,
float leading,
int alignment)
Simplified method for rectangular columns.
phrase
- a Phrase
llx
- the lower left x cornerlly
- the lower left y cornerurx
- the upper right x cornerury
- the upper right y cornerleading
- the leadingalignment
- the column alignment
setSimpleColumn
public void setSimpleColumn(float llx,
float lly,
float urx,
float ury)
Simplified method for rectangular columns.
setSimpleColumn
public void setSimpleColumn(float llx,
float lly,
float urx,
float ury,
float leading,
int alignment)
Simplified method for rectangular columns.
llx
- the lower left x cornerlly
- the lower left y cornerurx
- the upper right x cornerury
- the upper right y cornerleading
- the leadingalignment
- the column alignment
setSimpleVars
protected void setSimpleVars(ColumnText org)
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.
spaceCharRatio
- the ratio between the extra word spacing and the extra character spacing
setText
public void setText(Phrase phrase)
Replaces the current text array with this Phrase
.
Anything added previously with addElement() is lost.
setUseAscender
public void setUseAscender(boolean use)
Enables/Disables adjustment of first line height based on max ascender.
use
- enable adjustment if true
setYLine
public void setYLine(float yLine)
Sets the yLine. The line will be written to yLine-leading.
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.
canvas
- where the text is to be written toalignment
- the alignmentphrase
- the Phrase
with the textx
- the x reference positiony
- the y reference positionrotation
- the rotation to be applied in degrees counterclockwise
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.
canvas
- where the text is to be written toalignment
- the alignment. It is not influenced by the run directionphrase
- the Phrase
with the textx
- the x reference positiony
- the y reference positionrotation
- the rotation to be applied in degrees counterclockwiserunDirection
- the run directionarabicOptions
- the options for the arabic shaping
zeroHeightElement
public boolean zeroHeightElement()
Checks if the element has a height of 0.