解决问题1:引入包
<!-- pdf工具 -->
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>fontbox</artifactId>
</dependency>
<!-- 解决图片丢失 -->
<dependency>
<groupId>com.github.jai-imageio</groupId>
<artifactId>jai-imageio-jpeg2000</artifactId>
<version>1.4.0</version>
</dependency>
2、代码示例
/**
* 将pdf指定页转换为图片
* @param imagePath 保存到图片
* @param pdfUrl pdf地址
* @param dpi 转换质量,越大质量越好,最好不超过200
* @param page 指定页码,从1 开始
* @param imgType jpg/png
* @throws IOException
*/
public static boolean PDFToImg(String imagePath, String pdfUrl, int dpi, int page, String imgType){
boolean result = false;
File imgFile = new File(imagePath);
File file = new File(pdfUrl);
/* dpi越大转换后越清晰,相对转换速度越慢 */
try(FileImageOutputStream imageOutput = new FileImageOutputStream(imgFile);
FileInputStream inputStream = new FileInputStream(file);
PDDocument pdDocument = PDDocument.load(inputStream);) {
PDFRenderer renderer = new PDFRenderer(pdDocument);
int pages = pdDocument.getNumberOfPages();
if (page <= pages && page > 0) {
BufferedImage bufferedImage = renderer.renderImageWithDPI(page-1,dpi);
ImageIO.write(bufferedImage, imgType, imageOutput);
}
result = true;
} catch (Exception e) {
log.error(e.getMessage(),e);
}
return result;
}
调用:
//dpi最好不超过200
boolean r = FileUtil.PDFToImg("D:/WORK/data/recog/cut_pdf/145c2cf0cc2447ff91e65a6fdb41b29b-1.png", "D:/WORK/data/recog/cut_pdf/145c2cf0cc2447ff91e65a6fdb41b29b-1.pdf", 200, 1, "png");