最简单通用的方法就是使用POI来转换,但是转换的图片清晰度很低,即使调高了倍数还是和原图有差距,而且随着设置图片倍数的提高内存占用也变得十分巨大,在IDEA中甚至会出现OOM的情况。下面贴一下使用POI转换的代码:

<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>4.1.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.0</version></dependency><dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.8</version></dependency>
    /*** @param pptFile PPT文件* @param imgFile 图片将要保存的路径目录(不是文件)* @param times 图片被放大的倍数,越大越接近原图,但是内存可能会溢出* @return*/
public static boolean pptToImage(File pptFile, File imgFile, int times) {FileInputStream is = null ;try {is = new FileInputStream(pptFile);XMLSlideShow xmlSlideShow = new XMLSlideShow(is);is.close();// 获取PPT每页的大小(宽和高度)Dimension pgsize = xmlSlideShow.getPageSize();// 获得PPT文件中的所有的PPT页面(获得每一张幻灯片),并转为一张张的播放片//XSLFSlide[] slides = xmlSlideShow.getSlides();List<XSLFSlide> slides = xmlSlideShow.getSlides();for (int i = 0 ; i < slides.size() ; i++) {// 解决乱码问题//XSLFShape[] shapes = slides[i].getShapes();List<XSLFShape> shapes = slides.get(i).getShapes();for (XSLFShape shape : shapes) {if (shape instanceof XSLFTextShape) {XSLFTextShape sh = (XSLFTextShape) shape;List<XSLFTextParagraph> textParagraphs = sh.getTextParagraphs();for (XSLFTextParagraph xslfTextParagraph : textParagraphs) {List<XSLFTextRun> textRuns = xslfTextParagraph.getTextRuns();for (XSLFTextRun xslfTextRun : textRuns) {xslfTextRun.setFontFamily("宋体");}}}}//根据幻灯片大小生成图片BufferedImage img = new BufferedImage(pgsize.width * times,pgsize.height * times, BufferedImage.TYPE_INT_RGB);Graphics2D graphics = img.createGraphics();graphics.setPaint(Color.white);graphics.scale(times,times);graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width * times,pgsize.height * times));// 最核心的代码slides.get(i).draw(graphics);//图片将要存放的路径String absolutePath = imgFile.getAbsolutePath()+"/"+ (i + 1) + ".jpeg";File jpegFile = new File(absolutePath);// 这里设置图片的存放路径和图片的格式(jpeg,png,bmp等等),注意生成文件路径FileOutputStream out = new FileOutputStream(jpegFile);// 写入到图片中去ImageIO.write(img, "jpeg", out);out.close();}LOGGER.info("PPT转换成图片 成功!");return true;} catch (Exception e) {LOGGER.error("PPT转换成图片 发生异常!", e);}return false;}

接下来要介绍的这个方法只能在windows上使用,一般我们的服务器都是linux所以是不适用的,但是转换的效果确实又快又好!

import win32com
import win32com.client
import sys
import os
from PIL import Image#获取当前目录
#ppt_root = png_root =sys.path[0]+"\\"
print(sys.argv[1])
ppt_root = png_root = sys.argv[1]def ppt2png(pptFileName):powerpoint = win32com.client.Dispatch('PowerPoint.Application')#是否后台运行powerpoint.Visible = Trueppt_path = ppt_root + pptFileName# outputFileName = pptFileName[0:-4] + ".pdf"ppt = powerpoint.Presentations.Open(ppt_path)#保存为图片ppt.SaveAs(png_root + pptFileName.rsplit('.')[0] + '.png', 17) # formatType = 17 ppt转图片#保存为pdf--- 暂时不需要# ppt.SaveAs(png_root + outputFileName, 32) # formatType = 32 ppt转pdf# 关闭打开的ppt文件ppt.Close()# 关闭powerpoint软件powerpoint.Quit()if __name__ == '__main__':# 批量打开当前目录下所有的ppt文件for ppt in (pptFiles for pptFiles in os.listdir(ppt_root) if pptFiles.endswith('.pptx')):ppt2png(ppt)  # ppt导出图片#pngMontage(ppt[0:-4])  # 所有图片拼接成长图

因为导入了win32com.client所以在linux平台上无法使用,转换效果可以看一下:


ppt截图:


这个效果非常好!本质上应该是使用了office的自己的另存为图片!但是这个仅限于windows,所以如果服务器是windows就可以使用,有了ppt转图片,就可以实现在网页上播放静态ppt或者预览PPT!

windows上ppt转图片的方法相关推荐

  1. linux下ppt转图片的方法

    上篇介绍了windows上将ppt转换为图片的方法,但是在linux平台上确并无法使用,这里再介绍一下自己开发过程中使用的linux上ppt转图片的方法! 同样的,使用POI会有之前存在的清晰度以及内 ...

  2. 有道云笔记markdown上传本地图片的方法

    有道云笔记markdown上传本地图片的方法   有道云笔记markdown模式非会员发现不能直接截屏粘贴图片了.后来网上搜集了下方法,发现了好几种解决办法.   当然,如果你一年,不差那两百块钱,直 ...

  3. python泡泡_Python实现Windows上气泡提醒效果的方法

    本文实例讲述了Python实现Windows上气泡提醒效果的方法.分享给大家供大家参考.具体实现方法如下: # -*- encoding: gbk -*- import sys import os i ...

  4. 在WINDOWS上开发IOS应用的方法

    在WINDOWS上开发IOS应用的方法 1,虚拟机上安装MAC系统,里面装XCODE 2,WINDOWS上安装code blocks,这个IDE可以直接在WIN上编译XCODE工程: 最新的IOS在w ...

  5. Linux或者Windows上安装lxml失败解决方法

    Linux或者Windows上安装lxml失败解决方法. 在Windows上安装失败,失败原因及解决方法总结如下: 1.pip版本未更新解决方法:通过pip安装时,需保证pip的版本没有问题,更新方法 ...

  6. 使Celery 4在Windows上运行的2种方法

    该博客文章中使用的源代码可在GitHub上找到. 自Celery 4.x版本起,Celery不再正式支持Windows.尽管Celery 3确实支持Windows,但它与Celery 4不兼容.因此, ...

  7. php窗口滚动代码_PHP自动在页面上滚动展示图片的方法

    这篇文章主要介绍了PHP实现自动对图片进行滚动显示的方法,涉及php操作图片特效的技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了PHP实现自动对图片进行滚动显示的方法.具体如下: 指 ...

  8. content add tpl.php,phpcms后台批量上传添加图片文章方法详解(一)

    注:以下所有代码中,红色部分为增加部分. 一.在后台增加批量添加按钮 打开"phpcms\modules\content\templates\content_list.tpl.php&quo ...

  9. MFC中在界面上添加背景图片的方法

    在利用MFC做界面监控软件时,常常需要放一个漂亮的背景图片,本文基于VS2010版本,利用MFC自带的onPaint函数添加背景图片.步骤如下: 1.准备一张BMP格式的图片文件,将其保存在项目文件夹 ...

最新文章

  1. 2021年大数据ELK(二十三):Kibana简介
  2. Appium的Java封装
  3. 经典图书《重构:改善既有代码的设计》图灵再版出版倒计时
  4. Spring5的AOP 和设备支持
  5. 版本控制--搭建 GitLab 服务器
  6. python骗局-如何识破python小课骗局_怎样选择学校呢
  7. 局域网打印机一键共享工具_AppStore今日推荐分享 支持局域网设备共享的抓包工具...
  8. MYSQL练习题:访问日期之间最大的空档期
  9. iwconfig 中 Link Quality and Signal Level 区别
  10. 实验三——Pspice
  11. java char表示范围_char取值范围
  12. 爱乐活改版未断根,改版后不伦不类
  13. 瀑布流插件masonry
  14. mariadb特有函数
  15. VB.Net几个函数split(),ubound(),lbound(),instr(),mid(),Format()与Round()
  16. 抖音共创是什么?怎么操作全集教程!
  17. 插入(希尔)排序时间、空间复杂度
  18. 超详细的bat脚本常用命令及亲测示例
  19. iOS: UIScrollView的属性zooming
  20. [Tensorflow2] 梯度反转层(GRL)与域对抗训练神经网络(DANN)的实现

热门文章

  1. H5如何与原生App(ios,安卓,RN)通信?
  2. live555服务器测试
  3. CSDN学习业务年终总结
  4. 【LeetCode】476. 数字的补数 Number Complement
  5. 3.暴力破解凯撒密码
  6. Linux 服务器上部署web程序
  7. 2022 年全球重大经济事件盘点( I )
  8. 数据库发展史2--数据仓库
  9. DB2 set current schema也能导致锁升级(lock escalation)?
  10. 关于联合体union的详细解释