本文主要分享的是关于Apache POI将PPT转换成图片的相关内容,简单介绍了Apache POI,具体内容如下。
1、Apache POI 简介
Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。
可以查看官方文档 Apache POI官网
Apache POI操作PPT文档有两种方式:
1.POI-HSLF 对应的 Powerpoint ‘97(-2007) 的文件格式 – 后缀名为 .ppt
2.POI-XSLF 对应的PowerPoint 2007 OOXML 的文件格式 – 后缀名为 .pptx
2、JAR包
POI 操作office需要的jar包:
poi-3.12.jar poi-ooxml-3.12.jar poi-ooxml-schemas-3.12.jar poi-scratchpad-3.12.jar xmlbeans-2.6.0.jar
maven方式引入:
maven 方式只需要引入两个就可以,因为他们依赖了其他几个
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.12</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>3.12</version> </dependency>
3、POI-HSLF 方式
POI-HSLF 方式处理PPT以 .ppt 后缀结尾的文档。
/** * ppt2003 文档的转换 后缀名为.ppt * @param pptFile ppt文件 * @param imgFile 图片将要保存的目录(不是文件) * @return */ public static Boolean doPPT2003toImage(File pptFile,File imgFile,List<String> list) { try { FileInputStream is = new FileInputStream(pptFile); SlideShow ppt = new SlideShow(is); //及时关闭掉 输入流 is.close(); Dimension pgsize = ppt.getPageSize(); Slide[] slide = ppt.getSlides(); for (int i = 0; i < slide.length; i++) { log.info("第" + i + "页。"); TextRun[] truns = slide[i].getTextRuns(); for (int k = 0; k < truns.length; k++) { RichTextRun[] rtruns = truns[k].getRichTextRuns(); for (int l = 0; l < rtruns.length; l++) { // 原有的字体索引 和 字体名字 int index = rtruns[l].getFontIndex(); String name = rtruns[l].getFontName(); log.info("原有的字体索引 和 字体名字: "+index+" - "+name); // 重新设置 字体索引 和 字体名称 是为了防止生成的图片乱码问题 rtruns[l].setFontIndex(1); rtruns[l].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)); slide[i].draw(graphics); // 图片的保存位置 String absolutePath = imgFile.getAbsolutePath()+"/"+ (i + 1) + ".jpeg"; File jpegFile = new File(absolutePath); // 图片路径存放 list.add((i + 1) + ".jpeg"); // 如果图片存在,则不再生成 if (jpegFile.exists()) { continue; } // 这里设置图片的存放路径和图片的格式(jpeg,png,bmp等等),注意生成文件路径 FileOutputStream out = new FileOutputStream(jpegFile); ImageIO.write(img, "jpeg", out); out.close(); } log.error("PPT转换成图片 成功!"); return true; } catch (Exception e) { log.error("PPT转换成图片 发生异常!", e); } return false; }
4、POI-XSLF 方式
POI-XSLF 方式处理PPT文件以 .pptx 后缀结尾的文档。
/** * ppt2007文档的转换 后缀为.pptx * @param pptFile PPT文件 * @param imgFile 图片将要保存的路径目录(不是文件) * @param list 存放文件名的 list * @return */ public static Boolean doPPT2007toImage(File pptFile,File imgFile,List<String> list) { FileInputStream is = null ; try { is = new FileInputStream(pptFile); XMLSlideShow xmlSlideShow = new XMLSlideShow(is); is.close(); // 获取大小 Dimension pgsize = xmlSlideShow.getPageSize(); // 获取幻灯片 XSLFSlide[] slides = xmlSlideShow.getSlides(); for (int i = 0 ; i < slides.length ; i++) { // 解决乱码问题 XSLFShape[] shapes = slides[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,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); //图片将要存放的路径 String absolutePath = imgFile.getAbsolutePath()+"/"+ (i + 1) + ".jpeg"; File jpegFile = new File(absolutePath); // 图片路径存放 list.add((i + 1) + ".jpeg"); //如果图片存在,则不再生成 if (jpegFile.exists()) { continue; } // 这里设置图片的存放路径和图片的格式(jpeg,png,bmp等等),注意生成文件路径 FileOutputStream out = new FileOutputStream(jpegFile); // 写入到图片中去 ImageIO.write(img, "jpeg", out); out.close(); } log.error("PPT转换成图片 成功!"); return true; } catch (Exception e) { log.error("PPT转换成图片 发生异常!", e); } return false; }
5、可能出现的错误
org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)
出现以上错误,说明是没有对应起来使用,应该使用第二种方式来转换PPT。
有时候核心转换的时候很容易出问题,是因为POI没有做得很好,图片有时候容易失真。
// 最核心的代码 slides[i].draw(graphics);
总结
以上就是本文关于Apache POI将PPT转换成图片实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
本文向大家介绍python 将dicom图片转换成jpg图片的实例,包括了python 将dicom图片转换成jpg图片的实例的使用技巧和注意事项,需要的朋友参考一下 主要原理:调整dicom的窗宽,使之各个像素点上的灰度值缩放至[0,255]范围内。 使用到的python库:SimpleITK 下面是一个将dicom(.dcm)图片转换成jpg图片的demo: 以上这篇python 将dicom
本文向大家介绍C#实现将PPT转换成HTML的方法,包括了C#实现将PPT转换成HTML的方法的使用技巧和注意事项,需要的朋友参考一下 本文是一个C#的小程序,主要实现将ppt转换成html的功能,方法很多,此处与大家分享一下,希望能对大家的项目开发起到一定的借鉴作用。 主要功能代码如下: 以上程序是使用C# 先创建一个ppt 文件并向里面写入了文字,然后再把此ppt 转换成html ,对于上面
问题描述 (Problem Description) 如何将PPT的幻灯片转换为图像。 解决方案 (Solution) 以下是将PPT的幻灯片转换为图像的程序。 import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; import
本文向大家介绍PHP实现图片旋转效果实例代码,包括了PHP实现图片旋转效果实例代码的使用技巧和注意事项,需要的朋友参考一下 PHP对图像的旋转
本文向大家介绍java生成图片验证码实例代码,包括了java生成图片验证码实例代码的使用技巧和注意事项,需要的朋友参考一下 关于java图片验证码的文章最近更新了不少,帮助大家掌握java验证码的生成技术,下文为大家分享了java生成图片验证码最简单的方法,供大家参考。 现在各行业在定制系统时都会考虑到机器注册,现在最有效的方式就是输入验证。现在的验证方式有很多种: 一、问题验证,其实也是图片验证
本文向大家介绍Python实现图片转字符画的代码实例,包括了Python实现图片转字符画的代码实例的使用技巧和注意事项,需要的朋友参考一下 原理 1. 计算出图片颜色对应的灰度值,计算公式如下 gray = 0.2126 * r + 0.7152 * g + 0.0722 * b 2. 根据灰度值,从字符集中获取图片中每个像素点对应的字符 代码 运行结果 总结 以上就是这篇文章的全部内容了
本文向大家介绍php实现图片转换成ASCII码的方法,包括了php实现图片转换成ASCII码的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php实现图片转换成ASCII码的方法。分享给大家供大家参考。具体如下: php图片转换成ASCII码,转换后可以直接通过字符串显示图片 希望本文所述对大家的php程序设计有所帮助。
本文向大家介绍利用PHP将图片转换成base64编码的实现方法,包括了利用PHP将图片转换成base64编码的实现方法的使用技巧和注意事项,需要的朋友参考一下 先来说一下为什么我们要对图片base64编码 base64是当前网络上最为常见的传输8Bit字节代码的编码方式其中之一。base64主要不是加密,它主要的用途是把某些二进制数转成普通字符用于网络传输。由于这些二进制字符在传输协议中属于控制字