如何获取当前页码?
用例:使用itext5编写的应用程序需要使用itext7重写。我们的应用程序为客户的每月账单生成PDF文件。
pdf的结构:
>
创建文档:
PdfWriter writer = new PdfWriter(new FileOutputStream(filename));
PdfDocument pdfDocument = new PdfDocument(writer);
Document document = new Document(pdfDocument, PageSize.A4);
document.setMargins(82, 35, 0, 38);
buildBody(pdfData, document, writer);
pdfDocument.addEventHandler(PdfDocumentEvent.START_PAGE, new PdfStartPageHandler<>(pdfData, document, this));
pdfDocument.addEventHandler(PdfDocumentEvent.END_PAGE, new PdfEndPageHandler(document));
buildBodyContent(pdfData, document, writer);
document.close();
2.每个IEventHandler实例都有这种格式(矩形值除外):
public void handleEvent(Event event) {
document.add(lineSeparatorHeader);
document.add(paragraphInfo); //
document.add(lineSeparatorHeader);
}
ParumraphInfo-是一个段落(),它由一个包含两列的表组成
line分隔符标头-是一个线分隔符()
A.是每页都需要的页眉。B.是内容为的正文,可能占用不止一页。如果它占用了不止一页,新页面还必须包含页眉和页脚。C.是页脚
从评论中积累你的想法和一些建议,可以做到以下几点:
>
通过在Document
实例上设置边距来为页脚和页眉保留空间,确保不会将添加到Document
的内容放置在它们上。
像您已经做的那样添加页脚和页眉事件。
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(outFileName));
Document doc = new Document(pdfDoc);
int headerHeight = 100;
int footerHeight = 200;
float[] oldMargins = new float[] {doc.getTopMargin(), doc.getRightMargin(), doc.getBottomMargin(),
doc.getLeftMargin()};
doc.setMargins(doc.getTopMargin() + headerHeight, doc.getRightMargin(), doc.getBottomMargin() + footerHeight,
doc.getLeftMargin());
pdfDoc.addEventHandler(PdfDocumentEvent.START_PAGE, new IEventHandler() {
@Override
public void handleEvent(Event event) {
PdfDocumentEvent pdfDocumentEvent = (PdfDocumentEvent) event;
PdfPage page = pdfDocumentEvent.getPage();
Rectangle pageRectangle = page.getPageSize();
Rectangle headerArea = new Rectangle(oldMargins[3], pageRectangle.getTop() - oldMargins[0] - headerHeight,
pageRectangle.getWidth() - oldMargins[1] - oldMargins[3], headerHeight);
new Canvas(page, headerArea).add(
new Div()
.setHeight(headerArea.getHeight())
.setWidth(headerArea.getWidth())
.setBackgroundColor(ColorConstants.RED))
.close();
}
});
pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, new IEventHandler(){
@Override
public void handleEvent(Event event) {
PdfDocumentEvent pdfDocumentEvent = (PdfDocumentEvent) event;
PdfPage page = pdfDocumentEvent.getPage();
Rectangle pageRectangle = page.getPageSize();
Rectangle footerArea = new Rectangle(oldMargins[3], pageRectangle.getBottom() + oldMargins[2],
pageRectangle.getWidth() - oldMargins[1] - oldMargins[3], footerHeight);
new Canvas(page, footerArea).add(
new Div()
.setHeight(footerArea.getHeight())
.setWidth(footerArea.getWidth())
.setBackgroundColor(ColorConstants.YELLOW))
.close();
}
});
for (int i = 0; i < 100; i++) {
doc.add(new Paragraph("I'm body's paragraph #" + i));
}
doc.close();