java PDFBOX修改pdf图片

时间:2022-11-11 21:39:33

接到任务是提取pdf图片修改并把修改后的图片放入pdf原来的位置。

经过2天的不断试验终于找到方法了。

1、使用pdfbox分析图片

2、在分析每个page的时候,对每个page元素做如下处理:

     PDResources res = page.findResources();
     // 获取页面图片信息
     Map<String, PDXObjectImage> imgs = res.getImages();

     imgs就是page中所有的图片。

3、修改imgs重新设置到res中,再重新设置page,如下:


     res.setXObjects(newImgs);
      page.setResources(res);   

4、把page添加到新的document中

     PDDocument newDcoument = new PDDocument();

     newDcoument.addPage(page);

5、document保存

     newDcoument.save(pdf保存文件名)

注意:

      1、新的图片对象创建需要下面的方法,这样在document保存的时候才不会出现空指针错误。

           PDXObjectImage image = new PDJpeg(newDcoument,   new FileInputStream(imgPathBak));

      2、图片颜色问题会影响pdf所以要用旧的img对象信息覆盖新的默认信息。

              new FileInputStream(imgPathBak));
              image.setStencilColor(img.getStencilColor());
              image.setBitsPerComponent(img.getBitsPerComponent());
              // 如果原本PDF图片是ICC_ColorSpace需要重新设定,否则不用
              if (java.awt.color.ICC_ColorSpace.class.getName() .equals(img.getColorSpace()
                              .getJavaColorSpace().getClass().getName())) {
                 image.setColorSpace(img.getColorSpace());
              }
              image.setHeight(img.getHeight());
              image.setWidth(img.getWidth());
              image.setMetadata(img.getMetadata());
              newImgs.put((String) obj, image);

               img是从pdf读取的图片对象,image是修改后的图片对象。

   经过测试是可以修改图片的,但是对pdfbox解析和修改pdf还未研究透。