I have this following example, if you try to go
over pages with depth of childs (in horizontal as well
vertical direction) increasing, then at page breaks
outer table refuse to extend even thought the cell
extends to next page the cellevent does not..
code sample below....
private void createDocumentation ( final
HttpServletResponse response ,final
HttpServletRequest request )
{
final Document document = generateDocument();
/// A4 or other sizes
try
{
final PdfWriter writer =
PdfWriter.getInstance(document,
response.getOutputStream() );
document.open();
final PdfPTable table = new PdfPTable(1);
table.getDefaultCell().setPadding(0);
table.getDefaultCell().setBorder(0);
table.setSplitRows( true );
table.setSplitLate( false );
table.setWidthPercentage(98);
table.setHorizontalAlignment(Element.ALIGN_LEFT);
final PdfPTable table1 =
generatePDFDocument(writer, tree, document);
table.addCell( table1 );
document.add(table);
table.setSplitRows(true);
response.setContentType("application/pdf");
document.newPage();
writer.setPageEmpty(false);
document.newPage();
}
catch ( Exception e )
{
ExceptionUtil.printStackTrace(e);
}
document.close();
}
private PdfPTable generatePDFDocument(final
PdfWriter writer, final ObjectTree tree, Document
document) throws Exception
{
String nodeID = tree.getRootNodeID();
return getPDFStructure(writer, tree, nodeID,
350, 0, document, 0 );
}
private PdfPTable getPDFStructure(final PdfWriter
writer,final ObjectTree tree, final String nodeID,
int descLength,
final int depth, Document document, int childCount )
throws IOException, DocumentException
{
int signLength = 30;
final Node node = tree.getNode(nodeID);
if( descLength < 0)
{
descLength =100;
}
final float width[]= { signLength, descLength
} ;
final PdfPTable table = getPDFTable( width );
table.getDefaultCell().setNoWrap( false );
table.setTotalWidth( signLength+ descLength );
table.setLockedWidth(true);
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);
table.setHorizontalAlignment(Element.ALIGN_LEFT);
PdfPTable tableSign = getSignTable( node);
PdfPCell cell = new PdfPCell(tableSign );
cell.setBackgroundColor( Color.GREEN );
table.addCell(cell);
PdfPTable innerTable = getIconTable( node,
writer, tree, descLength - signLength, depth,
document, childCount );
PdfPCell cell1 = new PdfPCell(innerTable );
table.addCell( cell1);
return table;
}
private static PdfPTable getPDFTable( final
float[] width )
{
final PdfPTable table = new PdfPTable( width
);
table.getDefaultCell().setPadding(0);
table.getDefaultCell().setBorder(0);
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);
table.setExtendLastRow(true);
table.setSplitRows( true );
table.setSplitLate( false );
return table;
}
private PdfPTable getIconTable( final Node node,
final PdfWriter writer, final ObjectTree tree,
final int
descLength, int depth, Document document, int
childCount ) throws IOException, DocumentException
{
final float[] outerWidth= { 10 + 22 + 100 + 16
} ;
final PdfPTable outerTable = getPDFTable(
outerWidth );
outerTable.setHorizontalAlignment(Element.ALIGN_LEFT);
final float[] width= { 10, 22, 100, 16 } ;
final PdfPTable table = getPDFTable( width );
table.setSplitRows( false );
table.setSplitLate( true );
table.setHorizontalAlignment(Element.ALIGN_LEFT);
table.setTotalWidth( 10 + 22 + 100 + 16 );
table.setLockedWidth( true );
final PdfPCell cellLine // cell with line
final PdfPCell cellIcon = // cell with
ObjectIcon;
final PdfPCell cellText = // cell with Object
Text;
final PdfPCell cellEndIcon = // cell with end
icon ;
table.addCell( cellLine );
table.addCell(cellIcon );
table.addCell( cellText );
table.addCell( cellEndIcon );
PdfPCell cell1 = new PdfPCell(table);
outerTable.addCell( cell1 );
if( node.getChildCount() > 0 )
{
depth++;
final Iterator it =
node.getChilds().iterator();
while(it.hasNext())
{
final String childNodeID =
(String)it.next();
//System.out.println( " creating for
nodeID " + childNodeID );
PdfPCell cell = new
PdfPCell(getPDFStructure(writer, tree, childNodeID,
descLength - signLength, depth, document, childCount)
);
outerTable.addCell( cell );
childCount++;
}
}
return outerTable;
}
private PdfPTable getSignTable( final Node node )
throws IOException, BadElementException
{
final float width[]= {10,20} ;
final PdfPTable table = new PdfPTable( width
);
table.getDefaultCell().setBackgroundColor(
Color.RED );
table.getDefaultCell().setBorder(Rectangle.NO_BORDER);
table.setSplitRows( false );
table.setSplitLate( true );
table.setExtendLastRow( true );
PdfEvents event = new PdfEvents();
table.setTableEvent(event);
table.setTotalWidth( signLength);
table.setLockedWidth(true);
final Image imgMinusStr = Image.getInstance (
new URL( Constants.PDF_NODE_SIGN) ));
final PdfPCell cellImgMinus = new PdfPCell(
imgMinusStr );
if ( Boolean.valueOf(
(String)node.getNodeProperty("DRAW") ).booleanValue())
{
final PdfEvents events = new PdfEvents();
cellImgMinus.setCellEvent( events );
cellImgMinus.setBackgroundColor(
Color.YELLOW );
cellImgMinus.setNoWrap(false);
}
PdfPCell eCell = getImageCell();
eCell.setBorder(1);
eCell.setBackgroundColor( Color.CYAN );
table.addCell( eCell );
table.addCell( cellImgMinus );
return table;
}
class PdfEvents implements
PdfPCellEvent,PdfPTableEvent
{
public void cellLayout(final PdfPCell cell,
final Rectangle position,final PdfContentByte[]
canvases)
{
final PdfContentByte cb =
canvases[PdfPTable.TEXTCANVAS];
cb.moveTo(position.left() + (
position.right() - position.left())/2 ,
position.bottom());
cb.lineTo(position.left() + (
position.right() - position.left())/2 ,
position.top() );
cb.stroke();
}
public void tableLayout( PdfPTable table,
float[][] width, float[] height, int headerRows, int
rowStart, PdfContentByte[] canvases )
{
float widths[] = width[0];
float x1 = widths[0];
float x2 = widths[widths.length - 1];
float y1 = height[0];
float y2 = height[height.length - 1];
PdfContentByte canvas =
canvases[PdfPTable.LINECANVAS];
canvas.setRGBColorStroke(0x00, 0x00,
0xFF);
canvas.rectangle(x1, y1, x2 - x1, y2 -
y1);
canvas.stroke();
canvas.resetRGBColorStroke();
}
}
--- Paulo Soares <[EMAIL PROTECTED]> wrote:
> The cell event is from the time when cells didn't
> split, it's possible
> that there are some inconsistencies. Post a small
> example with the
> problem.
>
> > -----Original Message-----
> > From: [EMAIL PROTECTED]
> >
> [mailto:[EMAIL PROTECTED]
> On
> > Behalf Of Amit Gijare
> > Sent: Wednesday, April 27, 2005 10:18 AM
> > To: [email protected]
> > Subject: [iText-questions] Cell events and page
> breaks,
> >
> > hi,
> >
> > are cell events influenced by page breaks, I
> have
> > an cell event which draws line in a cell, works
> fine
> > if its a single page, but not when it extends over
> > multiple pages. I tried changing the page layout
> from
> > A4 to A2 and it works fine, or is that splitting
> of
> > rows influences cell events.
> >
> > thanks,
> > amit.
> >
> > __________________________________________________
> > Do You Yahoo!?
> > Tired of spam? Yahoo! Mail has the best spam
> protection around
> > http://mail.yahoo.com
> >
> >
> >
>
-------------------------------------------------------
> > SF.Net email is sponsored by: Tell us your
> software development plans!
> > Take this survey and enter to win a one-year sub
> to SourceForge.net
> > Plus IDC's 2005 look-ahead and a copy of this
> survey
> > Click here to start!
> http://www.idcswdc.com/cgi-bin/survey?id=105hix
> > _______________________________________________
> > iText-questions mailing list
> > [email protected]
> >
>
https://lists.sourceforge.net/lists/listinfo/itext-questions
> >
>
>
>
-------------------------------------------------------
> SF.Net email is sponsored by: Tell us your software
> development plans!
> Take this survey and enter to win a one-year sub to
> SourceForge.net
> Plus IDC's 2005 look-ahead and a copy of this survey
> Click here to start!
> http://www.idcswdc.com/cgi-bin/survey?id5hix
> _______________________________________________
> iText-questions mailing list
> [email protected]
>
https://lists.sourceforge.net/lists/listinfo/itext-questions
>
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
-------------------------------------------------------
SF.Net email is sponsored by: Tell us your software development plans!
Take this survey and enter to win a one-year sub to SourceForge.net
Plus IDC's 2005 look-ahead and a copy of this survey
Click here to start! http://www.idcswdc.com/cgi-bin/survey?id=105hix
_______________________________________________
iText-questions mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/itext-questions