2023-02-16 15:28:15 +08:00
|
|
|
|
package com.zhgd.xmgl.pdf;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import com.itextpdf.text.*;
|
|
|
|
|
|
import com.itextpdf.text.pdf.*;
|
2024-04-14 21:05:01 +08:00
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
|
2023-02-16 15:28:15 +08:00
|
|
|
|
import java.io.IOException;
|
2024-04-14 21:05:01 +08:00
|
|
|
|
|
|
|
|
|
|
@Slf4j
|
2023-02-16 15:28:15 +08:00
|
|
|
|
public class MyHeaderFooter3 extends PdfPageEventHelper {
|
|
|
|
|
|
// 总页数
|
|
|
|
|
|
PdfTemplate totalPage;
|
|
|
|
|
|
Font hfFont;
|
2024-04-14 21:05:01 +08:00
|
|
|
|
|
2023-02-16 15:28:15 +08:00
|
|
|
|
{
|
|
|
|
|
|
try {
|
|
|
|
|
|
hfFont = new Font(BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED), 8, Font.NORMAL);
|
|
|
|
|
|
} catch (DocumentException e) {
|
2024-04-14 21:05:01 +08:00
|
|
|
|
log.error("error:", e);
|
2023-02-16 15:28:15 +08:00
|
|
|
|
} catch (IOException e) {
|
2024-04-14 21:05:01 +08:00
|
|
|
|
log.error("error:", e);
|
2023-02-16 15:28:15 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2024-04-14 21:05:01 +08:00
|
|
|
|
|
2023-02-16 15:28:15 +08:00
|
|
|
|
// 打开文档时,创建一个总页数的模版
|
|
|
|
|
|
public void onOpenDocument(PdfWriter writer, Document document) {
|
|
|
|
|
|
PdfContentByte cb =writer.getDirectContent();
|
|
|
|
|
|
totalPage = cb.createTemplate(30, 16);
|
|
|
|
|
|
}
|
|
|
|
|
|
// 一页加载完成触发,写入页眉和页脚
|
|
|
|
|
|
public void onEndPage(PdfWriter writer, Document document) {
|
|
|
|
|
|
PdfPTable table = new PdfPTable(3);
|
|
|
|
|
|
try {
|
|
|
|
|
|
table.setTotalWidth(PageSize.A3.getHeight() - 100);
|
|
|
|
|
|
table.setWidths(new int[] { 24, 24, 3});
|
|
|
|
|
|
table.setLockedWidth(true);
|
|
|
|
|
|
table.getDefaultCell().setFixedHeight(-10);
|
|
|
|
|
|
table.getDefaultCell().setBorder(Rectangle.BOTTOM);
|
2024-04-14 21:05:01 +08:00
|
|
|
|
|
2023-02-16 15:28:15 +08:00
|
|
|
|
table.addCell(new Paragraph("页脚", hfFont));// 可以直接使用addCell(str),不过不能指定字体,中文无法显示
|
|
|
|
|
|
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.A3.getHeight() - 1150, writer.getDirectContent());
|
|
|
|
|
|
} catch (Exception de) {
|
|
|
|
|
|
throw new ExceptionConverter(de);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2024-04-14 21:05:01 +08:00
|
|
|
|
|
2023-02-16 15:28:15 +08:00
|
|
|
|
// 全部完成后,将总页数的pdf模版写到指定位置
|
|
|
|
|
|
public void onCloseDocument(PdfWriter writer,Document document) {
|
|
|
|
|
|
String text = "总" + (writer.getPageNumber()) + "页";
|
|
|
|
|
|
ColumnText.showTextAligned(totalPage, Element.ALIGN_LEFT, new Paragraph(text,hfFont), 2, 2, 0);
|
|
|
|
|
|
}
|
2024-04-14 21:05:01 +08:00
|
|
|
|
|
|
|
|
|
|
}
|