ppt和pptx转图片完整代码,解决2003版和2007版中文乱码问题
引入所需依赖,注意poi版本,新版本不支持,最好使用和我一样的版本。
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.10-FINAL</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.10-FINAL</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>3.10-FINAL</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-scratchpad --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>3.10-FINAL</version> </dependency> <!-- https://mvnrepository.com/artifact/com.github.virtuald/curvesapi --> <dependency> <groupId>com.github.virtuald</groupId> <artifactId>curvesapi</artifactId> <version>1.06</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.xmlbeans/xmlbeans --> <dependency> <groupId>org.apache.xmlbeans</groupId> <artifactId>xmlbeans</artifactId> <version>3.1.0</version> </dependency>
调用方式:
参数fileformat:文件名后缀,例ppt、pptx
参数str:文件绝对路径
public static void saveYulanFile(String fileformat,String str) throws Exception { if(fileformat.equals("ppt") || fileformat.equals("pptx")){ PptToImage.createPPTImage(new FileInputStream(new File(str)),str.substring(0,str.indexOf("."))+"/"); } }
import org.apache.poi.POIXMLDocument; import org.apache.poi.hslf.model.Slide; import org.apache.poi.hslf.model.TextRun; import org.apache.poi.hslf.usermodel.RichTextRun; import org.apache.poi.hslf.usermodel.SlideShow; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.xslf.usermodel.XMLSlideShow; import org.apache.poi.xslf.usermodel.XSLFSlide; import org.openxmlformats.schemas.drawingml.x2006.main.*; import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape; import org.openxmlformats.schemas.presentationml.x2006.main.CTShape; import org.openxmlformats.schemas.presentationml.x2006.main.CTSlide; import java.awt.*; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.*; /** * @author :llf * @date :Created in 2020-04-09 11:56 * @description:${description} * @version: v1.0 */ public class PptToImage { public static void create2007PPTImage(InputStream in,String fileOutPath){ try { XMLSlideShow xmlSlideShow=new XMLSlideShow(in); Dimension pgsize = xmlSlideShow.getPageSize(); XSLFSlide[] slides = xmlSlideShow.getSlides(); FileOutputStream out = null; for (int i = 0;i < slides.length;i++){ CTSlide rawSlide=slides[i].getXmlObject(); CTGroupShape gs = rawSlide.getCSld().getSpTree(); CTShape[] shapes = gs.getSpArray(); for (CTShape shape : shapes) { CTTextBody tb = shape.getTxBody(); if (null == tb) continue; CTTextParagraph[] paras = tb.getPArray(); CTTextFont font=CTTextFont.Factory.parse( "<xml-fragment xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">"+ "<a:rPr lang=\"zh-CN\" altLang=\"en-US\" dirty=\"0\" smtClean=\"0\"> "+ "<a:latin typeface=\"+mj-ea\"/> "+ "</a:rPr>"+ "</xml-fragment>"); for (CTTextParagraph textParagraph : paras) { CTRegularTextRun[] textRuns = textParagraph.getRArray(); for (CTRegularTextRun textRun : textRuns) { CTTextCharacterProperties properties=textRun.getRPr(); properties.setLatin(font); } } } BufferedImage img=new BufferedImage(pgsize.width,pgsize.height, BufferedImage.TYPE_INT_RGB); Graphics2D graphics=img.createGraphics(); graphics.setPaint(Color.WHITE); graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width,pgsize.height)); slides[i].draw(graphics); out = new FileOutputStream(fileOutPath+i+".png"); javax.imageio.ImageIO.write(img, "png", out); } out.close(); } catch (Exception e) { e.printStackTrace(); } } public static void create2003PPTImage(InputStream in,String fileOutPath){ try { SlideShow slideShow=new SlideShow(in); Dimension pgsize = slideShow.getPageSize(); Slide[] slides=slideShow.getSlides(); FileOutputStream out = null; for(int i = 0;i < slides.length;i++){ TextRun[] rtruns = slides[i].getTextRuns(); for(TextRun tr: rtruns){ for (RichTextRun index : tr.getRichTextRuns()){ index.setFontName("宋体"); } } BufferedImage img=new BufferedImage(pgsize.width,pgsize.height, BufferedImage.TYPE_INT_RGB); Graphics2D graphics=img.createGraphics(); graphics.setPaint(Color.WHITE); graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width,pgsize.height)); slides[i].draw(graphics); out = new FileOutputStream(fileOutPath+i+".png"); javax.imageio.ImageIO.write(img, "png", out); } out.close(); } catch (Exception e) { e.printStackTrace(); } } public static void createPPTImage(InputStream in,String fileOutPath){ try { if(!in.markSupported()){ in=new BufferedInputStream(in); } if(in.markSupported()){ in=new PushbackInputStream(in,8); } File file = new File(fileOutPath); if(!file.exists()){ file.mkdirs(); } if(POIFSFileSystem.hasPOIFSHeader(in)){//2003 create2003PPTImage(in,fileOutPath); }else if(POIXMLDocument.hasOOXMLHeader(in)){//2007 create2007PPTImage(in,fileOutPath); } } catch (IOException e) { e.printStackTrace(); } } }
生成的图片目录和文件路径在同一位置
ppt和pptx转图片完整代码,解决2003版和2007版中文乱码问题的更多相关文章
- spring boot 解决后台返回 json 到前台中文乱码之后出现返回json数据报错 500:no convertter for return value of type
问题描述 spring Boot 中文返回给浏览器乱码 解析成问号?? fastJson jackJson spring boot 新增配置解决后台返回 json 到前台中文乱码之后,出现返回json ...
- 解决get方法传递URL参数中文乱码问题
[转]解决get方法传递URL参数中文乱码问题 来自:http://www.javaeye.com/topic/483158 应用一:解决tomcat下中文乱码问题(先来个简单的) 在tomcat下, ...
- 解决@ResponseBody注解返回的json中文乱码问题
1. 简介 主要解决@ResponseBody注解返回的json中文乱码问题. 2.解决方案 2.1mvc加上注解(推荐此方法) 在mvc配置文件中假如下面配置(写在 <mvc:annotati ...
- 解决python语言在cmd下中文乱码的问题
解决python语言在cmd下中文乱码的问题: a = "再见!"print (a.decode('utf-8').encode('gbk')) #解决在cmd下中文乱码的问题
- 分布式监控系统Zabbix-3.0.3-完整安装记录(4)-解决zabbix监控图中出现中文乱码问题
之前部署了Zabbix-3.0.3监控系统,在安装数据库时已经将zabbix库设置了utf-8字符. 首先确定zabbix开启了中文支持功能:登录到zabbix服务器的数据目录下(前面部署的zabbi ...
- [转]解决get方法传递URL参数中文乱码问题
来自:http://www.javaeye.com/topic/483158 应用一:解决tomcat下中文乱码问题(先来个简单的) 在tomcat下,我们通常这样来解决中文乱码问题: 过滤器代码: ...
- 解决SpringMvc后台接收json数据中文乱码问题
原因分析 使用ajax从前台页面传输数据到后台controller控制器的时候,出现中文乱码 其实乱码问题出现的原因,就是由于默认的tomcat配置,接收请求是以ISO-8859-1来转码,导致中文出 ...
- 解决servlet中get方式中中文乱码问题(二):装饰者模式使用
注意,这里是针对Tomcat容器中get方式提交的servlet中获得参数,参数中有中文的时候乱码的问题: 之前我已经讲过,Tomcat8.0及以上URIEncoding都是utf-8的默认编码,不会 ...
- QT笔记之解决QT5.2.0和VS2012中文乱码 以及在Qt Creator中文报错
转载:http://bbs.csdn.net/topics/390750169 VS2012 中文乱码 1.方法一: 包含头文件 #include <QTextCodec> ....... ...
随机推荐
- hdu2732 最大流+拆点
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2732 题目给定一个场景,有n*m个方格,每个方格代表一个柱子,一个柱子可以承受不同次数的跳跃,开始时图 ...
- Codeforces Round #567 (Div. 2) B. Split a Number
Split a Number time limit per test 2 seconds memory limit per test 512 megabytes input standard inpu ...
- Worktile正式入驻飞书,助力企业轻松实现敏捷开发与协作
企业在敏捷研发中时常面临着交付延期.需求不匹配等问题,如何更高效地完成敏捷研发? Worktile携手飞书,为企业用户提供敏捷开发服务,帮助企业实现软件项目的需求管理.缺陷追踪.迭代规划与推进以及效能 ...
- TensorFlow 基本变量定义,基本操作,矩阵基本操作
使用 TensorFlow 进行基本操作的实例,这个实例主要是使用 TensorFlow 进行了加法运算. 包括使用 constant 常量进行加法运算和使用 placeholder 进行变量加法运算 ...
- 仅用200个样本就能得到当前最佳结果:手写字符识别新模型TextCaps
由于深度学习近期取得的进展,手写字符识别任务对一些主流语言来说已然不是什么难题了.但是对于一些训练样本较少的非主流语言来说,这仍是一个挑战性问题.为此,本文提出新模型TextCaps,它每类仅用200 ...
- 近期 github 机器学习热门项目top5
磐创智能-专注机器学习深度学习的教程网站 http://panchuang.net/ 磐创AI-智能客服,聊天机器人,推荐系统 http://panchuangai.com/ [导读]:Github是 ...
- WeChat-SmallProgram:组件 scroll-view 横向和纵向 案例
scroll-view为滚动视图,分为水平滚动和垂直滚动.注意滚动视图垂直滚动时一定要设置高度否则的话scroll-view不会生效. 滚动视图常用的地方一般都是Item项比较多的界面,比如我的模块 ...
- 数据库连接JOIN
1,连接类型及差异 INNER JOIN:结果集只有配对成功的数据,即不包含左表或右表为空的情况: OUTER JOIN: LEFT JOIN:结果包含左表的所有记录,右表不能成功匹配的显示NULL ...
- 玩转控件:封装Dev的SearchLookupEdit
鸣谢 随着前面几个章节对控件封装与扩展的分享,不少小伙伴儿们在作者公众号上反馈,并联系作者,表示通过这些系列和源码能学到不少细节上的东西,并运用到了自己的实际项目当中,也有不少伙伴儿反馈更好更优的处理 ...
- 深入解读ES6系列(三)
ES6字符串 哈喽小伙伴们,爱说'废'话的Z又回来了,欢迎来到Super IT曾的博客时间,上一节说了函数,解构赋值和数组的五大将,这一节我们继续我们知识的海洋,一起奋斗不秃头!不足的欢迎提问留言. ...