Java PDF转图片
gitee地址:https://gitee.com/dobest-li/java-tools
里边的PDF2Image.java
效果:
先看效果,效果就是这样将PDF输出为图片,如果是您需要的,可以参考本篇代码。
环境
maven
pom.xml文件
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.23</version>
</dependency>
代码
public class PdfTool {
//返回Pair为了可以得到想要的数值,通过Pair去传递
//这个是全部的页数转为图片
public static Pair<Boolean, Object> pdfToImage(String fileSource, String desFilePath, String desFileName, String imageType) {
System.out.println("source"+fileSource);
System.out.println("desFilePath"+desFilePath);
//通过给定的源路径名字符串创建一个File
File file = new File(fileSource);
if (!file.exists()) {
return Pair.of(false, "文件不存在,无法转化");
}
//目录不存在则创建目录
File destination = new File(desFilePath);
if (!destination.exists()) {
boolean flag = destination.mkdirs();
System.out.println("创建文件夹结果:" + flag);
}
PDDocument pdfDoc = null;
try {
//加载PDF文件
pdfDoc = PDDocument.load(file);
PDFRenderer renderer = new PDFRenderer(pdfDoc);
//获取PDF文档的页数
int pageNum = pdfDoc.getNumberOfPages();
System.out.println("文档一共" + pageNum + "页");
List<Object> fileList = new ArrayList<>();
for (int i = 0; i < pageNum; i++) {
//只有一页的时候文件名为传入的文件名,大于一页的文件名为:文件名_自增加数字(从1开始)
String realFileName = pageNum > 1 ? desFileName + "_" + (i + 1) : desFileName;
//每一页通过分辨率和颜色值进行转化
BufferedImage bufferedImage = renderer.renderImageWithDPI(i, 96 * 2, ImageType.RGB);
String filePath = desFilePath + File.separator + realFileName + "." + imageType;
//写入文件
ImageIO.write(bufferedImage, imageType, new File(filePath));
System.out.println(filePath);
//文件名存入list
fileList.add(filePath);
}
return Pair.of(true, fileList);
} catch (IOException e) {
System.out.println("PDF转化图片异常");
e.printStackTrace();
return Pair.of(false, "PDF转化图片异常");
} finally {
try {
if (pdfDoc != null) {
pdfDoc.close();
}
} catch (IOException e) {
System.out.println("关闭文档失败");
e.printStackTrace();
}
}
}
//单个页数转为图片
public static Pair<Boolean, Object> pdfToImageByOnePage(String fileSource, String filePath, String fileName, String imageType) {
System.out.println("source------------>"+fileSource);
System.out.println("desFilePath------->"+filePath);
//通过给定的源路径名字符串创建一个File实例
File file = new File(fileSource);
if (!file.exists()) {
return Pair.of(false, "文件不存在,无法转化");
}
//目录不存在则创建目录
File destination = new File(filePath);
if (!destination.exists()) {
boolean flag = destination.mkdirs();
System.out.println("创建文件夹结果:" + flag);
}
PDDocument pdfDoc = null;
try {
System.out.println("加载PDF文件");
//加载PDF文件
pdfDoc = PDDocument.load(file);
PDFRenderer renderer = new PDFRenderer(pdfDoc);
//获取PDF文档的页数,在需要的情况下 这边获得了所有的页数,这时候就可以得到所有的pdf导出的图片
int pageAllNum = pdfDoc.getNumberOfPages();
String myFilePath = "";
String filePathBySpilt="";
for (int i = 0; i < 1; i++) {
//每一页通过分辨率和颜色值进行转化
BufferedImage bufferedImage = renderer.renderImageWithDPI(i, 96 * 2, ImageType.RGB);
filePath = filePath + File.separator + fileName + "." + imageType;
filePathBySpilt = File.separator +fileName + "." + imageType;
//写入文件
ImageIO.write(bufferedImage, imageType, new File(filePath));
System.out.println(filePathBySpilt);
}
System.out.println("即将拿出第一页");
return Pair.of(true, filePathBySpilt);
} catch (IOException e) {
System.out.println("PDF转化图片异常");
e.printStackTrace();
return Pair.of(false, "PDF转化图片异常");
} finally {
try {
if (pdfDoc != null) {
pdfDoc.close();
}
} catch (IOException e) {
System.out.println("关闭文档失败");
e.printStackTrace();
}
}
}
}
测试
@Test
void testPdfTool(){
PDFTools.pdfToImageByOnePage("xxx\\黑洞xxx.pdf","xxxx\\xxx","黑洞","jpg");
}