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

Reply via email to