美文网首页
java代码将pdf转成图片-2

java代码将pdf转成图片-2

作者: 一路清寒 | 来源:发表于2018-06-30 22:23 被阅读0次

    废话不多说直接上代码。不管多少页的pdf,都能给你转成图片,速度非常快,主要是稳定,比linux(下面有粘图的 都被屏蔽掉了。什么鬼

    import java.awt.image.BufferedImage;

    import java.io.File;

    import java.io.IOException;

    import java.util.UUID;

    import javax.imageio.ImageIO;

    import org.apache.pdfbox.pdmodel.PDDocument;

    import org.apache.pdfbox.rendering.PDFRenderer;

    import com.lowagie.text.pdf.PdfReader;

    /**

    *@author :liu

    * @version 创建时间:2018年4月19日 下午9:36:51

    *          Description:

    */

    public class PDF2IMAGE {

    // 获取到 pdf 文件路径

    // 获取到图片存放路径

    // study-1.jpg

    public static void main(String[] args) {

    pdf2Image("D:/temp/a222.pdf", "D:/temp/picture", 150);

    }

    /***

    * PDF文件转PNG图片,全部页数

    *

    * @param PdfFilePath

    *            pdf完整路径

    * @param imgFilePath

    *            图片存放的文件夹

    * @param dpi

    *            dpi越大转换后越清晰,相对转换速度越慢

    * @return

    * list 获取到pdf 的文件路径 /dsd/d.pdf  然后拼上绝对路径

    */

    public static Integer pdf2Image(String PdfFilePath, String dstImgFolder,

    int dpi) {

    UUID uuid = UUID.randomUUID();

    String uuId = uuid.toString();

    System.out.println(uuId);

    File file = new File(PdfFilePath);

    @SuppressWarnings("resource")

    PDDocument pdDocument = new PDDocument();

    try {

    //String imagePDFName = file.getName().substring(0, dot); // 获取图片文件名

    String imgFolderPath = null;

    if (dstImgFolder.equals("")) {

    imgFolderPath = dstImgFolder + File.separator + uuId;// 获取图片存放的文件夹路径

    } else {

    imgFolderPath = dstImgFolder + File.separator + uuId;

    }

    if (createDirectory(imgFolderPath)) {

    pdDocument = PDDocument.load(file);

    PDFRenderer renderer = new PDFRenderer(pdDocument);

    /* dpi越大转换后越清晰,相对转换速度越慢 */

    PdfReader reader = new PdfReader(PdfFilePath);

    int pages = reader.getNumberOfPages();

    System.out.println("pdf总共多少页-----" + pages);

    StringBuffer imgFilePath = null;

    for (int i = 0; i < pages; i++) {

    String imgFilePathPrefix = imgFolderPath + File.separator

    + "study";

    System.out.println("imgFilePathPrefix====="+ imgFilePathPrefix);

    imgFilePath = new StringBuffer();

    imgFilePath.append(imgFilePathPrefix);

    imgFilePath.append("-");

    imgFilePath.append(String.valueOf(i));

    imgFilePath.append(".jpg");

    File dstFile = new File(imgFilePath.toString());

    BufferedImage image = renderer.renderImageWithDPI(i, dpi);

    System.out.println(dstFile);

    ImageIO.write(image, "png", dstFile);

    }

    System.out.println("PDF文档转PNG图片成功!");

    System.out.println("做保存操作保存数据库-----");

    return 1;

    } else {

    System.out.println("PDF文档转PNG图片失败:" + "创建" + imgFolderPath

    + "失败");

    return -1;

    }

    } catch (IOException e) {

    e.printStackTrace();

    return -1;

    }

    }

    private static boolean createDirectory(String folder) {

    File dir = new File(folder);

    if (dir.exists()) {

    return true;

    } else {

    return dir.mkdirs();

    }

    }

    //删除文件夹

    //param folderPath 文件夹完整绝对路径

        public static void delFolder(String folderPath) {

        try {

            delAllFile(folderPath); //删除完里面所有内容

            String filePath = folderPath;

            filePath = filePath.toString();

            java.io.File myFilePath = new java.io.File(filePath);

            myFilePath.delete(); //删除空文件夹

        } catch (Exception e) {

          e.printStackTrace();

        }

    }

    //删除指定文件夹下所有文件

    //param path 文件夹完整绝对路径

      public static boolean delAllFile(String path) {

          boolean flag = false;

          File file = new File(path);

          if (!file.exists()) {

            return flag;

          }

          if (!file.isDirectory()) {

            return flag;

          }

    String[] tempList = file.list();

          File temp = null;

          for (int i = 0; i < tempList.length; i++) {

              if (path.endsWith(File.separator)) {

                temp = new File(path + tempList[i]);

              } else {

                  temp = new File(path + File.separator + tempList[i]);

              }

              if (temp.isFile()) {

                temp.delete();

              }

              if (temp.isDirectory()) {

                delAllFile(path + "/" + tempList[i]);//先删除文件夹里面的文件

                delFolder(path + "/" + tempList[i]);//再删除空文件夹

                flag = true;

              }

          }

          return flag;

        }

    }
    测试结果

    148张转换要49秒。你可以调整一下分辨率,低的话,速度会更快

    下面在弄个生成图片缩略图的

    相关文章

      网友评论

          本文标题:java代码将pdf转成图片-2

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