2016-10-19 153 views
0

我看樣品:http://developers.itextpdf.com/question/how-add-html-headers-and-footers-pageiText的HTML頁眉和頁腳尺寸

但在OnEndPage方法中

@Override 
    public void onEndPage(PdfWriter writer, Document document) { 
     try { 
      ColumnText ct = new ColumnText(writer.getDirectContent()); 
      ct.setSimpleColumn(new Rectangle(36, 832, 559, 810)); 
      for (Element e : header) { 
       ct.addElement(e); 
      } 
      ct.go(); 
      ct.setSimpleColumn(new Rectangle(36, 10, 559, 32)); 
      for (Element e : footer) { 
       ct.addElement(e); 
      } 
      ct.go(); 
     } catch (DocumentException de) { 
      throw new ExceptionConverter(de); 
     } 
    } 

我們必須知道ractangle的高度和寬度,其中頭元素會。

在我的情況下,在編譯時不知該HTML將被使用,所以我想演繹的尺寸,或使用其他代碼不需要寬度和heght

+0

使用您的'PdfPageEventHelper'實現來計算或傳遞尺寸? –

回答

1

你有一個Document對象在onEndPage()方法的參數中。你可以得到的文件像這樣的頁面大小:

Rectangle pageSize = document.getPageSize(); 

您也可以要求在文檔中的邊距:

float left = document.leftMargin(); 
float right = document.rightMargin(); 
float top = document.topMargin(); 
float bottom = document.bottomMargin(); 

您可以使用這些值來定義頁眉和頁腳的可用空間。

E.g.標題:

Rectangle rect1 = new Rectangle(
    pageSize.left() + left, pageSize.top() - top, 
    pageSize.right() - right, pageSize.top()); 

或者頁腳:

Rectangle rect2 = new Rectangle(
    pageSize.left() + left, pageSize.bottom(), 
    pageSize.right() - right, pageSize.bottom() + bottom); 

警告:有你的矩形將是太小了,你要添加的內容的機會。在這種情況下,一些內容將會丟失。你會知道什麼時候出現這種情況通過查看go()方法的返回值:

int status = ct.go(); 
boolean fits = !ColumnText.hasMoreText(status); 

如果fitstrue任何內容丟失。如果fitsfalse,則可能需要重新考慮如何添加內容。您可以先在模擬模式下添加內容,檢查它是否合適,然後將其添加爲真實內容。如果不適合,可以縮小內容(例如縮小字體大小),然後重試,直到內容適合。

0

在在布魯諾Lowagie答覆:

我的目標是發現標題矩形的確切尺寸,所以可以與合適的上邊距打印文檔的正文。

我不希望這樣的:enter image description here

,但我不知道在運行之前的HTML頭內容,所以我需要一種方式來獲得頭矩形高度沒有做任何attemps。