2011-03-31 50 views
1

我使用itext 2.1.7和java servlets创建PDF文件,我通过覆盖PdfpageEvents来插入页眉和页脚onEndPageonCloseDocument我成功能够将页面X的Y放在页眉/页脚中显示只在第一页使用itext生成的PDF页面数

现在我想计算页面的成本(即打印成本)。所以为此我需要找到不。的页面(即假设打印一页的费用为3我需要计算整个pdf的金额(3 *页面总数pdf)),捕获量为我还需要显示第一页,只在同一pdf的第一页

我试着打印出来的onCloseDocument但印在每一个网页

我怎样才能得到这个工作的成本是有什么,我做错了什么?创建PDF文件

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类的Servlet文件的

下面的代码:

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(); 
} 

我应该怎么做才能(总没有页* costofpage)在pdf的第一页?我应该在哪里放置代码来实现这一目标?

回答

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,您只需更新这两个模板,而不是一个。原始模板已经出现在所有页面上,但新模板只会出现在第一页上。

+0

是啊!那肯定比Shamit的答案要高效得多!我真的很期待你在这篇文章上的回复(标记为'itext')......反正迟到比从未...多谢...... – 2011-04-02 05:06:08

0

我将不得不查找详细的代码,但我会创建该文档,并且一旦完成使用盖章将该信息添加到第一页。

心连心

马里奥

2

您可以:

  1. 创建PDF内存(上ByteArrayOutputStream创建)
  2. 过程它添加页眉/页脚
  3. 创建带有水印的新PDF内存
  4. 再次处理PDF以合并水印+数字第一页上的页面。 PDFStamper应该提供帮助。
相关问题