poi读取ppt的例子,不只是读取ppt里面的文字,还要又文字的样式,布局,图片等。poi包从官网下载即可。
HSLF是POI读写PPT的API,例子见官方文档。
http://poi.apache.org/slideshow/quick-guide.html
文档格式
http://poi.apache.org/slideshow/ppt-file-format.html
操作Shape的API
http://poi.apache.org/slideshow/how-to-shapes.html


1 提取PPT文字

public class PPTReader {public static void main(String[] args) throws Exception {InputStream is = new FileInputStream(new File("2003.ppt"));PowerPointExtractor extractor = new PowerPointExtractor(is);String ppString = extractor.getText();System.out.println(ppString);}

PPT如下:

2 抽取PPT图片

   public  void findpIC()  {try{SlideShow ppt = new SlideShow(new HSLFSlideShow("2003.ppt"));//将所有图片提取出来保存到PictureData[]PictureData[] pDatas= ppt.getPictureData();for (int i = 0; i < pDatas.length; i++) {PictureData pict =pDatas[i];// 获得每张图片的数据byte[] data = pict.getData();//获得每张图片的类型int type = pict.getType();String ext;switch (type) {case Picture.JPEG: ext=".jpg";break;case Picture.PNG: ext=".png"; break;case Picture.WMF: ext=".wmf"; break;case Picture.EMF: ext=".emf"; break;case Picture.PICT: ext=".pict"; break; default:continue;}//输出图片命名方式:pic_i_extFileOutputStream out = new FileOutputStream("pic_"+i + ext);out.write(data);out.close();}}catch (IOException e) {// This is not a powerpoint filee.printStackTrace();}    }

3/ 添加一个新的图片插入到新的幻灯片中,保存

public void addSlide() throws IOException {SlideShow ppt = new SlideShow(new HSLFSlideShow("2003.ppt"));// 添加一个新的图片插入到新的幻灯片中int idx =ppt.addPicture(new File("cat.jpg"), Picture.JPEG);//在幻灯片中设置图片的大小和位置Picture pict = new Picture(idx);pict.setAnchor(new Rectangle(100,100,300,200));Slide slide = ppt.createSlide();slide.addShape(pict);//检索图片并将ppt保存到磁盘上slide = ppt.getSlides()[0];Shape[]sh  =slide.getShapes();for (int i = 0; i < sh.length; i++){if (sh[i] instanceof Picture){Picture pict1 = (Picture)sh[i];PictureData pictData = pict1.getPictureData();byte[] data = pictData.getData();int type = pictData.getType();if (type == Picture.JPEG){FileOutputStream out = new FileOutputStream("slide0_"+i+".jpg");out.write(data);out.close();} else if (type == Picture.PNG){FileOutputStream out = new FileOutputStream("slide0_"+i+".png");out.write(data);out.close();}}}FileOutputStream out = new FileOutputStream("slideshow.ppt");ppt.write(out);out.close();}

4/插入表格

 @Testpublic void createTable() throws IOException {//准备数据            String[][] data = {{"INPUT FILE", "NUMBER OF RECORDS"},{"Item File", "11,559"},{"Vendor File", "300"},{"Purchase History File", "10,000"},{"Total # of requisitions", "10,200,038"} };SlideShow ppt = new SlideShow(new HSLFSlideShow("slideshow.ppt"));Slide slide = ppt.createSlide();//创建一个表格Table table = new Table(5, 2);for (int i = 0; i < data.length; i++) {for (int j = 0; j < data[i].length; j++) {TableCell cell = table.getCell(i, j);cell.setText(data[i][j]);RichTextRun rt = cell.getTextRun().getRichTextRuns()[0];rt.setFontName("Arial");rt.setFontSize(10);cell.setVerticalAlignment(TextBox.AnchorMiddle);cell.setHorizontalAlignment(TextBox.AlignCenter);}}//设置表格的边距Line border = table.createBorder();border.setLineColor(Color.black);border.setLineWidth(1.0);table.setAllBorders(border);//第一列的宽度table.setColumnWidth(0, 300);//第二列的宽度table.setColumnWidth(1, 150);slide.addShape(table);table.moveTo(100, 100);//保存FileOutputStream out = new FileOutputStream("hslf-table.ppt");ppt.write(out);out.close();
}

5 去掉PPT中的形状图形和声音

public void removeShapes() throws IOException {SlideShow ppt = new SlideShow(new HSLFSlideShow("bullets.ppt"));Slide slide = ppt.createSlide();Shape[] shape = slide.getShapes();for (int i = 0; i < shape.length; i++) {boolean ok = slide.removeShape(shape[i]);if(ok){System.out.println("you are successful remove the shape");}}}public void retrieveSound() throws IOException {FileInputStream is = new FileInputStream("bullets.ppt");SlideShow ppt = new SlideShow(is);is.close();SoundData[] sound = ppt.getSoundData();for (int i = 0; i < sound.length; i++) {//保存.WAV格式的音乐if(sound[i].getSoundType().equals(".WAV")){FileOutputStream out = new FileOutputStream(sound[i].getSoundName());out.write(sound[i].getData());out.close();}}}

自己画了主要类图,不全,个人理解

输入流有SlideShow进入,输出流使用文本流写入保存修改关闭。
SlideShow指整个幻灯片,而Slide 指的是单张幻灯片。SlideMaster 是单张幻灯片的管理类。对于文本信息、超链接信息、声音修改使用TextBox、TextRun、SoundData等类对单张幻灯片进行修改。而背景修改需要使用SlideMaster类调用Fill类进行修改设置。

使用POI操作PPT实例相关推荐

  1. java poi 操作ppt

    java poi 操作ppt 可以参考: https://www.w3cschool.cn/apache_poi_ppt/apache_poi_ppt_installation.html http:/ ...

  2. java使用poi操作ppt(导入,导出,读取,添加,拼接,替换文本,页面排序)

    POI操作PPT文档(导入,导出,读取,添加,拼接,替换文本,页面排序) 注意:直接读取.pptx文件时不能使用${user}这样的作为替换标识,在读取.pptx文件时会解析成三段文本"${ ...

  3. poi 操作 PPT,针对 PPTX--图表篇

    poi 操作 PPT,针对 PPTX–图表篇 文章目录 poi 操作 PPT,针对 PPTX--图表篇 1.读取 PPT 模板 2.替换标题 4.替换图表数据 接下来对 ppt 内的图表进行操作,替换 ...

  4. POI操作ppt图表完整示例演示

    poi操作ppt图表史上最完整示例演示和内嵌excel的获取添加数据简单示例,POI3.15版本. 在模板中构造几中基本图表进行测试就行了. 其它操作ppt的基础资料见:http://blog.csd ...

  5. poi操作ppt图表史上最完整示例演示

    poi操作ppt图表史上最完整示例演示和内嵌excel的获取添加数据简单示例 ,POI3.15版本. 在模板中构造几中基本图表进行测试就行了. 完整下载地址:http://download.csdn. ...

  6. Java使用poi操作ppt

    Java使用poi操作ppt https://editor.csdn.net/md/?articleId=117926694 上一篇中写了操作文本框和插入图片 这一篇主要是如何在有模板的情况下如替换文 ...

  7. poi 操作 PPT,针对 PPTX--文字操作

    poi 操作 PPT,针对 PPTX–文字操作 文章目录 poi 操作 PPT,针对 PPTX--文字操作 1.获取幻灯片内的所有段落文字 2.对幻灯片内的文本内容进行模板替换 3.对段落新增文本 接 ...

  8. poi操作PPT文档总结

    POI操作PPT文档1 注意ppt模板不能使用${user}--这样的作为替换标识,在读取PPT模板时会解析成三段文本1.${ 2.user  3.},而一般在控件中使用%1$S这样的方式做为替换标识 ...

  9. poi操作ppt生成图表

    POI版本3.14 操作ppt的HSLF中没有找到操作图表的类. 操作pptx的XSLF中有操作图表的类:org.apache.poi.xslf.usermodel.XSLFChart. ppt页面( ...

最新文章

  1. 在循环中正确找到对应DOM元素的索引
  2. 从零开始学习PYTHON3讲义(一)认识Python
  3. id3决策树 鸢尾花 python_决策树算法——集成学的基础!
  4. netstat 和 losf
  5. YTU 1009: University
  6. tab切换-自动、点击、内容变换
  7. Java-volatile是如何实现的
  8. linux 无损拆分分区 asm,利用UDEV SCSI Rules配置linux下的ASM
  9. wpf treeview使用expanded事件出错的问题
  10. 王道训练营3月12日
  11. Subclipse使用说明
  12. 地铁照明中的智能照明控制系统
  13. source insight 绿色护眼主题暗色护眼主题
  14. [vijosP1076]海战
  15. Android允许后台活动管理,安卓基础知识(活动)
  16. 腾讯开发平台php,腾讯AI开放平台 Tencent AI open platform
  17. rebar3 自定义编译插件攻略
  18. 无线基站定位服务器,UWB定位技术的三种定位方法
  19. 通海井安装SES2000管线仪
  20. Python求函数导数并绘制切线

热门文章

  1. zynq系列通过XMD进行JTAG调试出错解决方案
  2. zedboard移植linux内核,[干货]手把手教你用Zedboard学习Linux移植和驱动开发
  3. JAVA NIO Netty
  4. 为什么现在还有985高校给大一上C语言课?
  5. 如何通过启启宝盒打造你自己的“水井”
  6. 网络协议 -- UDP协议(3)广播
  7. 表必备三字段:id, gmt_create, gmt_modified
  8. MD5.js,前端MD5加密
  9. 盛会落幕,精彩延续 | 云扩科技入选《2022中国AI商业落地市场研究报告》
  10. pear在php中的用法,php使用pear_smtp发送邮件