2016-10-19 89 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。