使用POI操作PPT实例
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实例相关推荐
- java poi 操作ppt
java poi 操作ppt 可以参考: https://www.w3cschool.cn/apache_poi_ppt/apache_poi_ppt_installation.html http:/ ...
- java使用poi操作ppt(导入,导出,读取,添加,拼接,替换文本,页面排序)
POI操作PPT文档(导入,导出,读取,添加,拼接,替换文本,页面排序) 注意:直接读取.pptx文件时不能使用${user}这样的作为替换标识,在读取.pptx文件时会解析成三段文本"${ ...
- poi 操作 PPT,针对 PPTX--图表篇
poi 操作 PPT,针对 PPTX–图表篇 文章目录 poi 操作 PPT,针对 PPTX--图表篇 1.读取 PPT 模板 2.替换标题 4.替换图表数据 接下来对 ppt 内的图表进行操作,替换 ...
- POI操作ppt图表完整示例演示
poi操作ppt图表史上最完整示例演示和内嵌excel的获取添加数据简单示例,POI3.15版本. 在模板中构造几中基本图表进行测试就行了. 其它操作ppt的基础资料见:http://blog.csd ...
- poi操作ppt图表史上最完整示例演示
poi操作ppt图表史上最完整示例演示和内嵌excel的获取添加数据简单示例 ,POI3.15版本. 在模板中构造几中基本图表进行测试就行了. 完整下载地址:http://download.csdn. ...
- Java使用poi操作ppt
Java使用poi操作ppt https://editor.csdn.net/md/?articleId=117926694 上一篇中写了操作文本框和插入图片 这一篇主要是如何在有模板的情况下如替换文 ...
- poi 操作 PPT,针对 PPTX--文字操作
poi 操作 PPT,针对 PPTX–文字操作 文章目录 poi 操作 PPT,针对 PPTX--文字操作 1.获取幻灯片内的所有段落文字 2.对幻灯片内的文本内容进行模板替换 3.对段落新增文本 接 ...
- poi操作PPT文档总结
POI操作PPT文档1 注意ppt模板不能使用${user}--这样的作为替换标识,在读取PPT模板时会解析成三段文本1.${ 2.user 3.},而一般在控件中使用%1$S这样的方式做为替换标识 ...
- poi操作ppt生成图表
POI版本3.14 操作ppt的HSLF中没有找到操作图表的类. 操作pptx的XSLF中有操作图表的类:org.apache.poi.xslf.usermodel.XSLFChart. ppt页面( ...
最新文章
- 在循环中正确找到对应DOM元素的索引
- 从零开始学习PYTHON3讲义(一)认识Python
- id3决策树 鸢尾花 python_决策树算法——集成学的基础!
- netstat 和 losf
- YTU 1009: University
- tab切换-自动、点击、内容变换
- Java-volatile是如何实现的
- linux 无损拆分分区 asm,利用UDEV SCSI Rules配置linux下的ASM
- wpf treeview使用expanded事件出错的问题
- 王道训练营3月12日
- Subclipse使用说明
- 地铁照明中的智能照明控制系统
- source insight 绿色护眼主题暗色护眼主题
- [vijosP1076]海战
- Android允许后台活动管理,安卓基础知识(活动)
- 腾讯开发平台php,腾讯AI开放平台 Tencent AI open platform
- rebar3 自定义编译插件攻略
- 无线基站定位服务器,UWB定位技术的三种定位方法
- 通海井安装SES2000管线仪
- Python求函数导数并绘制切线
热门文章
- zynq系列通过XMD进行JTAG调试出错解决方案
- zedboard移植linux内核,[干货]手把手教你用Zedboard学习Linux移植和驱动开发
- JAVA NIO Netty
- 为什么现在还有985高校给大一上C语言课?
- 如何通过启启宝盒打造你自己的“水井”
- 网络协议 -- UDP协议(3)广播
- 表必备三字段:id, gmt_create, gmt_modified
- MD5.js,前端MD5加密
- 盛会落幕,精彩延续 | 云扩科技入选《2022中国AI商业落地市场研究报告》
- pear在php中的用法,php使用pear_smtp发送邮件