iText HTML页眉和页脚尺寸

时间:2016-10-19 10:41:30

标签: itext

我正在查看示例:http://developers.itextpdf.com/question/how-add-html-headers-and-footers-page

但在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,因此我想推断尺寸,或使用其他不需要宽度和高度的代码

2 个答案:

答案 0 :(得分: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,您可能需要重新考虑如何添加内容。您可以先在模拟模式下添加内容,检查它是否合适,然后将其添加为真实内容。如果它不合适,您可以缩小内容(例如通过减小字体大小)并再次尝试直到内容适合。

答案 1 :(得分:0)

Bruno Lowagie回复:

我的目标是发现标题矩形的确切尺寸,因此我可以使用右上边距打印文档正文。

我不想要这个:enter image description here

但我在运行时之前并不知道html标题内容,因此我需要一种方法来获取标题矩形高度而不进行任何尝试。