0%

java实现pdf转为图片

[toc]Java实现pdf转为图片

首先创建一个maven工程 在pom.xml文件导入包的依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<dependencies>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>fontbox</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.develouz.view/pdfreader -->
<!-- pdf水印 -->
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
</dependencies>>

第二步 在Java路径下创建一个子类PDF2IMAGE

然后导入包

1
2
3
4
5
6
7
8
9
10
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;

import com.lowagie.text.pdf.PdfReader;

主体结构

1
2
3
4
public class PDF2IMAGE {
public static void main(String[] args) {
pdf2Image("C:/Users/peng/Downloads/1.pdf", "D:/pdf2", 300);
}

主要利用pdf2Image方法

代码见下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public static void pdf2Image(String PdfFilePath, String dstImgFolder, int dpi) {
File file = new File(PdfFilePath);
PDDocument pdDocument;
try {
String imgPDFPath = file.getParent();
int dot = file.getName().lastIndexOf('.');
String imagePDFName = file.getName().substring(0, dot); // 获取图片文件名
String imgFolderPath = null;
if (dstImgFolder.equals("")) {
imgFolderPath = imgPDFPath + File.separator + imagePDFName;// 获取图片存放的文件夹路径
} else {
imgFolderPath = dstImgFolder + File.separator + imagePDFName;
}

if (createDirectory(imgFolderPath)) {

pdDocument = PDDocument.load(file);
PDFRenderer renderer = new PDFRenderer(pdDocument);
/* dpi越大转换后越清晰,相对转换速度越慢 */
PdfReader reader = new PdfReader(PdfFilePath);
int pages = reader.getNumberOfPages();
StringBuffer imgFilePath = null;
for (int i = 0; i < pages; i++) {
String imgFilePathPrefix = imgFolderPath + File.separator + imagePDFName;
imgFilePath = new StringBuffer();
imgFilePath.append(imgFilePathPrefix);
imgFilePath.append("_");
imgFilePath.append(String.valueOf(i + 1));
imgFilePath.append(".png");
File dstFile = new File(imgFilePath.toString());
BufferedImage image = renderer.renderImageWithDPI(i, dpi);
ImageIO.write(image, "png", dstFile);
}
System.out.println("PDF文档转PNG图片成功!");

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

} catch (IOException e) {
e.printStackTrace();
}
}

三个参数

PdfFilePath:pdf文件所在的位置 例如 C:/Users/peng/Downloads/1.pdf (这里注意 如果文件名是中文不行的话就换成数字)

dstImgFolder:pdf文件转换成图片所在的位置 例如 D:/pdf2

dpi :清晰度 越高图片越清晰! 但是也转的最慢

File file = new File(PdfFilePath);

这是创建了一个文件在pdfFilePath的对象

String imgPDFPath = file.getParent();

返回文件的路径

imgPDFPath为文件路径

java.io.File.getName() 方法返回的路径名的名称序列的最后一个名字,这意味着表示此抽象路径名的文件或目录的名称被返回

file.getName()即1.pdf

​ int dot = file.getName().lastIndexOf(‘.’)

lastIndexOf代表返回1.pdf .所在的位置 即第一位

dot是点所在的位置 即1.pdf里面

file.getName().substring(0, dot) 获取文件名 得到文件名 1.pdf得到1

其实 File.separator 的作用相当于 ‘ \ ‘(在windows下) linux下相当于 /

即图片存储位置为 D:\pdf2\1