java poi ppt操作示例
poi3.9版本,官网 http://poi.apache.org/slideshow/how-to-shapes.html
import java.awt.Color;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; import org.apache.poi.hslf.HSLFSlideShow;
import org.apache.poi.hslf.model.AutoShape;
import org.apache.poi.hslf.model.Fill;
import org.apache.poi.hslf.model.Freeform;
import org.apache.poi.hslf.model.HeadersFooters;
import org.apache.poi.hslf.model.Hyperlink;
import org.apache.poi.hslf.model.Line;
import org.apache.poi.hslf.model.Picture;
import org.apache.poi.hslf.model.Shape;
import org.apache.poi.hslf.model.ShapeTypes;
import org.apache.poi.hslf.model.Slide;
import org.apache.poi.hslf.model.SlideMaster;
import org.apache.poi.hslf.model.Table;
import org.apache.poi.hslf.model.TableCell;
import org.apache.poi.hslf.model.TextBox;
import org.apache.poi.hslf.model.TextRun;
import org.apache.poi.hslf.usermodel.PictureData;
import org.apache.poi.hslf.usermodel.RichTextRun;
import org.apache.poi.hslf.usermodel.SlideShow;
import org.apache.poi.hslf.usermodel.SoundData; public class PPTParseUtil {
public static void main(String[] args) throws IOException {
SlideShow ppt = new SlideShow(); // 设置标题,底部信息
// presentation-scope headers / footers
HeadersFooters hdd = ppt.getSlideHeadersFooters();
hdd.setSlideNumberVisible(true);
hdd.setFootersText("Created by POI-HSLF"); // add first slide
Slide s1 = ppt.createSlide(); // add second slide
Slide s2 = ppt.createSlide();
// retrieve page size. Coordinates are expressed in points (72 dpi)
java.awt.Dimension pgsize = ppt.getPageSize();
int pgx = pgsize.width; // slide width
int pgy = pgsize.height; // slide height // set new page size
ppt.setPageSize(new java.awt.Dimension(1024, 768));
// save changes
FileOutputStream out = new FileOutputStream("E:\\logs\\slideshow.ppt"); // get slides
Slide[] slide = ppt.getSlides();
for (int i = 0; i < slide.length; i++) {
Shape[] sh = slide[i].getShapes();
for (int j = 0; j < sh.length; j++) {
// name of the shape
String name = sh[j].getShapeName(); // shapes's anchor which defines the position of this shape in
// the slide
java.awt.Rectangle anchor = sh[j].getAnchor(); if (sh[j] instanceof Line) {
Line line = (Line) sh[j];
// work with Line
} else if (sh[j] instanceof AutoShape) {
AutoShape shape = (AutoShape) sh[j];
// work with AutoShape
} else if (sh[j] instanceof TextBox) {
TextBox shape = (TextBox) sh[j];
// work with TextBox
} else if (sh[j] instanceof Picture) {
Picture shape = (Picture) sh[j];
// work with Picture
}
}
} // Drawing a shape on a slide
Slide slide2 = ppt.createSlide(); // set slide title
TextBox title = slide2.addTitle();
title.setText("Hello, World!");
// Line shape
Line line = new Line();
line.setAnchor(new java.awt.Rectangle(50, 50, 100, 20));
line.setLineColor(new Color(0, 128, 0));
line.setLineStyle(Line.LINE_DOUBLE);
slide2.addShape(line); // TextBox
TextBox txt = new TextBox();
txt.setText("Hello, World!");
txt.setAnchor(new java.awt.Rectangle(300, 100, 300, 50)); // use RichTextRun to work with the text format
RichTextRun rt = txt.getTextRun().getRichTextRuns()[0];
rt.setFontSize(32);
rt.setFontName("Arial");
rt.setBold(true);
rt.setItalic(true);
rt.setUnderlined(true);
rt.setFontColor(Color.red);
rt.setAlignment(TextBox.AlignRight); slide2.addShape(txt); // create shapes of arbitrary geometry
java.awt.geom.GeneralPath path = new java.awt.geom.GeneralPath();
path.moveTo(100, 100);
path.lineTo(200, 100);
path.curveTo(50, 45, 134, 22, 78, 133);
path.curveTo(10, 45, 134, 56, 78, 100);
path.lineTo(100, 200);
path.closePath(); Freeform shape = new Freeform();
shape.setPath(path);
slide2.addShape(shape); // Autoshape
// 32-point star
AutoShape sh1 = new AutoShape(ShapeTypes.Star32);
sh1.setAnchor(new java.awt.Rectangle(50, 50, 100, 200));
sh1.setFillColor(Color.red);
slide2.addShape(sh1); // Trapezoid
AutoShape sh2 = new AutoShape(ShapeTypes.Trapezoid);
sh2.setAnchor(new java.awt.Rectangle(150, 150, 100, 200));
sh2.setFillColor(Color.blue);
slide2.addShape(sh2); // work with pictures
// extract all pictures contained in the presentation
PictureData[] pdata = ppt.getPictureData();
for (int ii = 0; ii < pdata.length; ii++) {
PictureData pict = pdata[ii]; // picture data
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;
}
FileOutputStream out2 = new FileOutputStream("pict_" + ii + ext);
out2.write(data);
out2.close(); } // add a new picture to this slideshow and insert it in a new slide
int idx = ppt.addPicture(new File("E:\\logs\\clock.png"), Picture.PNG); Picture pict = new Picture(idx); // set image position in the slide
pict.setAnchor(new java.awt.Rectangle(100, 100, 300, 200)); Slide slide3 = ppt.createSlide();
slide3.addShape(pict); // This slide has its own background.
// Without this line it will use master's background.
slide3.setFollowMasterBackground(false);
Fill fill = slide3.getBackground().getFill();
int idx1 = ppt.addPicture(new File("E:\\logs\\clock.png"), Picture.PNG);
fill.setFillType(Fill.FILL_PATTERN);
fill.setPictureData(idx1); // create bulleted lists TextBox shape1 = new TextBox();
RichTextRun rt1 = shape1.getTextRun().getRichTextRuns()[0];
shape1.setText("January\r" + "February\r" + "March\r" + "April");
rt1.setFontSize(42);
rt1.setBullet(true);
rt1.setBulletOffset(0); // bullet offset
rt1.setTextOffset(50); // text offset (should be greater than bullet
// offset)
rt1.setBulletChar('\u263A'); // bullet character
slide3.addShape(shape1); shape1.setAnchor(new java.awt.Rectangle(50, 50, 500, 300)); // position
// of the
// text box
// in the
// slide
slide3.addShape(shape1); // now retrieve pictures containes in the first slide and save them on
// disk
slide3 = ppt.getSlides()[0];
Shape[] sh3 = slide3.getShapes();
for (int i2 = 0; i2 < sh3.length; i2++) {
if (sh3[i2] instanceof Picture) {
Picture pict1 = (Picture) sh3[i2];
PictureData pictData = pict1.getPictureData();
byte[] data = pictData.getData();
int type = pictData.getType();
if (type == Picture.JPEG) {
FileOutputStream out3 = new FileOutputStream("slide0_" + i2
+ ".jpg");
out3.write(data);
out3.close();
} else if (type == Picture.PNG) {
FileOutputStream out4 = new FileOutputStream("slide0_" + i2
+ ".png");
out4.write(data);
out4.close();
}
}
} // modify background of a slide master
SlideMaster master = ppt.getSlidesMasters()[0]; Fill fill1 = master.getBackground().getFill();
int idx11 = ppt
.addPicture(new File("E:\\logs\\clock.png"), Picture.PNG);
fill1.setFillType(Fill.FILL_PICTURE);
fill1.setPictureData(idx11); // read hyperlinks from a slide show
Slide[] slide1 = ppt.getSlides();
for (int j = 0; j < slide1.length; j++) { // read hyperlinks from the text runs
TextRun[] txt1 = slide1[j].getTextRuns();
if (txt1 == null || txt1.length == 0) {
continue;
}
for (int k = 0; k < txt1.length; k++) {
String text = txt1[k].getText();
Hyperlink[] links = txt1[k].getHyperlinks();
if (links != null)
for (int l = 0; l < links.length; l++) {
Hyperlink link = links[l];
String title1 = link.getTitle();
String address = link.getAddress();
String substring = text.substring(link.getStartIndex(),
link.getEndIndex() - 1); // in ppt end index is
// inclusive
System.out.println(title1 + address + substring);
}
} // in PowerPoint you can assign a hyperlink to a shape without text,
// for example to a Line object. The code below demonstrates how to
// read such hyperlinks
Shape[] sh = slide1[j].getShapes();
for (int k = 0; k < sh.length; k++) {
Hyperlink link = sh[k].getHyperlink();
if (link != null) {
String title1 = link.getTitle();
String address = link.getAddress();
System.out.println(title1 + address);
}
}
} // table data
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" } }; // 创建表格
Slide slide11 = ppt.createSlide();
// create a table of 5 rows and 2 columns
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 rt11 = cell.getTextRun().getRichTextRuns()[0];
rt11.setFontName("Arial");
rt11.setFontSize(10); cell.setVerticalAlignment(TextBox.AnchorMiddle);
cell.setHorizontalAlignment(TextBox.AlignCenter);
}
} // set table borders
Line border = table.createBorder();
border.setLineColor(Color.black);
border.setLineWidth(1.0);
table.setAllBorders(border); // set width of the 1st column
table.setColumnWidth(0, 300);
// set width of the 2nd column
table.setColumnWidth(1, 150); slide11.addShape(table);
table.moveTo(100, 100); // retrieve embedded sounds 获取语音信息
SoundData[] sound = ppt.getSoundData();
for (int i = 0; i < sound.length; i++) {
// save *WAV sounds on disk
if (sound[i].getSoundType().equals(".WAV")) {
FileOutputStream out1 = new FileOutputStream(
sound[i].getSoundName());
out1.write(sound[i].getData());
out1.close();
}
} ppt.write(out);
out.close();
}
}
本文转自:http://blog.csdn.net/zhongweijian/article/details/8299531
java poi ppt操作示例的更多相关文章
- java POI创建Excel示例(xslx和xsl区别 )
Java用来处理office类库有很多,其中POI就是比较出名的一个,它是apache的类库,现在版本到了3.10,也就是2014年2月8号这个版本. 在处理PPT,Excel和Word前,需要导入以 ...
- java poi ppt 接口的基本操作
依赖 在 pom.xml中增加以下依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId& ...
- zookeeper Java API 简单操作示例
本文主要介绍如何在java IDE中如何应用使用客户端与zookeeper服务器通信. 首先搭建maven环境,并在pom文件中加入zookeeper引用包: <!-- https://mvnr ...
- java poi excel操作 把第一列放到最后去
@Override public void adjustExcleColumnPosition(String filePath,int col) throws Exception{ File file ...
- java poi excel操作 下拉菜单 及数据有效性
1 private InputStream updateTemplateStyleHSSF(InputStream inputStream,CsCustCon csCustCon) throws IO ...
- java poi 操作ppt
java poi 操作ppt 可以参考: https://www.w3cschool.cn/apache_poi_ppt/apache_poi_ppt_installation.html http:/ ...
- 在java poi导入Excel通用工具类示例详解
转: 在java poi导入Excel通用工具类示例详解 更新时间:2017年09月10日 14:21:36 作者:daochuwenziyao 我要评论 这篇文章主要给大家介绍了关于在j ...
- 在Eclipse中运行JAVA代码远程操作HBase的示例
在Eclipse中运行JAVA代码远程操作HBase的示例 分类: 大数据 2014-03-04 13:47 3762人阅读 评论(2) 收藏 举报 下面是一个在Windows的Eclipse中通过J ...
- java用org.apache.poi包操作excel
一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97- ...
随机推荐
- ereg/eregi报错处理办法
ereg()函数和eregi()函数用法相同,不同之处在与ereg()区分大小写,eregi()不区分大小写 在php5.3以上的版本将不再支持eregi()和ereg()函数 处理办法: 正则函数处 ...
- servlet、genericservlet、httpservlet之间的区别
转自:http://blog.csdn.net/rat9912345/article/details/5161789 当编写一个servlet时,必须直接或间接实现servlet接口,最可能实现的方法 ...
- EditText根据焦点弹出软键盘
//每次启动都清除焦点 myCourse_roomId_input.setText(""); myCourse_roomId_input.clearFocus(); //判断是否获 ...
- Loadrunner中关联的作用:
获取并保存变化的request值{1.sessionid;2.获取上个请求的响应值,用于下个请求参数} 作为检查点 脚本调试工具
- WebApi多数据库切换
用抽象工厂来解决多数据库之间的切换问题是普遍的,像以下几篇文章都讲的很具体 申明之前写的存在强大漏洞 -- 之前有涉及到IoC Autofac的知识点,鄙人孤陋寡闻,在亲身实践后才发现其中奥妙可参照一 ...
- ember.js:使用笔记1-数组数据统一显示
ember中数据一般都是以array的形式存储的,控制器使用,如: App.DataController = Em.ArrayController.extend({}); 想要在一个页面中输出所有的数 ...
- iOS UITextField的returnkey点击事件
关于隐藏软键盘,网上的办法良莠不齐,大多是通过实现UITextFieldDelegate来隐藏软键盘,该方法代码较多,且在文本框很多的时不好处理.我经过搜索与摸索,找到了最佳的处理办法.(引用的) ...
- jquery事件重复绑定解决办法
一$.fn.live 重复绑定 解决:使用die()方法,在live()方法绑定前,将此元素上的前面被绑定的事件统统解除,然后再通过live()方法绑定新的事件. //先通过die()方法解除,再通过 ...
- ps让文字的颜色变成图片的颜色
第一种: 把某张图片图层置于文字图层之上,右击图片图层-->选择"创建剪贴蒙版"即可.第二种:把某张图片图层置于文字图层之上,并选择图片图层,按住Ctrl键,点击文字图层,载 ...
- POJ1637 Sightseeing tour(判定混合图欧拉回路)
有向连通图存在欧拉回路的充要条件是所有点入度=出度. 首先随便给定所有无向边一个方向(不妨直接是u->v方向),记录所有点的度(记:度=入度-出度). 这时如果有点的度不等于0,那么就不存在欧拉 ...