批量添加pdf页码

对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)

猜你喜欢

转载自blog.csdn.net/kiranet/article/details/49225833