前言
当今时代,PDF 文件已经成为了常用的文档格式。然而,在某些情况下,我们可能需要将 PDF 文件转换为图片格式,以便更方便地分享和使用。这时,我们可以使用 Java 编程语言来实现这个功能。Java 提供了许多库和工具,可以帮助我们将 PDF 文件转换为图片格式并进行后续处理。
框架用的若依框架
引入依赖
<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version></dependency>
转换方法
/*** PDF转图片* @param inputStream:文件输入流* @return*/ public static List<String> pdfToImageBuInput(InputStream inputStream){ List<String> imageList = new ArrayList<>(); PDDocument document = null; try { // 加载PDF文档 document = PDDocument.load(inputStream); // 创建PDFRenderer对象 PDFRenderer renderer = new PDFRenderer(document); List<BufferedImage> images = new ArrayList<>(); for (int i = 0; i < document.getNumberOfPages(); i++) {/*** 《 72 》 此处设置得越大像素越高,生成得时候也会越久* DPI 的设置一般根据具体的需求和使用场景来决定。DPI 越高,生成的图片分辨率越大,图像质量也越高,* 但同时文件大小也会变得更大。通常情况下,如果需要对生成的图片进行放大、裁剪等操作,建议将 DPI 设置得较高,* 以保证图像质量和细节的清晰度;如果只是需要简单地浏览或共享图片,可以适当降低 DPI 以减小文件大小。在实际开发中,* 可以根据不同的应用场景进行调整。一般来说,72 DPI 是一个比较常见的默认值,可以作为参考。*/ BufferedImage image = renderer.renderImageWithDPI(i, 72, ImageType.RGB); images.add(image); } for (int i = 0; i < images.size(); i++) { String name =System.currentTimeMillis() + i + 1 + ".png"; // 时间戳生成名称并+1 String imagesPath = RuoYiConfig.getProfileImages() + "/" + name; // 保存图片到文件 ImageIO.write(images.get(i), "PNG", new File(imagesPath)); String webPath = FileUploadUtils.getPathFileName(RuoYiConfig.getProfileImages(), name); imageList.add(webPath); } return imageList; } catch (Exception e) { e.printStackTrace(); return null; } finally { // 关闭文档 try { if (document != null) { document.close(); } if (inputStream != null) { inputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } }
测试方法
@PostMapping("/uploadNews")public AjaxResult uploadNews(MultipartFile file) { try {//返回文件路径地址结果集 List<String> list = PdfToImageUtils.pdfToImageBuInput(file.getInputStream()); AjaxResult ajax = AjaxResult.success(); ajax.put("list", list);//上传文件名称 return ajax; } catch (Exception e) { e.printStackTrace(); return AjaxResult.error(e.getMessage()); } }
测试请求
返回结果为图片路径
PDF内容如下
PDF内容一共两页,会将这两页转换成图片显示