美文网首页Java web
java把pdf文件转换成多张图片

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

作者: haiyong6 | 来源:发表于2020-02-18 21:01 被阅读0次

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

    maven引入jar包

            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>itext-asian</artifactId>
                <version>5.2.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.pdfbox</groupId>
                <artifactId>pdfbox</artifactId>
                <version>2.0.18</version>
            </dependency>
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>itextpdf</artifactId>
                <version>5.5.13.1</version>
            </dependency>
    

    建一个工具类

    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<String> 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<String> 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<String> 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文件转换成多张图片

        本文链接:https://www.haomeiwen.com/subject/eeunfhtx.html