PDF转图片

0.前言

  可根据需要选择图片质量

1.maven依赖

1 <dependency>
2     <groupId>org.apache.pdfbox</groupId>
3     <artifactId>pdfbox</artifactId>
4     <version>2.0.8</version>
5 </dependency>

2.File工具类

  1 import org.apache.commons.codec.binary.Base64;
  2 import org.slf4j.Logger;
  3 import org.slf4j.LoggerFactory;
  4 import java.io.*;
  5 import java.math.BigInteger;
  6 import java.security.MessageDigest;
  7 import java.security.NoSuchAlgorithmException;
  8 import java.util.HashMap;
  9 import java.util.LinkedHashMap;
 10 import java.util.Map;
 11 
 12 public class FileHelper {
 13     private static Logger logger = LoggerFactory.getLogger(FileHelper.class);
 14 
 15     /***
 16      * 获取文件基本信息
 17      * 
 18      * @param filePath
 19      * @return
 20      */
 21     public static Map<String, String> getFileInfo(String filePath) {
 22         Map<String, String> fileInfos = new LinkedHashMap<String, String>();
 23         File file = new File(filePath);
 24         fileInfos.put("FileName", file.getName());
 25         fileInfos.put("FileLength", String.valueOf(file.length()));
 26         return fileInfos;
 27     }
 28 
 29     /***
 30      * 获取文件的Bytes
 31      * 
 32      * @param filePath
 33      * @return
 34      * @throws IOException
 35      */
 36     public static byte[] getBytes(String filePath) {
 37         File file = new File(filePath);
 38         FileInputStream fis = null;
 39         byte[] buffer = null;
 40         try {
 41             fis = new FileInputStream(file);
 42             buffer = new byte[(int) file.length()];
 43             fis.read(buffer);
 44             fis.close();
 45         } catch (FileNotFoundException e) {
 46             e.printStackTrace();
 47             logger.info("获取文件字节流失败:" + e.getMessage());
 48         } catch (IOException e) {
 49             e.printStackTrace();
 50             logger.info("获取文件字节流失败:" + e.getMessage());
 51         } finally {
 52             try {
 53                 fis.close();
 54             } catch (IOException e) {
 55                 e.printStackTrace();
 56                 logger.info("FileInputStream 关闭时发生异常:" + e.getMessage());
 57             }
 58         }
 59         return buffer;
 60     }
 61 
 62     /**
 63      * 根据byte数组生产文件
 64      * 
 65      * @param fileName
 66      *  String 文件路径
 67      * @throws IOException
 68      * @return byte[] 文件内容
 69      */
 70     public static Map<String, String> saveFileByStream(byte[] bytes, String folder, String fileName) {
 71         Map<String, String> fileResult = new HashMap<String, String>();
 72         BufferedOutputStream bos = null;
 73         FileOutputStream fos = null;
 74         File file = null;
 75         try {
 76             File dir = new File(folder);
 77             if (!dir.exists() && dir.isDirectory()) {// 判断文件目录是否存在
 78                 dir.mkdirs();
 79             }
 80             file = new File(folder + File.separator + fileName);
 81             fos = new FileOutputStream(file);
 82             bos = new BufferedOutputStream(fos);
 83             bos.write(bytes);
 84             fileResult.put("errCode", "0");
 85             fileResult.put("msg", "保存签署后文件成功");
 86         } catch (Exception e) {
 87             e.printStackTrace();
 88             logger.info("保存签署后文件失败:" + e.getMessage());
 89             fileResult.put("errCode", "0");
 90             fileResult.put("msg", "保存签署后文件成功");
 91         } finally {
 92             if (bos != null) {
 93                 try {
 94                     bos.close();
 95                 } catch (IOException e1) {
 96                     e1.printStackTrace();
 97                     logger.info("保存签署后文件失败:" + e1.getMessage());
 98                 }
 99             }
100             if (fos != null) {
101                 try {
102                     fos.close();
103                 } catch (IOException e1) {
104                     e1.printStackTrace();
105                     logger.info("保存签署后文件失败:" + e1.getMessage());
106                 }
107             }
108         }
109         return fileResult;
110     }
111 
112     /***
113      * 获取文件MD5值
114      * 
115      * @param filePath
116      * @return
117      * @throws IOException
118      */
119     public static String getFileMD5(String filePath) {
120         FileInputStream fis = null;
121         BigInteger bigInt = null;
122         try {
123             File file = new File(filePath);
124             fis = new FileInputStream(file);
125             MessageDigest md = MessageDigest.getInstance("MD5");
126             byte[] buffer = new byte[1024];
127             int length = -1;
128             while ((length = fis.read(buffer, 0, 1024)) != -1) {
129                 md.update(buffer, 0, length);
130             }
131             bigInt = new BigInteger(1, md.digest());
132             fis.close();
133         } catch (FileNotFoundException e) {
134             e.printStackTrace();
135             logger.info(e.getMessage());
136         } catch (NoSuchAlgorithmException e) {
137             e.printStackTrace();
138             logger.info(e.getMessage());
139         } catch (IOException e) {
140             e.printStackTrace();
141             logger.info(e.getMessage());
142         }
143         return bigInt.toString(16);
144     }
145 
146     /***
147      * 创建文件夹
148      * 
149      * @param folderPath
150      * @return
151      */
152     public static boolean createDirectory(String folderPath) {
153         boolean isSuccess = false;
154         File file = new File(folderPath);
155         if (!file.exists() && !file.isDirectory()) {
156             file.mkdir();
157             isSuccess = true;
158         } else {
159             isSuccess = true;
160         }
161         return isSuccess;
162     }
163 
164     /***
165      * 根据图片路径将图片转成Base64数据
166      * 
167      * @return Base64数据
168      */
169     public static String GetImageStr(String imgFilePath) {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
170 
171         InputStream in = null;
172         byte[] data = null;
173         // 读取图片字节数组
174         try {
175             in = new FileInputStream(imgFilePath);
176             data = new byte[in.available()];
177             in.read(data);
178             in.close();
179         } catch (IOException e) {
180             logger.info("上传的印章图片转sealData错误:" + e.getMessage());
181             e.printStackTrace();
182         }
183         // 对字节数组Base64编码
184         byte[] en = Base64.encodeBase64(data);
185         return new String(en);// 返回Base64编码过的字节数组字符串
186     }
187 
188 }

3.Pdf工具类

 1 import org.apache.pdfbox.pdmodel.PDDocument;
 2 import org.apache.pdfbox.rendering.PDFRenderer;
 3 import org.slf4j.Logger;
 4 import org.slf4j.LoggerFactory;
 5 import javax.imageio.ImageIO;
 6 import java.awt.image.BufferedImage;
 7 import java.io.File;
 8 import java.io.IOException;
 9 
10 public class PDFHelper {
11     private static Logger logger = LoggerFactory.getLogger(PDFHelper.class);
12     /***
13      * PDF文件转PNG图片,全部页数
14      * 
15      * @param PdfFilePath
16      * @param dpi
17      * @return
18      */
19     public static void pdfToImage(String PdfFilePath, String dstImgFolder, int dpi) {
20         File file = new File(PdfFilePath);
21         PDDocument pdDocument;
22         try {
23             String imgPDFPath = file.getParent();
24             int dot = file.getName().lastIndexOf('.');
25             String imagePDFName = file.getName().substring(0, dot); // 获取图片文件名
26             String imgFolderPath = null;
27             if (dstImgFolder.equals("")) {
28                 imgFolderPath = imgPDFPath + File.separator + imagePDFName;// 获取图片存放的文件夹路径
29             } else {
30                 imgFolderPath = dstImgFolder + File.separator + imagePDFName;
31             }
32 
33             if (FileHelper.createDirectory(imgFolderPath)) {
34                 pdDocument = PDDocument.load(file);
35                 PDFRenderer renderer = new PDFRenderer(pdDocument);
36                 /* dpi越大转换后越清晰,相对转换速度越慢 */
37                 int pages = pdDocument.getNumberOfPages();
38                 StringBuffer imgFilePath = null;
39                 for (int i = 0; i < pages; i++) {
40                     String imgFilePathPrefix = imgFolderPath + File.separator + imagePDFName;
41                     imgFilePath = new StringBuffer();
42                     imgFilePath.append(imgFilePathPrefix);
43                     imgFilePath.append("_");
44                     imgFilePath.append(String.valueOf(i + 1));
45                     imgFilePath.append(".png");
46                     File dstFile = new File(imgFilePath.toString());
47                     BufferedImage image = renderer.renderImageWithDPI(i, dpi);
48                     ImageIO.write(image, "png", dstFile);
49                 }
50                 System.out.println("PDF文档转PNG图片成功!");
51 
52             } else {
53                 logger.info("PDF文档转PNG图片失败:" + "创建" + imgFolderPath + "失败");
54             }
55 
56         } catch (IOException e) {
57             logger.info("PDF文档转PNG图片异常:" + e.getMessage());
58             e.printStackTrace();
59         }
60     }    
61 }

4.测试

1 @Test
2 public void pdfToPng() {
3 
4     String PdfFilePath = "F:/test.pdf";
5     String dstImgFolder = "F:/b";//b目录需要事先创建好
6     int dpi = 150;
7     PDFHelper.pdfToImage(PdfFilePath,dstImgFolder,dpi);
8 
9 }

 

转载于:https://www.cnblogs.com/wangliangwu/p/10000154.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值