我正在使用itext 2.1.7和java servlet创建一个PDF文件,我通过覆盖PdfpageEvents来插入页眉和页脚onEndPage
和onCloseDocument
我成功地能够放置Y的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)?我应该在哪里放置代码来实现这个目标?
答案 0 :(得分:2)
你可以:
答案 1 :(得分:2)
@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中,您只需更新两个模板,而不是更新模板。原始模板已存在于所有页面上,但新模板仅位于第一页上。
答案 2 :(得分:0)
我必须查找详细的代码,但是我会创建文档,并且一旦完成使用标记将该信息添加到第一页。
HTH
马里奥