话不多说直接上代码
依赖
<!--pdf 转 png 多页-->
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.21</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox-tools</artifactId>
<version>2.0.9</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
代码
package com.admin.common.util.pdf;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/**
* @author 小于转暴雨🌧
* @date 2023/3/1 14:53
*/
public class Pdf2Png {
public static void main(String[] args) {
File file = new File("E:\\git\\hosp_front\\public\\view\\20230216\\张金妹.pdf");
String ta = "E:\\git\\hosp_front\\public\\view\\20230216\\张金妹.png";
int a = 20;
pdfFileToImage(file,ta,a);
}
/**
* pdf文件图像
* 这里的路径一定要具体到文件本身,不能直到文件夹,
* 如果只到文件夹会出现拒绝访问的错误,具体可以看上面main方法
*
* @param pdffile pdf路径
* @param targetPath 图片路径
* @param height_offset 高度
*/
public static void pdfFileToImage(File pdffile, String targetPath,int height_offset) {
try {
FileInputStream instream = new FileInputStream(pdffile);
InputStream byteInputStream = null;
try {
PDDocument doc = PDDocument.load(instream);
PDFRenderer renderer = new PDFRenderer(doc);
int pageCount = doc.getNumberOfPages();
List<BufferedImage> list = new ArrayList<BufferedImage>();
if (pageCount > 0) {
int totalHeight = 0;
int width = 0;
for (int i = 0; i < pageCount; i++) {
BufferedImage image = renderer.renderImage(i, 1.25f);
list.add(image);
totalHeight += image.getHeight();
if (width < image.getWidth()) {
width = image.getWidth();
}
image.flush();
}
BufferedImage tag = new BufferedImage(width, totalHeight, BufferedImage.TYPE_INT_RGB);
tag.getGraphics();
Graphics g = tag.createGraphics();
int startHeight = 0;
for (BufferedImage image : list) {
g.drawImage(image, 0, startHeight, width, image.getHeight(), null);
g.drawImage(image, 0, startHeight, width, image.getHeight(), null);
startHeight += image.getHeight() + height_offset;
}
g.dispose();
ByteArrayOutputStream bs = new ByteArrayOutputStream();
ImageOutputStream imOut;
imOut = ImageIO.createImageOutputStream(bs);
ImageIO.write(tag, "png", imOut);
byteInputStream = new ByteArrayInputStream(bs.toByteArray());
byteInputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
File uploadFile = new File(targetPath);
FileOutputStream fops;
fops = new FileOutputStream(uploadFile);
fops.write(readInputStream(byteInputStream));
fops.flush();
fops.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static byte[] readInputStream(InputStream inStream) throws Exception {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
inStream.close();
return outStream.toByteArray();
}
}