7步制作Itext5页眉页脚pdf实现第几页共几页(三)

2014-11-24 09:17:14 · 作者: · 浏览: 3
import com.riambsoft.report.pdf.PdfReportM1HeaderFooter;
/**
* ClassName:PDFBuilder
* Function: TODO ADD FUNCTION.
* Reason: TODO ADD REASON.
* Date: 2013-9-13 下午03:35:53
* @author Administrator
* @version
* @since JDK 1.5
* @see
*/
public class PDFBuilder {
private int pageHeight;
private int pageWidth;
private PDFBuilder(){
}
public static PDFBuilder getInstance(){
return new PDFBuilder();
}
public void generatePDF()throws Exception {
Document document = new Document(new Rectangle(pageWidth, pageHeight));
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(""));
this.setFooter(writer);
writer.setFullCompression();
writer.setPdfVersion(PdfWriter.VERSION_1_4);
document.open();
// Set pdf version to 1.4
PdfContentByte cb = writer.getDirectContent();
ColumnText ct=new ColumnText(cb);
for(int i=0;i<10;i++){
document.newPage();
//如果不设置 空白页无法单独显示
writer.setPageEmpty(false);
}
document.close();
}
private void setFooter(PdfWriter writer) throws DocumentException, IOException {
//HeaderFooter headerFooter = new HeaderFooter(this);
//更改事件,瞬间变身 第几页/共几页 模式。
PdfReportM1HeaderFooter headerFooter = new PdfReportM1HeaderFooter();//就是上面那个类
writer.setBoxSize("art",PageSize.A4);
writer.setPageEvent(headerFooter);
}
public int getPageHeight() {
return pageHeight;
}
public void setPageHeight(int pageHeight) {
this.pageHeight = pageHeight;
}
public int getPageWidth() {
return pageWidth;
}
public void setPageWidth(int pageWidth) {
this.pageWidth = pageWidth;
}
public static void main(String[] args) throws Exception {
PDFBuilder builder=new PDFBuilder();
builder.setPageHeight(400);
builder.setPageWidth(600);
builder.generatePDF();
}
}
核心算法:就是计算文档的长宽,算出中点,记得中文字体是需要占用宽度的,所以也要计算进去,其次没什么重点,研究一下中点的计算吧,初中知识。
paga x 这种好做,page x of y 按照官方 itext in action 2这本书上面说的那种办法,无法准确计算各种文档的x轴和y轴坐标。
我按照书上所写的实现方式如下,不推荐使用,因为只适合于A4纸张。
PdfReportM1HeaderFooter2.java
[java]
/**
* Project Name:report
* File Name:PdfReportM1HeaderFooter.java
* Package Name:com.riambsoft.report.pdf
* Date:2013-9-13上午08:59:00
* Copyright (c) 2013, riambsoft All Rights Reserved.
*
*/
package com.riambsoft.report.pdf;
import java.io.IOException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.ExceptionConverter;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.BaseFont;
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;
/**
* ClassName:PdfReportM1HeaderFooter2
Function: TODO ADD FUNCTION.
Reason: TODO ADD REASON.
Date: 2013-9-13 上午08:59:00
*
* @author Ad