当前位置: 首页 > news >正文

JAVA将PDF转图片

前言

当今时代,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内容一共两页,会将这两页转换成图片显示
在这里插入图片描述

最终结果

在这里插入图片描述


相关文章:

  • SSM实践基地管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目
  • 力扣LCR 100题 三角形最小路径和 C++ 动态规划 附Java代码
  • 3D数字孪生场景编辑器
  • ElasticSearch02
  • PostgreSQL数据库初接触
  • ElasticSearch01
  • 大便后的多巴胺
  • oracle的debjob挂載及查詢
  • RF-遥控器远程调试
  • 什么是工业物联网(IOT)?这样的IOT平台你需要吗?——青创智通
  • SELinux零知识学习二十九、SELinux策略语言之类型强制(14)
  • 聚类笔记:HDBSCAN
  • springboot2.1升级2.7报引入groovy4.0报找不到org.codehaus.groovy4.0的问题
  • Scrapy爬虫异步框架(一篇文章齐全)
  • HDFS元数据管理/磁盘清理维护
  • ubuntu操作系统中docker下Hadoop分布式前置环境配置实验
  • Java LinkedList
  • Rust开发——数据对象的内存布局
  • Jacobi迭代与SOR迭代求解希尔伯特矩阵
  • C++多线程学习(三):锁资源管理和条件变量
  • 电影路演,虚幻狂欢?
  • 游戏论|暴君无道,吊民伐罪——《苏丹的游戏》中的政治
  • 巴基斯坦对印度发起网络攻击,致其约70%电网瘫痪
  • 人民日报钟声:平等对话是解决大国间问题的正确之道
  • 上海第四批土拍成交额97亿元:杨浦宅地成交楼板单价半年涨近7000元
  • 国家发改委:美芯片药品等领域关税影响全球科技发展,损害人类共同利益