我要在页面顶部为所有页面添加一个矩形,但是我不希望在最后一页上显示矩形。这是我的代码:
@Override
public void onStartPage(PdfWriter writer, Document output) {
Font bold = new Font(Font.FontFamily.HELVETICA, 16, Font.BOLD);
bold.setStyle(Font.UNDERLINE);
bold.setColor(new BaseColor(171, 75, 15));
PdfContentByte cb = writer.getDirectContent();
// Bottom left coordinates x & y, followed by width, height and radius of corners.
cb.roundRectangle(100f, 1180f, 400f, 100f, 5f);//I dont want this on the ;ast page
cb.stroke();
try {
output.add(new Paragraph("STATEMENT OF ACCOUNT", bold));
output.add(new Paragraph(new Phrase(new Chunk(" "))));
output.add(new Paragraph(new Phrase(new Chunk(" "))));
output.add(new Paragraph(new Phrase(new Chunk(" "))));
output.add(new Paragraph(new Phrase(new Chunk(" "))));
Image logo = Image.getInstance(imagepath);
logo.setAbsolutePosition(780, 1230);
logo.scaleAbsolute(200, 180);
writer.getDirectContent().addImage(logo);
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
是否可以从文档的最后一页跳过或删除此矩形?
答案 0 :(得分:1)
首先,iText开发人员经常强调,在onStartPage
中,不得向PDF添加内容。原因是在某些情况下会创建未使用的页面,并为它们调用onStartPage
,然后将其删除。不过,如果您在onStartPage
中向他们添加内容,它们不会被删除而是保留在您的文档中。
因此,请始终使用onEndPage
向页面添加任何内容。
在您的用例中,还有另一个使用onEndPage
的理由:通常只有当最后一部分内容添加到文档中时,才可以清楚地看到给定页面是最后一页。通常发生在页面调用onStartPage
之后但onEndPage
之前。
因此,在将常规页面内容的最后一部分添加到文档中之后,您只需在页面事件侦听器中设置一个标志,即当前页面就是最终文档页面。现在,以下onEndPage
调用知道它处理了最后一页,并且可以不同地添加内容。
所以页面事件监听器看起来像这样
class MyPageEventListener extends PdfPageEventHelper {
public boolean lastPage = false;
@Override
public void onEndPage(PdfWriter writer, Document output) {
if (!lastPage) {
[add extra content for page before the last one]
} else {
[add extra content for last page]
}
}
...
}
并像这样使用
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, TARGET);
MyPageEventListener pageEventListener = new MyPageEventListener();
writer.setPageEvent(pageEventListener);
document.open();
[add all regular content to the document]
pageEventListener.lastPage = true;
document.close();