PDF文件生成图片

实现功能

根据上传的PDF文件,生成图片文件,
单页PDF,生成图片文件.
多页PDF,则生成zip压缩包.

一 : 文件生成效果


二 : 引入所需maven依赖

项目采用springboot框架

 <!-- PDF转图片 --><dependency><groupId>org.icepdf.os</groupId><artifactId>icepdf-core</artifactId><version>6.2.2</version><exclusions><exclusion><groupId>javax.media</groupId><artifactId>jai_core</artifactId></exclusion></exclusions></dependency>

三 : JAVA代码工具类

生成图片工具类 PdfToImageUtil.java

package com.util;import com.lowagie.text.pdf.PdfReader;
import lombok.extern.slf4j.Slf4j;
import org.icepdf.core.pobjects.Document;
import org.icepdf.core.pobjects.Page;
import org.icepdf.core.util.GraphicsRenderingHints;
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;@Slf4j
public class PdfToImageUtil {//支持文件格式public static final String SUPPORT_FILE = "pdf";//图片文件格式public static final String IMAGE_SUFFIX = "jpg"; //png//压缩文件格式public static final String ZIP_SUFFIX = "zip";//PDF是否为一页private static boolean isImage;/*** 对外的开放接口,用于将PDF文件转换为图片文件压缩包进行下载* @param file SpringMVC获取的图片文件*/public static synchronized void pdfToTransformation(MultipartFile file, HttpServletResponse response) throws Exception {String fileName = file.getOriginalFilename();if(null == fileName) return;String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);log.info("文件名称:" + fileName + ",文件后缀:" + suffix);if(!SUPPORT_FILE.equals(suffix)) return;isImage = false;File imageFile = generateFile(file);log.info("文件生成成功!");downloadFile(imageFile, response);}/*** 将PDF文件转换为多张图片并放入一个压缩包中* @param file SpringMVC获取的图片文件* @return 图片文件压缩包* @throws Exception 抛出异常*/private static File generateFile(MultipartFile file) throws Exception {String fileName = file.getOriginalFilename();if(null == fileName) return null;Document document = new Document();document.setByteArray(file.getBytes(), 0, file.getBytes().length, fileName);log.info("PDF页数:" + document.getNumberOfPages());isImage = 1 == document.getNumberOfPages();File imageReturnFile = null;List<File> fileList = new ArrayList<>();for (int i = 0; i < document.getNumberOfPages(); i++) {BufferedImage image = (BufferedImage) document.getPageImage(i, GraphicsRenderingHints.SCREEN,Page.BOUNDARY_CROPBOX, 0F, 2.5F);File imageFile = new File((i + 1) + "." + IMAGE_SUFFIX);ImageIO.write(image, IMAGE_SUFFIX, imageFile);image.flush();if(isImage){imageReturnFile = imageFile;break;}fileList.add(imageFile);}document.dispose();if(isImage) return imageReturnFile;//压缩图片文件String directoryName = fileName.substring(0, fileName.lastIndexOf("."));File zipFile = new File(directoryName + "." + ZIP_SUFFIX);ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipFile));zipFile(fileList, zipOutputStream);zipOutputStream.close();return zipFile;}/*** 下载image/zip文件* @param downloadFile 文件* @param response HttpServletResponse* @throws IOException IO异常*/private static void downloadFile(File downloadFile, HttpServletResponse response) throws IOException {FileInputStream fileInputStream = new FileInputStream(downloadFile);byte[] bytes = new byte[fileInputStream.available()];fileInputStream.read(bytes);fileInputStream.close();//设置response参数response.reset();if(isImage){response.setContentType("image/jpeg");} else {response.setContentType("application/zip");}response.setCharacterEncoding("UTF-8");response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(downloadFile.getName(), "UTF-8"));OutputStream outputStream = response.getOutputStream();outputStream.write(bytes);outputStream.flush();outputStream.close();if(!isImage) downloadFile.delete();}/*** 压缩文件* @param inputFiles 具体需要压缩的文件集合* @param zipOutputStream ZipOutputStream对象* @throws IOException IO异常*/private static void zipFile(List<File> inputFiles, ZipOutputStream zipOutputStream) throws IOException {byte[] buffer = new byte[1024];for (File file : inputFiles) {if (file.exists()) {if (file.isFile()) {BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));zipOutputStream.putNextEntry(new ZipEntry(file.getName()));int size = 0;while ((size = bis.read(buffer)) > 0) {zipOutputStream.write(buffer, 0, size);}zipOutputStream.closeEntry();bis.close();file.delete();} else {File[] files = file.listFiles();if(null == files) continue;List<File> childrenFileList = Arrays.asList(files);zipFile(childrenFileList, zipOutputStream);}}}}/*** 获取PDF页数* @throws IOException*/public static String getPdfPageSize(MultipartFile file) throws IOException {PdfReader pdfReader = new PdfReader(file.getBytes());int pages = pdfReader.getNumberOfPages();return String.valueOf(pages);}
}

生成图片PdfController.java

package com.web.transformation.controller;import com.util.PdfToImageUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@Controller
public class PdfController {//PDF转图片或者ZIP@RequestMapping("/pdfToImage")@ResponseBodypublic void pdfToImage(MultipartFile file, HttpServletResponse response) throws Exception{PdfToImageUtil.pdfToTransformation(file,response);}//获取PDF页数@RequestMapping("/getPdfPageSize")@ResponseBodypublic String pdfToImage(MultipartFile file) throws IOException {return PdfToImageUtil.getPdfPageSize(file);}}

四 : 说明

生成的图片文件格式,可手动修改,此处设置为jpg,也可设置为png
也可将该配置,放置在yml配置文件中

五 : 相关链接

JAVA生成Zip文件并导出:
https://blog.csdn.net/qq_38254635/article/details/127364398

JAVA导出Excel文件:
https://blog.csdn.net/qq_38254635/article/details/126691175

JAVA根据模板生成WORD文件并导出:
https://blog.csdn.net/qq_38254635/article/details/103952823

JAVA根据模板生成PDF文件并导出:
https://blog.csdn.net/qq_38254635/article/details/103919024

JAVA根据PDF文件生成图片相关推荐

  1. Java合并pdf文件

    Java合并pdf文件 今天帮老师整理资料需要合并pdf文件,下了许多软件发现都需要VIP才行,所以写了个程序来帮助合并,直接在主程序中修改文件路径即可,如下图: 主要代码如下: package co ...

  2. Java实现pdf文件转图片

    Java实现pdf文件转图片 文章顺序是按照测试类- -Service- -Service实现类- -工具类- - POM依赖. test测试类里 pdfPath:存放pdf源文件的地方 imgflo ...

  3. java pdf 转换 word_如何使用Java将pdf文件转换为word文件

    如何使用Java将pdf文件转换为word文件? 而且,它看起来像它一样容易吗? 解决方法: public class PDFTextReader { static String pdftoText( ...

  4. 使用java实现pdf文件转换为jpg或者png(可以批量操作、分类存放)

    使用java实现pdf文件转换为jpg或者png(可以批量操作) 使用java代码实现将pdf转换为图片格式.支持归类,支持pdf多页分页面转换存放. 需求背景:有几百个文件夹,每个文件夹里有两个pd ...

  5. 如何用 Java 对 PDF 文件进行电子签章

    转自:如何用 Java 对 PDF 文件进行电子签章 - Ferocious - 博客园 一.概述 二.技术选型 三.生成一个图片签章 四.如何按模板生成PDF文件 五.如何生成PKSC12证书 六. ...

  6. java 合并pdf报错,[Java教程]java合并PDF文件

    [Java教程]java合并PDF文件 0 2017-02-22 12:00:52 使用java代码合并PDF文件需要导入iText-2.1.7.jar包1 import java.io.FileOu ...

  7. java获取Pdf文件页码

    java获取Pdf文件页码步骤如下: 引入依赖: <dependency><groupId>org.apache.pdfbox</groupId><artif ...

  8. iText5实现Java生成PDF文件完整版,二维码

    iText5实现Java生成PDF文件完整版 vue 项目中分别使用 vue-pdf 插件和内嵌 iframe 实现 PDF 文件预览,缩放,旋转,下载,保存等功能 ? Vue打印文件(v-print ...

  9. 咖啡汪日志——JAVA导出pdf文件加水印 文字+图片、文字

    咖啡汪日志--JAVA导出pdf文件加水印 文字和图片.文字 hello,又大家见面了! 作为一只不是在戏精就是在戏精路上的哈士奇,今天要展示给大家的就是如何快捷地给pdf文件增加各种水印.嗷呜呜,前 ...

最新文章

  1. GlusterFS下如何修复裂脑文件?(续一)
  2. [记录] --- linux上项目
  3. html频谱跳动效果,HTML5音频可视化频谱跳动代码
  4. JavaScript 中 apply 、call 的详解
  5. 如何避免向下传递回调?
  6. 程序猿,这里有你想学的10门机器学习课程 | 资源
  7. base64与base64url编码
  8. 开关电源磁性元件设计
  9. DsoFramer-辛酸泪史
  10. 联想笔记本电脑开机无法修复计算机,联想笔记本开机没反应怎么办 笔记本无法开机的解决方法...
  11. 如何在ps添加箭头_如何给图片加箭头?利用ps画箭头(任意角度),照着学就行了...
  12. ubuntu为脚本添加桌面图标
  13. msde2000修改服务器名,MSDE2000数据库怎么修改SA口令?
  14. OneNET平台创建产品
  15. 基于Swing的Java学生成绩管理系统
  16. Failure to find xxx in 中央仓库
  17. js实现复制文本及其排版格式
  18. ubuntu上的音频分析工具
  19. 陶瓷金属牙冠-市场现状及未来发展趋势
  20. 扩增子16S分析专题研讨论会——背景介绍

热门文章

  1. 透明代理、匿名代理、混淆代理、高匿代理有什么区别?
  2. 杂项-DB:DW/DWH(数据仓库)
  3. 从零开始的openGL--cs游戏(11)3种常用shader
  4. 使用拦截器防止表单重复提交
  5. PCIE设备如何降速降带宽
  6. 用c语言怎么打e的x次方
  7. 图库/相册/播放器看不到迅雷下载的视频的解决办法
  8. github Your account has been flagged.提示情况的解决办法
  9. 淘宝标题核心关键词怎么做?大神导航,一个神奇的网站,从此开启大神之路!
  10. Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)