com.lowagie.text.pdf

Class MultiColumnText

Implemented Interfaces:
Element

public class MultiColumnText
extends java.lang.Object
implements Element

Formats content into one or more columns bounded by a rectangle. The columns may be simple rectangles or more complicated shapes. Add all of the columns before adding content. Column continuation is supported. A MultiColumnText object may be added to a document using Document.add.
Author:
Steve Appling

Nested Class Summary

private class
MultiColumnText.ColumnDef
Inner class used to define a column

Field Summary

static float
AUTOMATIC
special constant for automatic calculation of height
private ArrayList
columnDefs
Array of ColumnDef objects used to define the columns
private ColumnText
columnText
ColumnText object used to do all the real work.
private boolean
columnsRightToLeft
private int
currentColumn
private float
desiredHeight
total desiredHeight of columns.
private PdfDocument
document
private float
nextY
private boolean
overflow
true if all the text could not be written out due to height restriction
private float
pageBottom
used to store the y position of the bottom of the page
private boolean
simple
true if all columns are simple (rectangular)
private float
top
Top of the columns - y position on starting page.
private float
totalHeight
total height of element written out so far

Fields inherited from interface com.lowagie.text.Element

ALIGN_BASELINE, ALIGN_BOTTOM, ALIGN_CENTER, ALIGN_JUSTIFIED, ALIGN_JUSTIFIED_ALL, ALIGN_LEFT, ALIGN_MIDDLE, ALIGN_RIGHT, ALIGN_TOP, ALIGN_UNDEFINED, ANCHOR, ANNOTATION, AUTHOR, CCITTG3_1D, CCITTG3_2D, CCITTG4, CCITT_BLACKIS1, CCITT_ENCODEDBYTEALIGN, CCITT_ENDOFBLOCK, CCITT_ENDOFLINE, CELL, CHAPTER, CHUNK, CREATIONDATE, CREATOR, GRAPHIC, HEADER, IMGRAW, IMGTEMPLATE, JPEG, KEYWORDS, LIST, LISTITEM, MULTI_COLUMN_TEXT, PARAGRAPH, PHRASE, PRODUCER, PTABLE, RECTANGLE, ROW, SECTION, SUBJECT, TABLE, TITLE

Constructor Summary

MultiColumnText()
Default constructor.
MultiColumnText(float height)
Construct a MultiColumnText container of the specified height.

Method Summary

void
addColumn(float[] left, float[] right)
Add a new column.
void
addElement(Element element)
Add an element to be rendered in a column.
void
addRegularColumns(float left, float right, float gutterWidth, int numColumns)
Add the specified number of evenly spaced rectangular columns.
void
addSimpleColumn(float left, float right)
Add a simple rectangular column with specified left and right x position boundaries.
ArrayList
getChunks()
Returns null - not used
private float
getColumnBottom()
Calculates the appropriate y position for the bottom of the columns on this page.
int
getCurrentColumn()
Gets the current column.
private float
getHeight(float[] left, float[] right)
Figure out the height of a column from the border extents
boolean
isOverflow()
Indicates that all of the text did not fit in the specified height.
private void
newPage()
void
nextColumn()
Moves the text insertion point to the beginning of the next column, issuing a page break if needed.
boolean
process(ElementListener listener)
Processes the element by adding it to an ElementListener.
void
resetCurrentColumn()
Resets the current column.
void
setColumnsRightToLeft(boolean direction)
Sets the direction of the columns.
boolean
shiftCurrentColumn()
Shifts the current column.
int
type()
Gets the type of the text element.
void
useColumnParams(ColumnText sourceColumn)
Copy the parameters from the specified ColumnText to use when rendering.
float
write(PdfContentByte canvas, PdfDocument document, float documentY)
Write out the columns.

Field Details

AUTOMATIC

public static final float AUTOMATIC
special constant for automatic calculation of height
Field Value:
-1.0f

columnDefs

private ArrayList columnDefs
Array of ColumnDef objects used to define the columns

columnText

private ColumnText columnText
ColumnText object used to do all the real work. This same object is used for all columns

columnsRightToLeft

private boolean columnsRightToLeft

currentColumn

private int currentColumn

desiredHeight

private float desiredHeight
total desiredHeight of columns. If AUTOMATIC, this means fill pages until done. This may be larger than one page

document

private PdfDocument document

nextY

private float nextY

overflow

private boolean overflow
true if all the text could not be written out due to height restriction

pageBottom

private float pageBottom
used to store the y position of the bottom of the page

simple

private boolean simple
true if all columns are simple (rectangular)

top

private float top
Top of the columns - y position on starting page. If AUTOMATIC, it means current y position when added to document

totalHeight

private float totalHeight
total height of element written out so far

Constructor Details

MultiColumnText

public MultiColumnText()
Default constructor. Sets height to AUTOMATIC. Columns will repeat on each page as necessary to accomodate content length.

MultiColumnText

public MultiColumnText(float height)
Construct a MultiColumnText container of the specified height. If height is AUTOMATIC, fill complete pages until done. If a specific height is used, it may span one or more pages.
Parameters:
height -

Method Details

addColumn

public void addColumn(float[] left,
                      float[] right)
Add a new column. The parameters are limits for each column wall in the format of a sequence of points (x1,y1,x2,y2,...).
Parameters:
left - limits for left column
right - limits for right column

addElement

public void addElement(Element element)
            throws DocumentException
Add an element to be rendered in a column. Note that you can only add a Phrase or a Chunk if the columns are not all simple. This is an underlying restriction in ColumnText
Parameters:
element - element to add
Throws:
DocumentException - if element can't be added

addRegularColumns

public void addRegularColumns(float left,
                              float right,
                              float gutterWidth,
                              int numColumns)
Add the specified number of evenly spaced rectangular columns. Columns will be seperated by the specified gutterWidth.
Parameters:
left - left boundary of first column
right - right boundary of last column
gutterWidth - width of gutter spacing between columns
numColumns - number of columns to add

addSimpleColumn

public void addSimpleColumn(float left,
                            float right)
Add a simple rectangular column with specified left and right x position boundaries.
Parameters:
left - left boundary
right - right boundary

getChunks

public ArrayList getChunks()
Returns null - not used
Specified by:
getChunks in interface Element
Returns:
null

getColumnBottom

private float getColumnBottom()
Calculates the appropriate y position for the bottom of the columns on this page.
Returns:
the y position of the bottom of the columns

getCurrentColumn

public int getCurrentColumn()
Gets the current column.
Returns:
the current column

getHeight

private float getHeight(float[] left,
                        float[] right)
Figure out the height of a column from the border extents
Parameters:
left - left border
right - right border
Returns:
height

isOverflow

public boolean isOverflow()
Indicates that all of the text did not fit in the specified height. Note that isOverflow will return false before the MultiColumnText object has been added to the document. It will always be false if the height is AUTOMATIC.
Returns:
true if there is still space left in the column

newPage

private void newPage()
            throws DocumentException

nextColumn

public void nextColumn()
            throws DocumentException
Moves the text insertion point to the beginning of the next column, issuing a page break if needed.
Throws:
DocumentException - on error

process

public boolean process(ElementListener listener)
Processes the element by adding it to an ElementListener.
Specified by:
process in interface Element
Parameters:
listener - an ElementListener
Returns:
true if the element was processed successfully

resetCurrentColumn

public void resetCurrentColumn()
Resets the current column.

setColumnsRightToLeft

public void setColumnsRightToLeft(boolean direction)
Sets the direction of the columns.
Parameters:
direction - true = right2left; false = left2right

shiftCurrentColumn

public boolean shiftCurrentColumn()
Shifts the current column.
Returns:
true if the currentcolumn has changed

type

public int type()
Gets the type of the text element.
Specified by:
type in interface Element
Returns:
a type

useColumnParams

public void useColumnParams(ColumnText sourceColumn)
Copy the parameters from the specified ColumnText to use when rendering. Parameters like setArabicOptions must be set in this way.
Parameters:
sourceColumn -

write

public float write(PdfContentByte canvas,
                   PdfDocument document,
                   float documentY)
            throws DocumentException
Write out the columns. After writing, use isOverflow() to see if all text was written.
Parameters:
canvas - PdfContentByte to write with
document - document to write to (only used to get page limit info)
documentY - starting y position to begin writing at
Returns:
the current height (y position) after writing the columns
Throws:
DocumentException - on error