🤞Java系列:快速实现PDF转图片🤞 PDFBox是一个BSD许可下的源码开放项目,它是一个专门为开发人员读取和创建PDF文档而准备的纯Java类库。 文本提取:PDFBox可以从PDF文档中提取文本,包括Unicode字符。 表单处理:PDFBox支持从PDF表单中提取数据,或者是填充PDF表单。 加密与解密:可以对PDF文档进行加密和解密操作。 合并与分割:可以将多个PDF文档合并成一个,也可以将一个PDF文档分割成多个。 覆盖与追加:可以覆盖PDF文档的内容,或者向已有的PDF文档中追加内容。 打印:利用Java的打印API,PDFBox可以将PDF文档输出到打印机。 转换:PDFBox可以将PDF文档转换成映像文件,如PNG或JPEG格式。 创建PDF:可以从头开始创建新的PDF文档,包括添加图像和字体。 集成Lucene搜索引擎:PDFBox与Jakarta Lucene等文本搜索引擎的整合过程十分简单,可以用于PDF文档的索引和搜索。
<!--pdf转图片-->
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.29</version>
</dependency>
import lombok.extern.slf4j.Slf4j;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: 公众号:知识浅谈
* @Description: pdf转图片工具类
* @Version: 1.0
*/
@Slf4j
public class PdfToImageUtil {
/*dpi 越大图片越清晰*/
private static final Integer DPI = 100;
/*转换后图片类型*/
private static final String IMG_TYPE = "jpg";
/**
* PDF转图片(多页)
* @param fileContent pdf文件的二进制流
* @return 图片文件的二进制流
* @throws Exception
*/
public static List<byte[]> pdfToImage(byte[] fileContent) throws Exception {
List<byte[]> imageList = new ArrayList<byte[]>();
PDDocument document=null;
try{
document = PDDocument.load(fileContent);
PDFRenderer pdfRenderer = new PDFRenderer(document);
for (int i = 0; i < document.getNumberOfPages(); i++) {
BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(i, DPI);
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, IMG_TYPE, out);
imageList.add(out.toByteArray());
}
}finally {
document.close();
}
return imageList;
}
/**
* PDF转图片(单页)
* @param fileContent pdf文件的二进制流
* @return 图片文件的二进制流
* @throws Exception
*/
public static byte[] pdfToImageOne(byte[] fileContent) throws Exception {
byte[] image = null;
PDDocument document=null;
try{
document = PDDocument.load(fileContent);
PDFRenderer pdfRenderer = new PDFRenderer(document);
BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(0, DPI);
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, IMG_TYPE, out);
image = out.toByteArray();
}finally {
document.close();
}
return image;
}
public static Boolean saveImage(byte[] imageBytes, String savePath,String fileName) throws Exception {
try {
BufferedImage image = ImageIO.read(new ByteArrayInputStream(imageBytes));
File directory = new File(savePath);
if(!directory.exists()){
directory.mkdirs();
}
File file1 = new File(directory,fileName);
return ImageIO.write(image, IMG_TYPE, file1);
} catch (IOException e) {
log.error("保存文件错误");
return false;
}
}
}
* pdf转图片
*/
@GetMapping(value = "/pdfToPng")
@Log(title = "证件模板", businessType = BusinessType.OTHER)
public void pdfToPng(HttpServletRequest request,HttpServletResponse response) {
try {
File file = new File("D:\\pdf\\test.pdf");
FileInputStream fileInputStream = new FileInputStream(file);
byte[] pdfBytes = new byte[(int) file.length()];
fileInputStream.read(pdfBytes);
fileInputStream.close();
byte[] bytes = PdfToImageUtil.pdfToImageOne(pdfBytes);
ServletOutputStream outputStream = response.getOutputStream();
response.setContentType("image/jpeg");
response.setContentLength(bytes.length);
outputStream.write(bytes);
}catch (Exception e){
log.error("pdf转图片异常{}", e.getMessage());
}
}
运行之后显示的结果如下
大功告成,撒花致谢🎆🎇🌟
Writted By 知识浅谈
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有