Java快速实现PDF转图片功能实例代码
作者:知识浅谈
PDFBox是一个开源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>
编写PdfToImageUtil 工具类
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()); } }
运行之后显示的结果如下
总结
到此这篇关于Java快速实现PDF转图片功能的文章就介绍到这了,更多相关Java PDF转图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!