Apache POI将PPT转换成图片实例代码
程序员文章站
2023-12-12 13:54:22
本文主要分享的是关于apache poi将ppt转换成图片的相关内容,简单介绍了apache poi,具体内容如下。
1、apache poi 简介
apache po...
本文主要分享的是关于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转换成图片实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!