在itext中,我的pdf中有一个表格。当表格填满页面时,条目会在下一页继续,但它与我的pdf页面标题重叠。我该如何避免?
答案 0 :(得分:0)
请查看TableHeader示例。
在此示例中,我创建了一个包含“Hello World”内容的文档:
public void createPdf(String filename) throws IOException, DocumentException {
TableHeader.HeaderTable event = new TableHeader.HeaderTable();
// step 1
Document document = new Document(PageSize.A4, 36, 36, 20 + event.getTableHeight(), 36);
// step 2
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename));
writer.setPageEvent(event);
// step 3
document.open();
// step 4
for (int i = 0; i < 50; i++)
document.add(new Paragraph("Hello World!"));
document.newPage();
document.add(new Paragraph("Hello World!"));
document.newPage();
document.add(new Paragraph("Hello World!"));
// step 5
document.close();
}
如您所见,我还定义了一个TableHeader
事件。我使用此event
作为页面事件,但在定义Document
时我也需要此事件。我使用以下值作为上边距:
20 + event.getTableHeight()
这是什么意思?我们来看看这个事件的实现:
public class HeaderTable extends PdfPageEventHelper {
protected PdfPTable table;
protected float tableHeight;
public HeaderTable() {
table = new PdfPTable(1);
table.setTotalWidth(523);
table.setLockedWidth(true);
table.addCell("Header row 1");
table.addCell("Header row 2");
table.addCell("Header row 3");
tableHeight = table.getTotalHeight();
}
public float getTableHeight() {
return tableHeight;
}
public void onEndPage(PdfWriter writer, Document document) {
table.writeSelectedRows(0, -1,
document.left(),
document.top() + ((document.topMargin() + tableHeight) / 2),
writer.getDirectContent());
}
}
创建活动时,会构建PdfPTable
。我将此table
存储为成员变量以及此表的高度:tableHeight
。
我在定义上边距时使用此tableHeight
,以便我100%确定该表适合边距。我添加了另外20个用户单元,因为我不希望表格粘在页面的顶部边框上:
20 + event.getTableHeight()
当我在onEndPage()
方法中添加表格时,我使用以下坐标:
x = document.left()
y = document.top() + ((document.topMargin() + tableHeight) / 2),
document.top()
的值是页面顶部减去上边距的值。我添加了一些额外的空间,更具体地说是上边距和桌面高度之差除以2,加到了桌面高度:
tableHeight + ((document.topMargin() - tableHeight) / 2)
此公式可简化为:
((document.topMargin() + tableHeight) / 2)
正如你所看到的,所有这些都是简单的数学,这是你在小学教的数学。
生成的PDF如下所示:
这证明你的指控“它不起作用”是错误的。请理解,在人们详细解释如何做某事后,说“它不起作用”是不礼貌的。通过显示它确实起作用,阅读此内容的人可以将您的指控解释为谎言(这对您的业力不利)。