最简单通用的方法就是使用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. xmind修改默认配置
  2. springboot 不响应字段为空_面试官扎心一问:Tomcat 在 SpringBoot 中是如何启动的?...
  3. NBear.Mapping使用教程(5):实体对象与NameValueCollection,Dicitonary以及NBear.Mapping性能
  4. 多路I/O转接之select模型
  5. 数据结构之链表(Linked list)
  6. Kali2.0中peda与pwntools的安装
  7. 使用verdaccio搭建npm私服
  8. HFSS19 官方中文教程系列 L02
  9. 一些不为人知的秘密[迅雷和快播]
  10. 常用CSS的命名规范:
  11. 超级好用的画图吸色工具FastSton Capture
  12. 2021申请google开发者账号流程
  13. php 修改图像大小,如何改变图片大小
  14. 字节跳动实习生转正工资_上海实习 | 字节跳动 广告设计实习生
  15. mysql错误代码1813_MSSQL2000数据库附加错误1813解决方案
  16. 在Ubuntu中使用Onedrive
  17. Redis Cluster内存爆满
  18. 软磁材料种类、特点和应用范围
  19. 金地集团三季报:归母净利润同比降超三成,仍存债务压力
  20. 【NC204267】牛牛染颜色

热门文章

  1. CryEnging5.5源码+编辑器完全编译(2018-9-30)
  2. Spring AOP之@Around,@AfterReturning使用、切不进去问题解决
  3. ECharts关于y轴刻度调整
  4. 如何用HTML5开发一款手机游戏
  5. 中级微观经济学:Chap 4 效用
  6. JQuery入门学习教程
  7. HTML转换为PDF介绍
  8. 中国大学MOOC-陈越、何钦铭-数据结构-2022春期中考试
  9. php checkmobile,如何在php中檢查請求是來自移動設備還是計算機
  10. WriteFile操作时返回87错误