Itext 学习笔记(六) pdf的页眉页脚
转载一篇blog 源地址为:
[url]
http://blog.chinaunix.net/uid-122937-id-3052063.html
[/url]
1.概述
iText5中并没有之前版本HeaderFooter对象设置页眉和页脚,可以利用PdfPageEventHelper来完成页眉页脚的设置工作。PdfPageEventHelper中包含以下事件处理器。
onOpenDocument() — 当打开一个文档时触发,可以用于初始化文档的全局变量。
onStartPage() — 当一个页面初始化时触发,可用于初始化页面的设置参数,但是注意这个函数触发时,该页面并没有创建好,不用利用这个函数添加内容,最好利用onEndPage()处理页面的初始化。
onEndPage() — 在创建一个新页面完成但写入内容之前触发,是添加页眉、页脚、水印等最佳时机。
onCloseDocument() — 在文档关闭之前触发,可以用于释放一些资源。
2.重载PdfPageEventHelper类
定义一个类HeaderFooter,继承了父类PdfPageEventHelper
在文档的每个页面中,必须定义一个Ractangle矩形,其中参数为art,这样在HeaderFooter类中就可以通过这个矩形,获取文档的边框位置,从而设置页眉和页脚。
代码如下:
import com.itextpdf.text.Document;import com.itextpdf.text.Element;import com.itextpdf.text.Phrase;import com.itextpdf.text.Rectangle;import com.itextpdf.text.pdf.ColumnText;import com.itextpdf.text.pdf.PdfPageEventHelper;import com.itextpdf.text.pdf.PdfWriter;public class HeaderFooter extends PdfPageEventHelper{ public void onEndPage (PdfWriter writer, Document document) { Rectangle rect = writer.getBoxSize("art"); switch(writer.getPageNumber() % 2) { case 0: ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_RIGHT, new Phrase("even header"), rect.getRight(), rect.getTop(), 0); break; case 1: ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_LEFT, new Phrase("odd header"), rect.getLeft(), rect.getTop(), 0); break; } ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER, new Phrase(String.format("page %d", writer.getPageNumber())), (rect.getLeft() + rect.getRight()) / 2, rect.getBottom() - 18, 0); }}
import com.itext.HeaderFooter;import com.itextpdf.text.pdf.PdfPageEventHelper;import com.itextpdf.text.pdf.PdfWriter;import com.itextpdf.text.pdf.ColumnText;import com.itextpdf.text.*;import java.io.FileOutputStream;public class HeaderAndFooterDemo { public static void main(String[] args){ Document document = new Document(PageSize.A4, 50, 50, 50, 50); try{ PdfWriter writer=PdfWriter.getInstance(document, new FileOutputStream("C:\\testHeaderAndFooter.pdf") ); Rectangle rect = new Rectangle(36, 54, 559, 788); rect.setBorderColor(BaseColor.BLACK); writer.setBoxSize("art", rect); HeaderFooter header=new HeaderFooter(); writer.setPageEvent(header); document.open(); document.newPage(); Paragraph par = new Paragraph("first paragraph"); document.add(par); document.newPage(); Paragraph par2 = new Paragraph("second paragraph"); document.add(par2); document.close(); }catch(Exception e){ e.printStackTrace(); } }}
import com.itextpdf.text.Document;import com.itextpdf.text.DocumentException;import com.itextpdf.text.Element;import com.itextpdf.text.ExceptionConverter;import com.itextpdf.text.Image;import com.itextpdf.text.Phrase;import com.itextpdf.text.Rectangle;import com.itextpdf.text.pdf.ColumnText;import com.itextpdf.text.pdf.PdfPCell;import com.itextpdf.text.pdf.PdfPTable;import com.itextpdf.text.pdf.PdfPageEventHelper;import com.itextpdf.text.pdf.PdfTemplate;import com.itextpdf.text.pdf.PdfWriter;public class TableHeader extends PdfPageEventHelper{ String header; PdfTemplate total; public void setHeader(String header){ this.header=header; } public void onOpenDocument(PdfWriter writer,Document document){ total = writer.getDirectContent().createTemplate(30,16); } public void onEndPage (PdfWriter writer, Document document) { PdfPTable table = new PdfPTable(3); try{ table.setWidths(new int[]{24,24,2}); table.setTotalWidth(527); table.setLockedWidth(true); table.getDefaultCell().setFixedHeight(20); table.getDefaultCell().setBorder(Rectangle.BOTTOM); table.addCell(header); table.getDefaultCell().setHorizontalAlignment( Element.ALIGN_RIGHT); table.addCell(String.format("page %d of",writer.getPageNumber())); PdfPCell cell = new PdfPCell(Image.getInstance(total)); cell.setBorder(Rectangle.BOTTOM); table.addCell(cell); table.writeSelectedRows(0,-1,34,803,writer.getDirectContent()); } catch(DocumentException de){ throw new ExceptionConverter(de); } } public void onCloseDocument(PdfWriter writer,Document document){ ColumnText.showTextAligned(total,Element.ALIGN_LEFT,new Phrase(String.valueOf(writer.getPageNumber()-1)),2,2,0); }}