我是iText的新手,目前正在用java做一个小项目。
我想要打印一个表'title'然后打印表本身。发生的事情是,有时数据会导致表格标题显示在页面底部,而表格会显示在下一页面上。
我希望将表格标题和表格保持在一起,即如果标题后没有空间来启动表格,则将两者都移到下一页。
我目前通过创建段落对象添加标题,然后在其后添加PDFTable对象。我已经在下面列出了一些示例代码,基本上代表了我现在正在做的事情:
// Add a table title
Paragraph tableTitle = new Paragraph();
tableTitle .setAlignment(1);
tableTitle .add("This is my table title");
tableTitle .setSpacingAfter(12);
try {
document.add(tableTitle );
} catch (DocumentException e) {
throw new ReportingException("Couldn't add section title", e);
}
// Now add the table
PDFTable currentTable = new PdfPTable(3);
// add the headers and data to the table etc...
:
:
任何指针都会受到赞赏。
由于
答案 0 :(得分:2)
由于您是iText的新手,最好从iText 7开始,而不是使用iText 5.我知道您使用的是iText 5,因为我看到您使用的是PdfPTable
。
iText 7与以前的版本不兼容。 iText 5从头开始重写,以便一劳永逸地解决许多已知的技术问题。由于您是iText的新手,这对您来说无关紧要:您没有任何需要从第5版迁移到7版的旧代码。
通过阅读iText 7: Building Blocks教程,您可以了解有关使用iText 7的更多信息。在Chapter 4中,您将发现setKeepWithNext()
方法。在本教程中,此方法用于将章节的标题保留在该章的第一段的同一页面上:
BufferedReader br = new BufferedReader(new FileReader(SRC));
String line;
Div div = new Div();
while ((line = br.readLine()) != null) {
document.add(new Paragraph(line)
.setFont(bold).setFontSize(12)
.setMarginBottom(0)
.setKeepWithNext(true));
div = new Div()
.setFont(font).setFontSize(11)
.setMarginBottom(18);
while ((line = br.readLine()) != null) {
div.add(
new Paragraph(line)
.setMarginBottom(0)
.setFirstLineIndent(36)
);
if (line.isEmpty()) {
document.add(div);
break;
}
}
}
document.add(div);
如果您坚持使用iText 5,则可以使用解决方法,但这会使您的代码更加复杂。变通办法可能涉及使用ColumnText
(但代码中的行数会显着增加),将表标题添加为标题行(但如果表分布在不同的页面上,则会重复标题),换行另一个“保持在一起”的对象中的标题和表格(但这并不总是有效,具体取决于组合对象中存储了多少数据)。
答案 1 :(得分:0)
您必须创建该章,但不必将其直接添加到文档中。这样就可以控制分页符。查看代码:
document.add(chapter.getTitle());
for(Element e : chapter) {
document.add(e);
}