方案一 icepdf转png

入坑指南

由于icepdf转png时,如果pdf中存在中文有可能会出现乱码问题,引文pdf转png时,使用pdf中的字体,所以需要使用pdf阅读器查看当前使用的pdf使用的所有字体,尤其是中文字体,务必保证pdf中使用的字体全部安装到服务器,有条件的话尽量提前在正式服务器上验证是否会出现乱码,具体查看pdf中使用的全部字体,方法参考:点击查看

本人不建议使用icepdf这个三方工具类,因为我遇到了服务器上由于字体问题导致乱码问题,解决起来,很麻烦。推荐使用方案二

使用指南

项目添加依赖:
<!-- https://mvnrepository.com/artifact/org.icepdf.os/icepdf-core -->

<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>
具体使用的代码:
/*** 根据pdfurl转png图片* @param url pdfurl* @return 转成本地png文件地址集合,使用后需要删除* @throws InterruptedException*/
public static List<String> pdf2Image(String url) throws InterruptedException {// pdf转成本地png结果集合List<String> localPathPngList = Lists.newArrayList();Document document = new Document();try{// 此处会进行url地址的链接解析、流转换document.setUrl(new URL(url));// 缩放比例float scale = 2.0f;// 旋转角度float rotation = 0f;String uuid = UUID.randomUUID().toString().replaceAll("-","");String toLocalDir = "/Users/wucj/Desktop/pdfToPng/";toLocalDir = toLocalDir + uuid+"/";Stopwatch stopwatch = Stopwatch.createStarted();String toLocalPngPathName = "";for (int i = 0; i < document.getNumberOfPages(); i++) {BufferedImage image = (BufferedImage)document.getPageImage(i, GraphicsRenderingHints.SCREEN, org.icepdf.core.pobjects.Page.BOUNDARY_CROPBOX, rotation, scale);RenderedImage rendImage = image;try {toLocalPngPathName = toLocalDir+i+".png";File file = new File(toLocalPngPathName);File dirParentFile = new File(file.getParent());if(!dirParentFile.exists()){dirParentFile.mkdirs();}ImageIO.write(rendImage, "png", file);log.info("给定pdf的url转png,url:{},操作成功",url);localPathPngList.add(toLocalPngPathName);} catch (IOException e) {log.error("url转png,url:{},异常:{}",url,e);}finally {if(null!=image){image.flush();}}}log.info("pdf转png响应耗时:{}毫秒",stopwatch.elapsed(TimeUnit.MICROSECONDS));return localPathPngList;}catch (Exception e){log.error("给定pdf的url:{}链接建立异常:{}",url,e);return Lists.newArrayList();}finally {if(null!=document){document.dispose();}}
}

方案二 pdfbox转png

<dependency><groupId>org.apache.pdfbox</groupId><artifactId>fontbox</artifactId><version>2.0.15</version></dependency><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.15</version></dependency>
@Slf4j
public class PdfBoxToPngUtils {private static final String toLocalDir = "/data/logs";/*** pdf url地址转图片* @param pdfUrl pdf url* @return List<String>*/public static List<String> pdfToPngAndUpload(String pdfUrl){List<String> localFilePathList = pdfUrlToLocalPdf(pdfUrl);if(CollectionUtils.isEmpty(localFilePathList)){return Lists.newArrayList();}// 文件名称String localFileName = "";// png文件的后缀String pngSuffix = ".png";// 转换成功之后的png urlString pngUrl = "";List<String> pngUrlList = Lists.newArrayList();for (String localFilePath : localFilePathList) {String[] localFilePathArr = localFilePath.split("\\/");if(localFilePathArr.length>1){localFileName = localFilePathArr[localFilePathArr.length-1];}try{if(!StringUtils.isBlank(localFileName)&&localFileName.contains(pngSuffix)){pngUrl = CloudUtil.uploadFile(UcloudConfig.BUCKET_DEVELOP, localFilePath, localFileName);if(!StringUtils.isBlank(pngUrl)){pngUrlList.add(pngUrl);}}else{log.info("本地临时文件:{},上传至ucloud地址:{}",localFilePath,pngUrl);}}catch (Exception e){log.error("本地临时文件:{}上传至ucloud异常:{}",localFilePath,e);}finally {// 本地文件上传至服务器之后,删除本地缓存log.info("删除本地文件,{}", localFilePath);com.mryx.fms.invoice.common.util.FileUtils.deleteFile(localFilePath);}}return pngUrlList;}/*** 网络pdf url文件转图片* @param url pdf网络文件* @return 集合*/public static List<String> pdfUrlToLocalPdf(String url){String filePath = toLocalDir+"/"+ UUIDUtil.create() +".pdf";try{org.apache.commons.io.FileUtils.copyURLToFile(new URL(url),new File(filePath),1000*60,1000*60);}catch (Exception e){log.error("pdfbox转png异常:{}",e);return Lists.newArrayList();}try{return pdfToImagePath(filePath);}catch (Exception e){log.error("pdfbox转png异常:{}",e);return Lists.newArrayList();}finally {// 删除本地保存的临时文件FileUtils.deleteQuietly(new File(filePath));}}/*** 将PDF按页数每页转换成一个jpg图片* @param pdfFilePath 本地pdf文件路径* @return 转换后的图片本地地址集合*/public static List<String> pdfToImagePath(String pdfFilePath){List<String> list = new ArrayList<>(16);String imagePath;File file = new File(pdfFilePath);PDDocument doc = null;try {File f = new File(toLocalDir);if(!f.exists()){f.mkdir();}doc = PDDocument.load(file);PDFRenderer renderer = new PDFRenderer(doc);int pageCount = doc.getNumberOfPages();for(int i=0; i<pageCount; i++){/*** 方式1,第二个参数是设置缩放比(即像素) renderImageWithDPI(i, 296);* 方式2,第二个参数是设置缩放比(即像素) 第二个参数越大生成图片分辨率越高,转换时间也就越长*/BufferedImage image = renderer.renderImage(i, 1.25f);imagePath = toLocalDir + "/"+UUIDUtil.create() + ".png";ImageIO.write(image, "PNG", new File(imagePath));list.add(imagePath);}} catch (IOException e) {log.error("pdfbox转图片异常:{}",e);}finally {if(null!=doc){try {// 关闭文件,不然该pdf文件会一直被占用。doc.close();} catch (IOException e) {e.printStackTrace();}}}return list;}}

java pdf转png相关推荐

  1. java pdf 多页转换为png格式的图片

    java pdf 多页转换为png格式的图片  适用于 无论pdf有多少页均可 废话不说,直接上代码 import java.awt.Graphics; import java.awt.image.B ...

  2. java -PDF添加文本水印与图片水印

    java pdf添加水印文本及图片文本 PDF文件添加文本水印: private static int interval = 30;public static voidwaterMark(String ...

  3. java pdf验签_java pdf验签

    java pdf验签 [2021-02-09 19:35:21]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/(\s ...

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

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

  5. java pdf库_Java中常用的操作PDF的类库

    iText iText是一个能够快速产生PDF文件的java类库.iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的.它的类库尤其与java Servlet有很好的给合.使用 ...

  6. java pdf替换内容_java PDF批量替换关键词

    java PDF批量替换关键词 要求:将要替换的字段封装到一个类中,并规定字段名与PDF中关键字的映射. 准备: 关键词信息类-----MatchItem package pdf.replace; i ...

  7. 10 本 Java PDF 书籍免费分享

    极力推荐文章:欢迎收藏 Android 干货分享 本篇文章主要分享以下Java开发PDF书籍 一.Java编程思想 二.Effective Java 三.Java核心技术卷 四.Java并发编程实践 ...

  8. Java PDF数字签名(五)—Java 给PDF签名时添加可信时间戳

    一.程序运行环境 编译环境:IntelliJ IDEA 所需测试文件:PDF..pfx数字证书及密钥.PDF Jar包(Free Spire.PDF for Java).签名图片(.png格式) 可信 ...

  9. Big Faceless Java PDF Library[bfopdf]

    用于创建.编辑.显示和打印 Acrobat PDF 文档的最智能的 PDF 库.PDF API 体积小.速度快.易于使用并集成到您的项目中,并且完全用 Java 编写. 产品概览 PDF 库读取和写入 ...

  10. Big Faceless Java PDF Library[BFO]

    Big Faceless Organization (BFO)是KSM有限公司的贸易名称,是一家英国的私营公司.我们为国际性的企业对企业的电子商务市场开发高质量的Java软件组件.BFO成立于1998 ...

最新文章

  1. 1282. Game Tree
  2. 牛客网 短最优升级路径 【Dijkstra算法】+【路径记录】
  3. how is object structure really created - when the child equipment is downloaded
  4. Centos7 下安装mariadb及其基本操作
  5. 查询mysql数量_Linux 运维基础 Mysql性能优化
  6. 【揭秘】一个小团队真正能落地的微服务架构实践
  7. jQuery基础(鼠标事件,表单事件,键盘事件,自定义事件 篇)
  8. #【软件stm32cubeIDE下配置STM32F407uart1调试SBUS模块-学习笔记-基础样例-遥控小车与四轴模板】
  9. 数据结构-带头双向循环链表
  10. 华硕aura完全卸载_AURA神光同步是什么意思?AURA SYNC神光同步教程
  11. Django之开发微信小程序后端-Django篇②
  12. 服务器搭建是基于操作系统的,服务器搭建是基于操作系统的
  13. 2018,灵魂无处安放的一年
  14. 【web】百度地图中心点始终出现在左上角,或者灰蒙蒙的
  15. CV领域的对比学习综述(下)
  16. 以考代评职称需要聘任嘛_如何以正确的方式聘用:工程师对技术招聘的看法
  17. [WTL/ATL]_[Gdiplus]_[绘制虚线并设置破折号空格的宽度]
  18. [墨者学院] Windows硬盘文件分析取证(新建的用户名)
  19. linux 命令硬盘指示灯闪烁,macOS下移动硬盘无法挂载且硬盘灯一直闪烁的解决方法...
  20. 【2016ACM/ICPC亚洲区大连站C】HDU - 5973 Game of Taking Stones 威佐夫博弈

热门文章

  1. FlyFish开发者说|开源低代码平台的体验与思考
  2. OnlyOffice 二次开发定制化部署
  3. FL Studio 21中文版支持主题随心换,FL Studio 21Mac版新增对苹果M2/1家族芯片原生支持。
  4. 电脑系统更新后桌面的文件全部不见了怎么恢复?
  5. 半条命2服务器无响应,半条命2游戏常见问题解决方法
  6. 小程序上线后部分图片不显示的问题
  7. linux 代码格式化工具下载,Linux 代码格式化工具 indent
  8. 微服务项目:尚融宝(40)(核心业务流程:申请借款额度(3))
  9. 遗传算法解决城市TSP问题
  10. 分类计数原理与分步计数原理_分类加法计数原理与分步乘法计数原理的解题策略之一...