zoukankan      html  css  js  c++  java
  • 生成PDF文件添加总页数

      在页眉或者页脚加上第x页这样的信息

      HeaderFooter footer = new HeaderFooter(new Phrase("第:",FontChinese), new Phrase("页",FontChinese));       footer.setBorder(Rectangle.NO_BORDER);    

      document.setFooter(footer);

          document.open();  

    • 在每页显示第x页/共y页这样的功能

    • import java.io.FileOutputStream;

      import com.lowagie.text.Document;
      import com.lowagie.text.Element;
      import com.lowagie.text.ExceptionConverter;
      import com.lowagie.text.Font;
      import com.lowagie.text.PageSize;
      import com.lowagie.text.Paragraph;
      import com.lowagie.text.pdf.BaseFont;
      import com.lowagie.text.pdf.PdfContentByte;
      import com.lowagie.text.pdf.PdfPageEventHelper;
      import com.lowagie.text.pdf.PdfTemplate;
      import com.lowagie.text.pdf.PdfWriter;

      public class PdfExport extends PdfPageEventHelper{

      public PdfTemplate tpl;
      public BaseFont bf;
      public static void main(String[] args) {
      Document document = new Document(PageSize.A4, 20, 20, 20, 20);
      try {
      PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("D:HelloItext.pdf"));
      writer.setPageEvent(new PdfExport());
      BaseFont bfChinese = BaseFont.createFont("STSong-Light","UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
      document.open();
      Paragraph title = new Paragraph("测试内容。。。。", new Font(bfChinese,15));
      title.setAlignment(Element.ALIGN_CENTER);
      document.add(title);
      } catch (Exception de) {
      de.printStackTrace();
      }
      document.close();
      }

      public void onOpenDocument(PdfWriter writer, Document document) {
      try {
      tpl = writer.getDirectContent().createTemplate(100, 100);
      bf = BaseFont.createFont("STSong-Light","UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
      }catch(Exception e) {
      throw new ExceptionConverter(e);
      }
      }

      public void onEndPage(PdfWriter writer, Document document) {
      //在每页结束的时候把“第x页”信息写道模版指定位置
      PdfContentByte cb = writer.getDirectContent();
      cb.saveState();
      String text ="第"+ writer.getPageNumber() +"页,共";
      cb.beginText();
      cb.setFontAndSize(bf, 8);
      cb.setTextMatrix(460, 786);//定位“第x页,共” 在具体的页面调试时候需要更改这xy的坐标
      cb.showText(text);
      cb.endText();
      cb.addTemplate(tpl, 492, 786);//定位“y页” 在具体的页面调试时候需要更改这xy的坐标
      cb.saveState();
      cb.stroke();
      cb.restoreState();
      cb.closePath();//sanityCheck();
      }

      public void onCloseDocument(PdfWriter writer, Document document) {
      //关闭document的时候获取总页数,并把总页数按模版写道之前预留的位置
      tpl.beginText();
      tpl.setFontAndSize(bf, 8);
      tpl.showText(Integer.toString(writer.getPageNumber() - 1)+"页");
      tpl.endText();
      tpl.closePath();//sanityCheck();
      }
      }

    官方页面有具体实现的例子,连接地址: 
    http://itextdocs.lowagie.com/tutorial/directcontent/pageevents/index.php 
    源码: 
    http://itextdocs.lowagie.com/examples/com/lowagie/examples/directcontent/pageevents/PageNumbersWatermark.java

    其他相关学习连接:http://howtodoinjava.com/apache-commons/create-pdf-files-in-java-itext-tutorial/

  • 相关阅读:
    flex布局语法
    sqlserver判断text字段是否有数据
    z-index设置后导致遮罩层显示跳动问题
    C# UpdatePanel加载完毕回调JS
    json日期字符串格式化时间
    钉钉考勤机开发需要注意的一个坑
    python bs4 + requests4 简单爬虫
    温故而知新: 关于 js Form 方式提交的一些新认知
    window 环境 Composer 安装 thinkphp5
    百度地图 绘制东莞东城地图示例
  • 原文地址:https://www.cnblogs.com/bsyx/p/6081477.html
Copyright © 2011-2022 走看看