我正在查看示例: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,因此我想推断尺寸,或使用其他不需要宽度和高度的代码
答案 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);
如果fits
为true
,则不会丢失任何内容。如果fits
为false
,您可能需要重新考虑如何添加内容。您可以先在模拟模式下添加内容,检查它是否合适,然后将其添加为真实内容。如果它不合适,您可以缩小内容(例如通过减小字体大小)并再次尝试直到内容适合。
答案 1 :(得分:0)