java把pdf文件转换成多张图片

上次写过一篇 java通过openOffice实现word,excel,ppt转成pdf实现在线预览,现在有个需求是把pdf文件分隔成多张图片在网页上分页显示,就像ppt的效果。(不理解需求什么想法,明明pdf可以网页直接打开的...)
所以,思路就是在之前的基础上把上传的文件先转换成pdf,再把pdf转换成多页png图片就可以了。

maven引入jar包

        
            com.itextpdf
            itext-asian
            5.2.0
        
        
            org.apache.pdfbox
            pdfbox
            2.0.18
        
        
            com.itextpdf
            itextpdf
            5.5.13.1
        

建一个工具类

package cn.ways.util;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.UUID;

import javax.imageio.ImageIO;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;



public class ToolUtil {
    
    /**
     * 将多页pdf转化为多张图片
     * @param pdfPath
     * @return
     * @throws IOException
     */
    public static List pdfPathToImagePaths(String pdfPath){
        File pdfFile = new File(pdfPath);
        PDDocument pdDocument;
        try {
            pdDocument = PDDocument.load(pdfFile);
            int pageCount = pdDocument.getNumberOfPages();
            PDFRenderer pdfRenderer = new PDFRenderer(pdDocument);
            List imagePathList = new ArrayList<>();
            String fileParent = pdfFile.getParent();
            for(int pageIndex = 0; pageIndex < pageCount; pageIndex++) {
                String imgPath = fileParent + File.separator + UUID.randomUUID().toString() + ".png";
                BufferedImage image = pdfRenderer.renderImageWithDPI(pageIndex, 105,ImageType.RGB);
                ImageIO.write(image, "png", new File(imgPath));
                imagePathList.add(imgPath);
                
            }
            pdDocument.close();
            return imagePathList;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        return null;
    }
    
    
      public static void main(String[] args) {
          List list = pdfPathToImagePaths("D://pdf/test.pdf");
          for (int i = 0; i < list.size(); i++) {
              System.out.println("path==" + list.get(i));
          }
      }
}

上面的pdfPathToImagePaths方法就可以把pdf转换成多张图片,图片名称是UUID唯一标识随意生成的,也可以改成自己需要的特定名称,然后把得到的文件地址的集合分条插入到数据就好了。

你可能感兴趣的:(java把pdf文件转换成多张图片)