Who knows what's going on in fitsPage. Only setTotalWidth is guaranteed to
work, what you're doing is taking advantage of a side effect.
Best Regards,
Paulo Soares
----- Original Message -----
From: "Rolando Cuevas" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Sunday, July 27, 2003 16:45
Subject: Re: [iText-questions] tables within a header
>
>
> >From: "Paulo Soares" <[EMAIL PROTECTED]>
> >To: "Rolando Cuevas"
> ><[EMAIL PROTECTED]>,<[EMAIL PROTECTED]>
> >Subject: Re: [iText-questions] tables within a header
> >Date: Wed, 23 Jul 2003 21:52:06 +0100
> >
> >You don't need (and shouldn't use) fitsPage to set the tabe width. Use
> >table.setTotalWidth(document.right() - document.left()) and place the
> table
> >at position document.left().
>
> Table width is working right.
> The problem is with table height value. I use tableheight to set
> document
> top margin. This is done to avoid header content overlapping with
> document
> content.
> Sometimes the execution sequence
> writer.fitspage(oTable); oTable.getTotalHeight() gives one value
> and
> document.add(oTable); oTable.getTotalHeight() gives another value
>
> The value that appears to be right is the value obtained after
> document.add(). I previously posted an example where the two values are
>
> different.
>
> If you had any suggestion on how to obtain table height I'd really
> appreciate it.
>
> Thanks,
> Rolando.
>
> >
> >----- Original Message -----
> >From: "Rolando Cuevas" <[EMAIL PROTECTED]>
> >To: <[EMAIL PROTECTED]>
> >Sent: Wednesday, July 23, 2003 18:48
> >Subject: Re: [iText-questions] tables within a header
> >
> >
> > >
> > >
> > > >From: Yuan Chang <[EMAIL PROTECTED]>
> > > >Reply-To: [EMAIL PROTECTED]
> > > >To: [EMAIL PROTECTED]
> > > >Subject: [iText-questions] tables within a header
> > > >Date: Wed, 23 Jul 2003 11:41:32 +0100
> > > >
> > > >Could anyone give me an example of how i could have a table within
> the
> > > >header on my pdf page?
> > > >
> > >
> > > Included in this mail is sample code for using pdfptables in
> headers.
> > > The
> > > sample prints a table header having three columns. First with
> company
> > > name,
> > > middle with date and right with pag number. It could be used as an
> > > starting
> > > point.
> > > Classes should probably be better organized, but this is only an
> > > example.
> > >
> > > The code sets document margins according to the table, beware that
> this
> > > is
> > > not always accurate. getTotalHeight() does not always returns the
> same
> > > value
> > > after document.add() and writer.fitsPage().
> > > at the eventhelper and pagenumchunk are in the same class. By the
> way
> > > does
> > > anyone knows a way to get the height of a pdfptable ? The way I use
> is
> > > first
> > > writer.fitsPage(oTable) and then table.getTotalHeight(). This has to
> be
> > > before adding the table to the document, since its height determines
> doc
> > >
> > > margins.
> > >
> > > If you want to use the pagenumchunk do not comment out the line
> > > this.setGenericTag("test")
> > > Even though the generic tag is not used in the code, without it the
> > > printed
> > > page number is always zero.
> > > The itext version I use is 1.00.
> > >
> > > Hope this helps,
> > > Rolando
> > >
> > > package prueba;
> > >
> > > import java.awt.Color;
> > > import java.io.*;
> > >
> > > import com.lowagie.text.*;
> > > import com.lowagie.text.pdf.*;
> > >
> > > public class headerWithTable {
> > >
> > > //----------------------------------------------
> > > public class PageNumChunk extends Chunk {
> > > private PdfWriter m_oPdfWriter;
> > > /** Creates a new instance of PageNumChunk */
> > > public PageNumChunk(PdfWriter oPdfWriter ) {
> > > m_oPdfWriter = oPdfWriter;
> > > this.content = new StringBuffer("");
> > > this.font = new Font();
> > > this.setGenericTag("test"); // has to be set otherwise page
> > > number
> > > is allways zero
> > > }
> > >
> > > /**
> > > * Returns the content of this <CODE>Chunk</CODE>.
> > > *
> > > * @return a <CODE>String</CODE>
> > > */
> > >
> > > public String content() {
> > > content.delete(0, content.length());
> > > content.append(m_oPdfWriter.getPageNumber());
> > >
> > > System.out.println(" \n------------>
> > > m_oPdfWriter.getPageNumber()
> > > "+m_oPdfWriter.getPageNumber());
> > > System.out.println(" ------------> Chunk pageNum
> > > "+content.toString()+"\n");
> > > return content.toString();
> > > }
> > >
> > >
> > > }
> > >
> > > //-----------------------------------------------
> > > public class TPdfEvent extends PdfPageEventHelper {
> > > PdfPTable m_oHeader=null;
> > >
> > > float m_fLeftX;
> > > float m_fRightX;
> > >
> > > float m_fHeaderTop;
> > > float m_fHeaderX;
> > >
> > > boolean m_bActive=false;
> > > boolean m_bMarginsSet = false;
> > >
> > > /** Creates a new instance of TPdfEvent */
> > > public TPdfEvent() {
> > > }
> > >
> > > public void setActive(boolean bActive) {
> > >
> > > m_bActive= bActive;
> > > System.out.println(" m_bActive = "+
> > > String.valueOf(m_bActive));
> > >
> > > }
> > >
> > >
> > > public void setLeftRightXCoords(float fLeftX, float fRightX)
> {
> > > m_fLeftX = fLeftX;
> > > m_fRightX = fRightX;
> > > m_bMarginsSet = true;
> > >
> > > }
> > > public void setHeader(PdfPTable oHeader, float fHeaderTop) {
> > > if(m_bMarginsSet) {
> > > System.out.println(" setHeader() begin");
> > > m_oHeader = oHeader;
> > > m_fHeaderTop = fHeaderTop;
> > > System.out.println(" m_fHeaderTop =
> > > "+m_fHeaderTop);
> > >
> > > float fHeaderWidth = (m_fRightX - m_fLeftX) *
> > > m_oHeader.getWidthPercentage() / 100;
> > > m_fHeaderX = 0;
> > > switch (m_oHeader.getHorizontalAlignment()) {
> > > case Element.ALIGN_LEFT:
> > > m_fHeaderX= m_fLeftX;
> > > break;
> > > case Element.ALIGN_RIGHT:
> > > m_fHeaderX= m_fRightX - fHeaderWidth;
> > > break;
> > > default:
> > > m_fHeaderX= (m_fRightX + m_fLeftX -
> > > fHeaderWidth) /
> > > 2;
> > > }
> > > System.out.println(" orig width % =
> > > "+m_oHeader.getWidthPercentage());
> > > System.out.println(" right margin = "+m_fRightX);
> > > System.out.println(" left margin = "+m_fLeftX);
> > > System.out.println(" fHeaderWidth =
> "+fHeaderWidth);
> > > System.out.println(" m_fHeaderX =
> "+m_fHeaderX);
> > >
> > > m_oHeader.setTotalWidth(fHeaderWidth);
> > > System.out.println(" setHeader() end");
> > > }
> > > else {
> > > throw new RuntimeException("Prior to setHeader()
> > > setMargins() has to be called.");
> > > }
> > > }
> > >
> > >
> > >
> > > public void onStartPage(PdfWriter oWriter, Document
> oDocument) {
> > > System.out.println(" Call to Event onStartPage. Page
> num
> > > =
> > > "+ oDocument.getPageNumber());
> > > if(m_bActive && m_oHeader!=null) {
> > > oWriter.fitsPage(m_oHeader);
> > > System.out.println(" ---------- onStartPage
> > > -------Header
> > > total height = "+m_oHeader.getTotalHeight());
> > > m_oHeader.writeSelectedRows(0, -1, m_fHeaderX,
> > > m_fHeaderTop,
> > > oWriter.getDirectContent());
> > > }
> > >
> > > }
> > >
> > >
> > > }
> > > //-----------------------------------------------
> > > //
> > > //-----------------------------------------------
> > > static Phrase m_oStEmptyPhrase=new Phrase(" ");
> > > static Font stFontTitle =
> > > FontFactory.getFont(FontFactory.HELVETICA,
> > > FontFactory.defaultEncoding, FontFactory.defaultEmbedding,
> > > 14.f, Font.BOLD, java.awt.Color.black);
> > > static Font stFontHeading =
> > > FontFactory.getFont(FontFactory.HELVETICA,
> > > FontFactory.defaultEncoding, FontFactory.defaultEmbedding,
> > > 10.f, Font.BOLD, java.awt.Color.black);
> > > static Font stFontBold =
> > > FontFactory.getFont(FontFactory.HELVETICA,
> > > FontFactory.defaultEncoding, FontFactory.defaultEmbedding,
> > > Font.UNDEFINED, Font.BOLD, java.awt.Color.black);
> > > static Font stFontOverview =
> > > FontFactory.getFont(FontFactory.HELVETICA,
> > > FontFactory.defaultEncoding, FontFactory.defaultEmbedding,
> > > 8.f, Font.BOLD, java.awt.Color.black);
> > >
> > > PdfPTable m_oHeader;
> > > PdfWriter m_oPdfWriter;
> > > Rectangle m_oPageRectangle;
> > > float m_fHeaderBegin=72f, m_fMarginTop=36f,
> m_fMarginBottom=36f,
> > >
> > > m_fMarginLeft=36f, m_fMarginRight=36f;
> > >
> > >
> > > public headerWithTable() {
> > > m_oPageRectangle = PageSize.A4;
> > > // m_oPageRectangle = m_oPageRectangle.rotate(); //
> landscape
> > > }
> > > public Rectangle getPageRectangle(){
> > > return m_oPageRectangle;
> > > }
> > > public void setWriter(PdfWriter oWriter){
> > > m_oPdfWriter = oWriter;
> > > }
> > >
> > >
> > > static PdfPCell getEmptyCell(int iColSpan, float fBorderWidth,
> float
> > >
> > > fCellPadding, Color borderColor, int iBorderType, Color backColor) {
> > > PdfPCell oCell= new PdfPCell(m_oStEmptyPhrase);
> > > oCell.setColspan(iColSpan);
> > > oCell.setPadding(fCellPadding);
> > > if(backColor != null){
> > > oCell.setBackgroundColor(backColor);
> > > }
> > > oCell.setBorderWidth(fBorderWidth);
> > > if(fBorderWidth>0) {
> > > oCell.setBorder(iBorderType);
> > > if(borderColor !=null){
> > > oCell.setBorderColor(borderColor);
> > > }
> > >
> > > }
> > > oCell.setHorizontalAlignment(Element.ALIGN_LEFT);
> > > oCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
> > > return oCell;
> > >
> > > }
> > >
> > > void addContent2Phrase(Phrase oPhrase, String sContent, Font
> oFont){
> > > Chunk oChunk = new Chunk(sContent);
> > > if(oFont != null){
> > > oChunk.setFont(oFont);
> > > }
> > > oPhrase.add(oChunk);
> > > }
> > >
> > > void addPageNumChunk(Phrase oPhrase, PdfWriter oWriter, Font
> oFont){
> > > PageNumChunk oPageNum= new PageNumChunk(oWriter);
> > > if(oFont != null){
> > > oPageNum.setFont(oFont);
> > > }
> > > oPhrase.add(oPageNum);
> > > }
> > >
> > > void setRow1(){
> > > PdfPCell oCell = getEmptyCell(3, 0.f, 1.f, null,
> Rectangle.BOX,
> > >
> > > null);
> > > Phrase oPhrase = new Phrase();
> > > addContent2Phrase(oPhrase, "ACM Inc", stFontTitle);
> > > oCell.setPhrase(oPhrase);
> > > m_oHeader.addCell(oCell);
> > >
> > > }
> > > void setRow2(){
> > > PdfPCell oCell = getEmptyCell(1, 0.f, 1.f, null,
> > > Rectangle.NO_BORDER, null);
> > > Phrase oPhrase = new Phrase();
> > > addContent2Phrase(oPhrase, "Summary ", stFontHeading);
> > > oCell.setHorizontalAlignment(Element.ALIGN_LEFT);
> > > oCell.setPhrase(oPhrase);
> > > m_oHeader.addCell(oCell);
> > >
> > > oCell = getEmptyCell(1, 0.f, 1.f, null,
> Rectangle.NO_BORDER,
> > > null);
> > > oPhrase = new Phrase();
> > > addContent2Phrase(oPhrase, "23/07/2003", stFontHeading);
> > > oCell.setHorizontalAlignment(Element.ALIGN_CENTER);
> > > oCell.setPhrase(oPhrase);
> > > m_oHeader.addCell(oCell);
> > >
> > > oCell = getEmptyCell(1, 0.f, 1.f, null,
> Rectangle.NO_BORDER,
> > > null);
> > > oPhrase = new Phrase();
> > > addContent2Phrase(oPhrase, "Page ", stFontHeading);
> > > addPageNumChunk(oPhrase, m_oPdfWriter , stFontHeading);
> > > oCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
> > > oCell.setPhrase(oPhrase);
> > > m_oHeader.addCell(oCell);
> > >
> > >
> > > }
> > > void setRow3(){
> > > PdfPCell oCell = getEmptyCell(3, 0.5f, 1.f,
> > > java.awt.Color.black,
> > > Rectangle.TOP, null);
> > > Phrase oPhrase = new Phrase();
> > > //addContent2Phrase(oPhrase, "Test line", stFontOverview);
> > > oCell.setPhrase(oPhrase);
> > > m_oHeader.addCell(oCell);
> > > }
> > >
> > >
> > > public PdfPTable getRandomContentTable(){
> > > PdfPTable oTable=new PdfPTable(1);
> > > oTable.setWidthPercentage(100);
> > >
> > > for( int i=0; i<10; i++){
> > > PdfPCell oCell = getEmptyCell(1, 0.5f, 1.f,
> > > java.awt.Color.black,
> > > Rectangle.BOX, null);
> > > Phrase oPhrase = new Phrase();
> > > addContent2Phrase(oPhrase, String.valueOf(Math.random()),
> > > stFontOverview);
> > > oCell.setPhrase(oPhrase);
> > > oTable.addCell(oCell);
> > > }
> > > System.out.println(" m_oPdfWriter.getPageNumber()");
> > >
> > > return oTable;
> > > }
> > > public PdfPTable getLine(){
> > > PdfPTable oTable=new PdfPTable(1);
> > > oTable.setWidthPercentage(100);
> > > PdfPCell oCell = getEmptyCell(1, 1.5f, 1.f,
> java.awt.Color.red,
> > >
> > > Rectangle.TOP, null);
> > > Phrase oPhrase = new Phrase();
> > > addContent2Phrase(oPhrase, "Test line", stFontOverview);
> > > oCell.setPhrase(oPhrase);
> > >
> > > oTable.addCell(oCell);
> > > return oTable;
> > > }
> > >
> > > public PdfPTable getTable() throws Exception{
> > > float aRelColWidths[] = {25f, 25f, 25f};
> > > m_oHeader = new PdfPTable(3);
> > > m_oHeader.setWidthPercentage(100);
> > > m_oHeader.setWidths(aRelColWidths);
> > > setRow1();
> > > setRow2();
> > > setRow3();
> > > // setRow4();
> > > return m_oHeader;
> > > }
> > > public void setHeaderWithPageEvent(PdfWriter oWriter, PdfPTable
> > > oHeader){
> > >
> > > TPdfEvent oPdfEvent = new TPdfEvent();
> > > oPdfEvent.setLeftRightXCoords( m_fMarginLeft,
> > > m_oPageRectangle.right(m_fMarginRight));
> > > if( oHeader!= null)
> > > oPdfEvent.setHeader(oHeader, m_fHeaderBegin);
> > > oPdfEvent.setActive(true);
> > > oWriter.setPageEvent(oPdfEvent);
> > > }
> > >
> > >
> > > private void setDocumentMarginsDynHeight(PdfWriter oWriter,
> Document
> > >
> > > oDocument ) {
> > > System.out.println(" setDocumentMargins() begin");
> > > System.out.println(" \n All measures are in points.");
> > > // m_oHeader to be used as header
> > > //
> > >
> > > float fTop=0f, fPageTop, fPageBottom, fHeaderSpaceAfter;
> > >
> > > fPageTop = m_oPageRectangle.top();
> > > fPageBottom = m_oPageRectangle.bottom();
> > > fHeaderSpaceAfter = 36f;
> > >
> > >
> > > System.out.println(" Page Y coordinates:\n\t top =
> > > "+fPageTop+"\t
> > > bottom = "+fPageBottom);
> > > System.out.println(" Original Margins:\n\t top =
> > > "+m_fMarginTop+"\t
> > > bottom = "+m_fMarginBottom);
> > > System.out.println(" \t left = "+m_fMarginLeft+"\t right =
> > > "+m_fMarginRight);
> > > System.out.println(" \t original pageHeight = "+(((fPageTop
> > > -m_fMarginTop) -(fPageBottom +m_fMarginBottom))));
> > >
> > >
> > > if(m_oHeader != null) // getting new top margin
> > > {
> > > oWriter.fitsPage(m_oHeader);
> > > float fHeaderHeight = m_oHeader.getTotalHeight();
> > > System.out.println(" \t dyn header height =
> > > "+fHeaderHeight);
> > > m_fHeaderBegin = fPageTop - m_fMarginTop ;
> > >
> > > fTop = m_fMarginTop + fHeaderHeight +
> > > fHeaderSpaceAfter; // new top margin
> > > System.out.println(" Has Header\n\t HeaderHeight=
> > > "+fHeaderHeight);
> > > System.out.println(" \t HeaderSpace =
> "+fHeaderSpaceAfter);
> > > System.out.println(" \t NEW top = "+fTop);
> > > System.out.println(" \t beginY= "+m_fHeaderBegin);
> > > }
> > >
> > >
> > > // if new pageheight less than Min, throw a runtime
> exception
> > > oDocument.setMargins(m_fMarginLeft, m_fMarginRight, fTop,
> > > m_fMarginBottom);
> > > System.out.println(" New Margins:\n\t top = "+fTop+"\t
> bottom =
> > >
> > > "+m_fMarginBottom);
> > > System.out.println(" \t left = "+m_fMarginLeft+"\t right =
> > > "+m_fMarginRight);
> > > System.out.println(" \t New pageHeight = "+((fPageTop
> -fTop) -
> > > (fPageBottom +m_fMarginBottom)));
> > >
> > >
> > > System.out.println(" setDocumentMargins() end");
> > > }
> > >
> > > public static void main(String[] args) {
> > > headerWithTable oHeightTest= new headerWithTable();
> > > headerWithTable oContent= new headerWithTable();
> > >
> > > Document document = new
> > > Document(oHeightTest.getPageRectangle()); //
> > > A4 landscape
> > >
> > > try {
> > > PdfWriter writer = PdfWriter.getInstance(document, new
> > > FileOutputStream("c://table_height_test.pdf"));
> > > oHeightTest.setWriter(writer);
> > >
> > > PdfPTable table = oHeightTest.getRandomContentTable();
> > > PdfPTable header = oHeightTest.getTable();
> > >
> > >
> > > oHeightTest.setDocumentMarginsDynHeight(writer,
> document);
> > > oHeightTest.setHeaderWithPageEvent(writer,header);
> > >
> > > System.out.println(" main -------------------------
> total
> > > height = " + table.getTotalHeight());
> > > writer.fitsPage(table);
> > > System.out.println(" after writer.fitspage() - total
> height
> > > = "
> > > + table.getTotalHeight());
> > > document.open();
> > >
> > > document.add(table);
> > > document.newPage();
> > >
> > > table = oHeightTest.getRandomContentTable();
> > > document.add(table);
> > > document.close();
> > > System.out.println(" after doc.add() ---------- total
> height
> > > = "
> > > + table.getTotalHeight());
> > > System.out.println("Finished.");
> > > }
> > > catch (Exception de) {
> > > de.printStackTrace();
> > > }
> > > }
> > >
> > >
> > >
> > > }
> > >
> > > _________________________________________________________________
> > > Charla con tus amigos en l�nea mediante MSN Messenger:
> > > http://messenger.yupimsn.com/
> > >
> > >
> > >
> > > -------------------------------------------------------
> > > This SF.Net email sponsored by: Free pre-built ASP.NET sites
> including
> > > Data Reports, E-commerce, Portals, and Forums are available now.
> > > Download today and enter to win an XBOX or Visual Studio .NET.
> > >
> http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01
> > > /01
> > > _______________________________________________
> > > iText-questions mailing list
> > > [EMAIL PROTECTED]
> > > https://lists.sourceforge.net/lists/listinfo/itext-questions
> > >
> >
> >
> >
> >-------------------------------------------------------
> >This SF.Net email sponsored by: Free pre-built ASP.NET sites including
> >Data Reports, E-commerce, Portals, and Forums are available now.
> >Download today and enter to win an XBOX or Visual Studio .NET.
> >http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_0
> 1/01
> >_______________________________________________
> >iText-questions mailing list
> >[EMAIL PROTECTED]
> >https://lists.sourceforge.net/lists/listinfo/itext-questions
>
> _________________________________________________________________
> Charla con tus amigos en l�nea mediante MSN Messenger:
> http://messenger.yupimsn.com/
>
>
>
> -------------------------------------------------------
> This SF.Net email sponsored by: Free pre-built ASP.NET sites including
> Data Reports, E-commerce, Portals, and Forums are available now.
> Download today and enter to win an XBOX or Visual Studio .NET.
> http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01
> /01
> _______________________________________________
> iText-questions mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/itext-questions
>
-------------------------------------------------------
This SF.Net email sponsored by: Free pre-built ASP.NET sites including
Data Reports, E-commerce, Portals, and Forums are available now.
Download today and enter to win an XBOX or Visual Studio .NET.
http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01/01
_______________________________________________
iText-questions mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/itext-questions