iText系列(四) iText加入页码

如果不需要显示总页数(像X of Y , 当前是第X页,共Y页之类的),下面的方法就够.

在Document.open()之前加上

Java代码  

收藏代码

  1. HeaderFooter footer = new HeaderFooter(new Phrase("页码:",yourFont, true);  
  2. footer.setBorder(Rectangle.NO_BORDER);  
  3. document.setFooter(footer);  


    如果要加上总页数,就麻烦多了-___-.

    您需要使用PdfTemplate来保存总页数信息,需要使用PdfPageEvent来在一些类型的事件响应代码里做些处理.

    获得总页数这样的工作随便一想好像很容易,但是在iText流水式输出内容到pdf文档中的每一页的时候,它怎么知道一共有多少页?好吧,是在它把内容全部输出完的时候,它知道自己弄了多少页了,但这时候又怎么回过头来给每个页面重新加上页码?
   
    说实话,到现在我也只是根据官方例子成功得到了想要的效果而并不太了解相关的工作原理.

    我们可以通过实现PdfPageEvent接口或者扩展PdfPageEventHelper类,使我们可以在文档开始、每页开始、每页结束、文档结束等地方做些工作以达到插入页码的目的.

   

Java代码  

收藏代码

  1. public class PDFMaker extends PdfPageEventHelper {  
  2.   
  3.       
  4.       
  5.     public PdfTemplate tpl;  
  6.       
  7.     public BaseFont helv;  
  8.       
  9.     public void make(Document doc) throws Exception  
  10.     {  
  11.           
  12.         pdf = new com.lowagie.text.Document(pagesize,10,10,10,10);  
  13.         PdfWriter writer = PdfWriter.getInstance(pdf,pdfout);  
  14.           
  15.         //设置页页事件监听器  
  16.         Font pageNumFont = new Font(bf_chn,9,Font.NORMAL);  
  17.         writer.setPageEvent(this);  
  18.   
  19.         pdf.open();  
  20.           
  21.         //正常的PDF写入操作代码  
  22.           
  23.         pdf.close();  
  24.       
  25.     }  
  26.   
  27.     @Override  
  28.     public void onCloseDocument(PdfWriter writer, com.lowagie.text.Document arg1) {  
  29.         // TODO Auto-generated method stub  
  30.            System.out.println("OCD");  
  31.            tpl.beginText();  
  32.            tpl.setFontAndSize(helv, 12);  
  33.            tpl.setTextMatrix(0, 0);  
  34.            tpl.showText("" + (writer.getPageNumber() - 1));  
  35.            tpl.endText();  
  36.     }  
  37.   
  38.   
  39.       
  40.     @Override  
  41.     public void onEndPage(PdfWriter writer, com.lowagie.text.Document document) {  
  42.         // TODO Auto-generated method stub  
  43.         System.out.println("OEP");  
  44.         PdfContentByte cb = writer.getDirectContent();  
  45.         cb.saveState();  
  46.           
  47.         String text = "Page " + writer.getPageNumber() + " of ";  
  48.         float textSize = helv.getWidthPoint(text, 9);  
  49.         float textBase = document.bottom();  
  50.         cb.beginText();  
  51.         cb.setFontAndSize(helv, 9);  
  52.         // for odd pagenumbers, show t  
  53.   
  54.         cb.setTextMatrix(document.left(), textBase);  
  55.         cb.showText(text);  
  56.         cb.endText();  
  57.         cb.addTemplate(tpl, document.left() + textSize, textBase);  
  58.         cb.saveState();  
  59.     }  
  60.   
  61.   
  62.       
  63.     @Override  
  64.     public void onOpenDocument(PdfWriter writer, com.lowagie.text.Document arg1) {  
  65.         // TODO Auto-generated method stub  
  66.         System.out.println("OOD");  
  67.         try{  
  68.             // initialization of the template  
  69.             tpl = writer.getDirectContent().createTemplate(100, 100);  
  70.               
  71.            // tpl.setBoundingBox(new Rectangle(0, 0, 10, 10));  
  72.             // initialization of the font  
  73.             helv = BaseFont.createFont("Helvetica", BaseFont.WINANSI, false);  
  74.         }catch(Exception e)  
  75.         {  
  76.               
  77.         }  
  78.     }  
  79.   
  80. }  
  81.   
  82.       

转载自 http://nakupanda.iteye.com/blog/228581

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值