对pdf进行操作估计大家都值到要使用itext组件这里简单介绍一下两个需要用到的类
PdfReader:用作读取pdf文档
PdfStamper:应用额外的内容添加到pdf上,图片,文本的添加就靠它了
PdfContentByte:实际做操作的类
然后就是代码了
BufferedOutputStream buffer = new BufferedOutputStream(new FileOutputStream(new java.io.File("c:\\temp.pdf")));
PdfReader reader = new PdfReader(pdf);//打开目标pdf
PdfStamper stamper = new PdfStamper(reader, buffer);//PdfStamper打开reader,并且设置pdf
try{
int num = sum + 1;
BaseFont base = BaseFont.createFont("c:\\windos\\simyou.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//设置字体库
PdfContentByte content;
for (int i = 1; i < reader.getNumberOfPages()+1; i++) {
content = stamper.getOverContent(i);
content.setColorFill(Color.BLACK);
content.setFontAndSize(base, 15);
content.setTextMatrix(reader.getPageSize(i).getWidth()/2, 60);//定义页码位置
String centerMark=String.valueOf(num);
content.showText(centerMark);
++num;
}
stamper.close();
}
catch(Exception ex)
{
stamper.close();
ex.printStackTrace();
}
但是其中会遇到一个问题,使用福昕pdf阅读器打开的时候页码是添加在上去了,但是在Adobe Reader下会发现添加上去的页码不见了,寻找了网上的的资料,大概认为是因为我们使用的字体库Adobe Reader识别不了,所以无法显示,这里网上的资料表示可以通过升级额外字体库来显示这些字体,但是实际上我们是不能要求打开pdf的人都升级其字体库。故对上面的代码做了以下的修改
我们需要使用的Image类,使用字数图片来贴图页码
for循环要进行修改
for (int i = 1; i < reader.getNumberOfPages() + 1; i++) {
PdfContentByte content = stamper.getOverContent(i);
int j = String.valueOf(total).length();
String centerMark = String.valueOf(total);
for (int k = 0; k < j; k++) {
String imageFilePath = "c://temp"
c = centerMark.charAt(k);//图片是0-9,所以我们要获取每一位的数字,然后获取其图片
imageFilePath = imageFilePath + c + ".png";
image = Image.getInstance(imageFilePath);
image.setAlignment(4);//设置对齐模式
image.scaleAbsolute(5.0F, 15.0F);
image.setAbsolutePosition(reader.getPageSize(i).getWidth()/2, reader.getPageSize(i).getHeight() * 0.04F);//部署图片具体的位置,因为数字可能是十位百位千位,所以这里的代码需要判断位数挪动图片的位置
content.addImage(image);
content.saveState();
}
total++;
}
而批量进行pdf的页码添加至需要修改第一段代码中的sum(起始的页码),还有pdf(打开不同的pdf)