在开发系统时,需要在PDF上写入总页数。于是在网上搜索到
iText加入页码
这篇文章。但是仍然不知道PdfTemplate是什么使用的。
在Itext in action 2006版 第14章刚好有个这个例子(14.2.3 PageXofY)
- /* chapter14/PageXofY.java */
- import java.io.FileOutputStream;
- import java.io.IOException;
- import com.lowagie.text.Document;
- import com.lowagie.text.DocumentException;
- import com.lowagie.text.Element;
- import com.lowagie.text.ExceptionConverter;
- import com.lowagie.text.Paragraph;
- import com.lowagie.text.Phrase;
- import com.lowagie.text.Rectangle;
- 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;
- /**
- * This example was written by Bruno Lowagie. It is part of the book 'iText in
- * Action' by Manning Publications.
- * ISBN: 1932394796
- * http://itext.ugent.be/itext-in-action/
- * http://www.manning.com/lowagie/
- */
- public class PageXofY extends PdfPageEventHelper {
- /** The PdfTemplate that contains the total number of pages. */
- protected PdfTemplate total;
- /** The font that will be used. */
- protected BaseFont helv;
- /**
- * @see com.lowagie.text.pdf.PdfPageEvent#onOpenDocument(com.lowagie.text.pdf.PdfWriter,
- * com.lowagie.text.Document)
- */
- public void onOpenDocument(PdfWriter writer, Document document) {
- total = writer.getDirectContent().createTemplate(100, 100);
- total.setBoundingBox(new Rectangle(-20, -20, 100, 100));
- try {
- helv = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI,
- BaseFont.NOT_EMBEDDED);
- } catch (Exception e) {
- throw new ExceptionConverter(e);
- }
- }
- /**
- * @see com.lowagie.text.pdf.PdfPageEvent#onEndPage(com.lowagie.text.pdf.PdfWriter,
- * com.lowagie.text.Document)
- */
- public void onEndPage(PdfWriter writer, Document document) {
- PdfContentByte cb = writer.getDirectContent();
- cb.saveState();
- String text = "Page " + writer.getPageNumber