接上一篇拼接pdf后,需要对不同文件的pdf展示不同的页眉及页脚,所以,这篇分享对于已存在的pdf进行页眉页脚的添加。
public static String RederAndCopyByPDF(String[] files, String savePath,ByteArrayOutputStream stream)
throws IOException, DocumentException {
byte[] byteArray = stream.toByteArray();
// 读取pdf拼接的二进制
PdfReader reader = new PdfReader(byteArray);
// savePath 既我要添加页眉页脚以后的文件地址.
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(savePath));
// 因为我们需要考虑繁体字样,经过试验,niGB-UTF16-H 能够完美支持全部字体格式
BaseFont bf = BaseFont.createFont("STSong-Light", "niGB-UTF16-H", BaseFont.NOT_EMBEDDED); // set font
// baseFont不支持字体样式设定.但是font字体要求操作系统支持此字体会带来移植问题.
Font font = new Font(bf, 10);
font.setStyle(Font.BOLD);
font.getBaseFont();
//这里获取拼接pdf每个文件的长度,因为需要对应不同的页眉
List<FilePojo> list = getPageNumber(files);
int page = 0;
for (FilePojo filePojo : list) {
page += filePojo.getPageNumber();
}
// 生成pdf 创建 页眉及页脚
int s = 0;
for (int size = 0; size < list.size(); size++) {
// 获取第一个文件pdf,并处理
if (s < list.get(0).getPageNumber()) {
// 证明这是第一个文件的
for (int i = 1; i <= list.get(size).getPageNumber(); i++) {
// 初始值
Append(stamper, reader, font, i,null,null);
s++;
}
} else if (s >= list.get(0).getPageNumber() && s <= page) {
for (int i = 1; i <= list.get(size).getPageNumber(); i++) {
s++;
//判断当前对象是否需要进行添加页眉,需要 -- 传递页眉名称 不需要则不处理
//if(){
//}
Append(stamper, reader, font, s, list.get(size).getFileName(),"123");
}
}
}
stamper.close();
return savePath;
}
private static void Append(PdfStamper stamper, PdfReader reader, Font font, int i,String title,String type) {
if(type!=null) {
//代表需要页眉,所以,需要增加页眉.
// 写入下划线
//读取当前文件的内容
PdfContentByte over2 = stamper.getOverContent(i);
// 开始写入文本
over2.beginText();
// 设置字体和大小
over2.setFontAndSize(font.getBaseFont(), 12);
// 设置字体的输出位置(位置是可以通过PdfObject 获取的)
over2.setTextMatrix(0, 815);
// 要输出的text
over2.showText("当前页数" + i + "");
// 设置字体颜色
over2.setColorFill(BaseColor.BLUE);
}
if(title!=null) {
写入不同的页眉。方法跟上面一致,但是不可以重复使用,因为页眉 页脚 需要写在不同的位置;
}
毕竟是写代码的,文字描述可能是不尽完全,所以,全部在代码里面写了注释。