Java itext5预览PDF设置页眉页脚
如果是maven项目需要添加依赖,普通项目在官网(http://itextpdf.com/)下载对应的jar包加入即可。依赖如下:
com.itextpdf itextpdf 5.5.10 com.itextpdf itext-asian 5.2.0
预览:
public void review(HttpServletResponse response) throws Exception {
//预览
response.setHeader("content-Type", "application/pdf");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "inline;filename=text.pdf");
//新建Document对象并设置纸张大小和边距(左,右, 上,下)
Document document = new Document(PageSize.A4, 10, 20, 30, 40);
//PDF属性(可写可不写)
document.addAuthor("author");//作者
document.addTitle("title");//标题
document.addSubject("subject");//主题
document.addKeywords("keywords");//关键字
try {
//建立书写器(Writer)与document对象关联,以字节流输出
//创建 PdfWriter对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。
PdfWriter writer = PdfWriter.getInstance(document, response.getOutputStream());
writer.setPageEvent(new MyHeaderFooter());// 页眉页脚(需要时设置)
//打开document
document.open();
//添加内容
setpdf(document, writer);
//关闭Document对象和书写器(Writer)
if(document != null){
document.close();
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
内容设置:
/**
* 具体内容设置
*/
public Document setpdf(Document document, PdfWriter writer) throws Exception {
float hlead = 28;
Font font1 = new Font(BaseFont.createFont( "/zhttfs/2.ttf",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED), 22);//小标宋2号
float pleft = 45;
float pright = 35;
Paragraph p1 = new Paragraph("我是标题", font1);
p1.setLeading(32);//行间距
p1.setAlignment(Element.ALIGN_CENTER);//居中
p1.setIndentationLeft(pleft);
p1.setIndentationRight(pright);
document.add(p1);
document.newPage();
Paragraph p2 = new Paragraph("我是标题", font1);
p2.setLeading(32);//行间距
p2.setAlignment(Element.ALIGN_CENTER);//居中
p2.setIndentationLeft(pleft);
p2.setIndentationRight(pright);
document.add(p2);
return document;
}
页眉页脚:
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import java.io.IOException;
public class MyHeaderFooter extends PdfPageEventHelper {
//总页数
PdfTemplate totalPage;
//字体
Font hfFont;
{
try {
hfFont = new Font(BaseFont.createFont( "/zhttfs/1.ttf",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED), 14);
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//打开文档时,创建一个总页数的模版
public void onOpenDocument(PdfWriter writer, Document document) {
PdfContentByte cb = writer.getDirectContent();
totalPage = cb.createTemplate(50, 14);//共 页的宽高
}
//一页加载完成触发,写入页眉和页脚
public void onEndPage(PdfWriter writer, Document document) {
//创建一个两列的表格
PdfPTable table = new PdfPTable(2);
try {
table.setTotalWidth(PageSize.A4.getWidth());//总宽度为A4纸张宽度
table.setLockedWidth(true);//锁定列宽
table.setWidths(new int[]{50, 50});//设置每列宽度
PdfPCell cell = new PdfPCell(new Phrase("第"+ document.getPageNumber() +"页/", hfFont));
cell.setHorizontalAlignment(Element.ALIGN_RIGHT);//设置水平右对齐
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);//设置垂直居中
cell.disableBorderSide(15);//隐藏全部边框
table.addCell(cell);
PdfPCell cell1 = new PdfPCell(Image.getInstance(totalPage));//共 页
cell1.setHorizontalAlignment(Element.ALIGN_LEFT);//设置水平左对齐
cell1.setVerticalAlignment(Element.ALIGN_MIDDLE);//设置垂直居中
cell1.disableBorderSide(15);//隐藏全部边框
table.addCell(cell1);
table.writeSelectedRows(0, -1, 0, 50, writer.getDirectContent());
} catch (Exception e) {
throw new ExceptionConverter(e);
}
//生成左侧页眉
ColumnText.showTextAligned(writer.getDirectContent(),
Element.ALIGN_LEFT, new Paragraph("左页眉", hfFont),
document.left(), PageSize.A4.getHeight() -30, 0);
//生成右侧页眉
ColumnText.showTextAligned(writer.getDirectContent(),
Element.ALIGN_RIGHT, new Paragraph("右页眉", hfFont),
document.right(), PageSize.A4.getHeight() - 30, 0);
}
// 全部完成后,将总页数的pdf模版写到指定位置
public void onCloseDocument(PdfWriter writer,Document document) {
String text = "共" + (writer.getPageNumber()) + "页";
ColumnText.showTextAligned(totalPage, Element.ALIGN_MIDDLE, new Paragraph(text, hfFont), 0, 0, 0);
}
}