[英]Show the number of pages in a pdf generated using itext only on the first page
我正在使用itext 2.1.7和java servlets创建一个PDF文件,我通过覆盖PdfpageEvents插入页眉和页脚onEndPage
和onCloseDocument
我成功地将页面/页脚中的pagev X放入
现在我想计算页面的成本(即打印成本)。 所以我需要找到不。 pdf中的页面(即假设打印页面成本为3我需要计算整个pdf的金额(3 * pdf页面总数))并且我还需要在第一个上显示成本页面,仅在同一pdf的第一页上 。
我尝试在onCloseDocument
打印它,但是在每个页面上都打印了成本
我怎么能做到这一点是我做错了什么?
这里是创建PDF文件的Servlet文件的代码
Document document = new Document(PageSize.A4, 20, 20, 20, 50);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(request.getRealPath("/") +"NoticeReports/"+filename+".pdf"));
MyPageEvents events = new MyPageEvents();
writer.setPageEvent(events);
document.open();
/*
* put some content in the pdf
*
*/
document.close();
我正在引用具有以下方法的MyPageEvents类:
int costofpage=3;
// we override the onEndPage method
public void onEndPage(PdfWriter writer, Document document) {
int pageN = writer.getPageNumber();
String text = "Page " + pageN + " of ";
float len = bf.getWidthPoint(text, 8);
cb.beginText();
cb.setFontAndSize(bf, 8);
cb.setTextMatrix(280, 20);
cb.showText(text);
cb.endText();
cb.moveTo(0, 30);
cb.lineTo(600, 30);
cb.moveTo(0, 820);
cb.lineTo(600, 820);
cb.stroke();
cb.addTemplate(template, 280 + len, 20);
}
// we override the onCloseDocument method
public void onCloseDocument(PdfWriter writer, Document document) {
template.beginText();
template.setFontAndSize(bf, 8);
template.showText(String.valueOf(writer.getPageNumber() - 1));
template.endText();
}
我该怎么做才能在pdf的第一页中获得(总页数* costofpage)? 我应该在哪里放置代码来实现这一目标?
您可以:
@Shamit那可行,但有一种更有效的方法来做同样的事情。
在SM09的OnEndPage中:
if (this is the first page) { create two templates, one for the "page x of y" and one for the pricing info add them to the page } else { create the one template as usual. add it to the page }
在OnCloseDocument中,您只需更新两个模板,而不是更新模板。 原始模板已存在于所有页面上,但新模板仅在第一页上。
我将不得不查找详细的代码,但我会创建文档,并且一旦完成使用标记将该信息添加到第一页。
心连心
马里奥
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.