PDF 添加水印、页眉页脚、签名等
接上一篇:itextpdf 利用模板生成pdf 下载_音乐土豆的博客-CSDN博客
1、添加水印
自定义水印内容格式等
public class WaterMark extends PdfPageEventHelper {
//定义水印 HELVETICA 大小:30 颜色:GrayColor 灰色
Font waterFont = new Font(Font.FontFamily.HELVETICA, 30, Font.BOLD, new GrayColor(0.95f));
private String waterContent;
public WaterMark(){};
public WaterMark(String waterContent){
this.waterContent = waterContent;
}
@Override
public void onEndPage(PdfWriter writer, Document document) {
for(int i = 0; i < 5; i++) {
for(int j = 0; j < 5; j++) {
ColumnText.showTextAligned(
writer.getDirectContentUnder(),//字体下方
Element.ALIGN_CENTER,//居中
new Phrase(this.waterContent == null ? "HELLO PDF" : this.waterContent, waterFont),//水印内容
(50.5f + i*350),
(40.0f + j*150),
writer.getPageNumber() % 2 == 1 ? 45 : -45);
}
}
}
}
pdf 加入 水印
PdfWriter writer = PdfWriter.getInstance(document, out);
//添加水印
writer.setPageEvent(new WaterMark("water mark"));
效果如下
2、页眉页脚
自定义页眉页脚
public class MyHeaderFooter extends PdfPageEventHelper {
PdfTemplate totalPage;
Font hfFont;
{
try {
hfFont = new Font(BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED), 8, Font.NORMAL);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 打开文档时,创建一个总页数的模版
*/
@Override
public void onOpenDocument(PdfWriter writer, Document document) {
PdfContentByte cb =writer.getDirectContent();
totalPage = cb.createTemplate(30, 16);
}
@Override
public void onEndPage(PdfWriter writer, Document document) {
PdfPTable table = new PdfPTable(3);
try {
table.setTotalWidth(PageSize.A4.getWidth() - 100);
table.setWidths(new int[] { 24, 24, 3});
table.setLockedWidth(true);
table.getDefaultCell().setFixedHeight(-10);
table.getDefaultCell().setBorder(Rectangle.BOTTOM);
// 可以直接使用addCell(str),不过不能指定字体,中文无法显示
table.addCell(new Paragraph("www.test.com", hfFont));
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
table.addCell(new Paragraph(writer.getPageNumber() + "/", hfFont));
// 总页数
PdfPCell cell = new PdfPCell(Image.getInstance(totalPage));
cell.setBorder(Rectangle.BOTTOM);
table.addCell(cell);
// 将页眉写到document中,位置可以指定,指定到下面就是页脚
// table.writeSelectedRows(0, -1, 50,PageSize.A4.getHeight() - 20, writer.getDirectContent());
table.writeSelectedRows(0, -1, 50,PageSize.A4.getBottom() + 20, writer.getDirectContent());
} catch (Exception de) {
throw new ExceptionConverter(de);
}
}
/**
* 全部完成后,将总页数的pdf模版写到指定位置
*/
@Override
public void onCloseDocument(PdfWriter writer, Document document) {
String text = "总" + (writer.getPageNumber()) + "页";
ColumnText.showTextAligned(totalPage, Element.ALIGN_LEFT, new Paragraph(text,hfFont), 2, 2, 0);
}
}
pdf 添加 页眉页脚
//添加页眉页脚
writer.setPageEvent(new MyHeaderFooter());
效果如下
3、添加签名
同添加图片
private void appendSignToDocument(Document document){
try{
Image sign = Image.getInstance("D:\\PDF-TEST\\signName.jpg");
sign.setAlignment(Image.ALIGN_RIGHT);
//缩放比例
sign.scalePercent(4);
document.add(sign);
}catch (Exception e){
e.printStackTrace();
}
}
如下图