maven依赖:
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.12</version>
</dependency>
导包:
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
工具类代码:
/**
* 自由确定起始页和终止页
*
* @param fileAddress 文件地址 如:C:/Users/user/Desktop/test
* @param filename PDF文件名不带后缀名
* @param indexOfStart 开始页 开始转换的页码,从0开始
* @param indexOfEnd 结束页 停止转换的页码,-1为全部
* @param type 图片类型 png 和jpg
*/
public static void pdf2png(String fileAddress, String filename, int indexOfStart, int indexOfEnd, String type) {
long startTime = System.currentTimeMillis();
// 将文件地址和文件名拼接成路径 注意:线上环境不能使用/拼接
File file = new File(fileAddress + File.separator + filename + ".pdf");
try {
PDDocument doc = PDDocument.load(file);
PDFRenderer renderer = new PDFRenderer(doc);
int pageCount = doc.getNumberOfPages();
System.out.println(pageCount);
if (indexOfEnd==-1) {
indexOfEnd = pageCount;
}
for (int i = indexOfStart; i < indexOfEnd; i++) {
// dpi为144,越高越清晰,转换越慢
BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI
// 将图片写出到该路径下
ImageIO.write(image, type, new File(fileAddress + "/" + filename + "_" + (i + 1) + "." + type));
}
long endTime = System.currentTimeMillis();
System.out.println("共耗时:" + ((endTime - startTime) / 1000.0) + "秒"); // 转换用时
} catch (IOException e) {
e.printStackTrace();
}
}
根据测试发现图片类型只能传png ,传jpg会生成失败,有错误的地方烦请指正,感谢。