|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectcom.itextpdf.text.pdf.events.PdfPTableEventForwarder
public class PdfPTableEventForwarder
If you want to add more than one page event to a PdfPTable, you have to construct a PdfPTableEventForwarder, add the different events to this object and add the forwarder to the PdfWriter.
Field Summary | |
---|---|
protected ArrayList<PdfPTableEvent> |
events
ArrayList containing all the PageEvents that have to be executed. |
Constructor Summary | |
---|---|
PdfPTableEventForwarder()
|
Method Summary | |
---|---|
void |
addTableEvent(PdfPTableEvent event)
Add a page event to the forwarder. |
void |
afterSplitTable(PdfPTable table,
PdfPRow startRow,
int startIdx)
This method is called to indicate that table has been split. |
void |
splitTable(PdfPTable table)
This method is called to indicate that table is being split. |
void |
tableLayout(PdfPTable table,
float[][] widths,
float[] heights,
int headerRows,
int rowStart,
PdfContentByte[] canvases)
This method is called at the end of the table rendering. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected ArrayList<PdfPTableEvent> events
Constructor Detail |
---|
public PdfPTableEventForwarder()
Method Detail |
---|
public void addTableEvent(PdfPTableEvent event)
event
- an event that has to be added to the forwarder.public void tableLayout(PdfPTable table, float[][] widths, float[] heights, int headerRows, int rowStart, PdfContentByte[] canvases)
PdfPTableEvent
PdfContentByte
contained in
canvases
.canvases
are:
PdfPTable.BASECANVAS
- the original PdfContentByte
. Anything placed here
will be under the table.
PdfPTable.BACKGROUNDCANVAS
- the layer where the background goes to.
PdfPTable.LINECANVAS
- the layer where the lines go to.
PdfPTable.TEXTCANVAS
- the layer where the text go to. Anything placed here
will be over the table.
The widths
and heights
have the coordinates of the cells.
The size of the widths
array is the number of rows.
Each sub-array in widths
corresponds to the x column border positions where
the first element is the x coordinate of the left table border and the last
element is the x coordinate of the right table border.
If colspan is not used all the sub-arrays in widths
are the same.
For the heights
the first element is the y coordinate of the top table border and the last
element is the y coordinate of the bottom table border.
tableLayout
in interface PdfPTableEvent
table
- the PdfPTable
in usewidths
- an array of arrays with the cells' x positions. It has the length of the number
of rowsheights
- an array with the cells' y positions. It has a length of the number
of rows + 1headerRows
- the number of rows defined for the header.rowStart
- the first row number after the headercanvases
- an array of PdfContentByte
PdfPTableEvent.tableLayout(com.itextpdf.text.pdf.PdfPTable, float[][], float[], int, int, com.itextpdf.text.pdf.PdfContentByte[])
public void splitTable(PdfPTable table)
PdfPTableEventSplit
tableLayout
method and before the table is drawn.
splitTable
in interface PdfPTableEventSplit
table
- the PdfPTable
in usePdfPTableEventSplit.splitTable(com.itextpdf.text.pdf.PdfPTable)
public void afterSplitTable(PdfPTable table, PdfPRow startRow, int startIdx)
PdfPTableEventAfterSplit
tableLayout
method and after the table has been drawn on the previous page but before the rest of the table is laid out on
the following page.
It is meant to allow modifications of the table, e.g. by changing cells. This is useful for situations when some
information has to be repeated, like putting "still 2012 | Jan | 1000 $ | 2000 $ | Feb | 900 $ | 2100 $ -------8<----- Page break ------------- still | Mar | 1100 $ | 1900 $ 2012 | Apr | 1200 $ | 1800 $ | May | 1200 $ | 2200 $ ...While this might be emulated by just stamping "still 2012" on the page using the currently available event callback
tableLayout
, that would fail in the case of the page break happening after the November
line, because the text "still 2012" would then overlap with the new entry "2013" in the 2013 January line.
This problem does not exist when modifying the first cell on the new page because that cell will the be laid out
to have sufficient height so that no overlaps occur.
Example:
public void afterSplitTable(PdfPTable table, PdfPRow startRow, int startIdx) { PdfPCell cell = startRow.getCells()[0]; cell.addElement(new Paragraph("still " + currentYear)); }Note that determining the value of
currentYear
can be done in tableLayout
by noting the sizes of the tables laid out there and comparing them with the tracked row indices
of the years (via table.getRows()).
afterSplitTable
in interface PdfPTableEventAfterSplit
table
- the PdfPTable
in usestartRow
- the first PdfPRow
of the table body on the following pagestartIdx
- the index of that rowPdfPTableEventAfterSplit.afterSplitTable(com.itextpdf.text.pdf.PdfPTable, com.itextpdf.text.pdf.PdfPRow, int)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |