1)如果是创建新的PPT文档,直接使用SlideShow和Slide类就可以,其中SlideShow表示PPT文档,Slide表示某一张幻灯片
如下代码创建空的PPT文档:

 SlideShow ppt = new SlideShow();
Slide[] slides = ppt.getSlides();
assertTrue(slides.length == 0);
savePPTFile(ppt); private void savePPTFile(SlideShow ppt) throws Exception{
FileOutputStream out = new FileOutputStream("ppt测试.ppt");
ppt.write(out);
out.close();
}

2)设置母版,这样后续的新建幻灯片都将使用母版的字体,背景等设置

 SlideShow ppt = new SlideShow();
//设置幻灯片大小
ppt.setPageSize(new Dimension(760,600));
SlideMaster master = ppt.getSlidesMasters()[0];
//设置母板背景,支持多种图片格式
int picIndex = ppt.addPicture(new File("background.png"), Picture.PNG);
Picture background = new Picture(picIndex);
//设置图片位置
background.setAnchor(new java.awt.Rectangle(0, 0, ppt.getPageSize().width
, ppt.getPageSize().height));
master.addShape(background);

3)创建幻灯片并插入文本

 SlideShow ppt = new SlideShow();
Slide newSlide = ppt.createSlide(); //添加幻灯片标题
TextBox title = newSlide.addTitle();
RichTextRun titleRun = title.getTextRun().getRichTextRuns()[0];
titleRun.setFontColor(Color.RED);
title.setText("ppt测试"); //添加文本框
TextBox txt = new TextBox();
RichTextRun richTextRun = txt.getTextRun().getRichTextRuns()[0];
richTextRun.setFontColor(Color.BLUE);
//setText参数字符串可以包含回车、换行符,但是最后一行不能以\r\n结尾,否则设置的格式没有效果(v3.5)
richTextRun.setText("这里可以换行\r\n第二行文本");
txt.setAnchor(new java.awt.Rectangle(50,150,400,400));
newSlide.addShape(txt); savePPTFile(ppt);

4)插入图片,支持多种格式

 SlideShow ppt = new SlideShow();
Slide newSlide = ppt.createSlide();
int picIndex = ppt.addPicture(new File("图片.jpg"), Picture.JPEG);
Picture jpg = new Picture(picIndex); //set image position in the slide
jpg.setAnchor(new java.awt.Rectangle(360, 200, 280, 260)); newSlide.addShape(jpg);
savePPTFile(ppt);

5)插入表格(v3.5)

 SlideShow ppt = new SlideShow();
Slide slide = ppt.createSlide(); String[][] datas = {
{"序号", "姓名","年龄"},
{"1", "张三","30"},
{"2", "李四","27"},
}; //create a table of 3 rows and 3 columns
Table table = new Table(3, 3); for (int i = 0; i < datas.length; i++) {
for (int j = 0; j < datas[i].length; j++) {
TableCell cell = table.getCell(i, j); RichTextRun rt = cell.getTextRun().getRichTextRuns()[0];
rt.setFontName("宋体");
rt.setFontSize(12); cell.setVerticalAlignment(TextBox.AnchorMiddle);
cell.setHorizontalAlignment(TextBox.AlignCenter);
cell.setText(datas[i][j]); if(i == 0){//首行背景设置为灰色
cell.setFillColor(Color.GRAY);
}
}
} Line border = table.createBorder();
border.setLineColor(Color.black);
border.setLineWidth(2.0);
table.setAllBorders(border); slide.addShape(table);
table.moveTo(160,260);
savePPTFile(ppt);

6)如果是读取已存在的PPT文档则还要用到HSLFSlideShow,下面代码将PPT文件导出为图片(png)格式,如果幻灯片上有中文字符则这些字符的字体需要修改为支持中文的字体(宋体等),否则导出的图片的中文字符不能正常显示

 SlideShow ppt = new SlideShow(new HSLFSlideShow("PPT测试.ppt"));
Dimension pgsize = ppt.getPageSize();
Slide[] slide = ppt.getSlides(); for (int i = 0; i < slide.length; i++) {
BufferedImage img = new BufferedImage(pgsize.width, pgsize.height
, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = img.createGraphics();
//clear the drawing area
graphics.setPaint(Color.white);
graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height)); //render
slide[i].draw(graphics); FileOutputStream out = new FileOutputStream("slide-" + (i+1) + ".png");
javax.imageio.ImageIO.write(img, "png", out);
out.close();

7)提取PPT文档信息

 SlideShow ppt = new SlideShow(new HSLFSlideShow("PPT测试.ppt"));
Slide[] slides = ppt.getSlides();
//提取文本信息
for (Slide each : slides) {
System.out.println(each.getTitle()) ;
TextRun[] textRuns = each.getTextRuns();
for (int i=0 ;i< textRuns.length; i++ ) {
System.out.println(textRuns[i].getText());
RichTextRun[] richTextRuns = textRuns[i].getRichTextRuns();
for (int j = 0; j < richTextRuns.length; j++) {
System.out.println(richTextRuns[j].getText());
}
}
}
//提取所有JPEG图片
PictureData[] picDatas = ppt.getPictureData();
for (int i=0;i<picDatas.length;i++) {
if(picDatas[i].getType() == Picture.JPEG){
FileOutputStream out = new FileOutputStream("jpg_" + i + ".jpg");
ppt.write(out);
out.close();
}
}

8)设置PPT文档摘要信息(文档点击鼠标右键查看属性)

 HSLFSlideShow hslf = HSLFSlideShow.create();
DocumentSummaryInformation dsi= hslf.getDocumentSummaryInformation();
SummaryInformation si= hslf.getSummaryInformation(); dsi.setCompany("yourCompany");
dsi.setCategory("ppt测试");
si.setAuthor("yourName");
si.setTitle("标题"); SlideShow ppt = new SlideShow(hslf);
savePPTFile(ppt);

1)如果是创建新的PPT文档,直接使用SlideShow和Slide类就可以,其中SlideShow表示PPT文档,Slide表示某一张幻灯片
如下代码创建空的PPT文档:

  1. SlideShow ppt = new SlideShow();
  2. Slide[] slides = ppt.getSlides();
  3. assertTrue(slides.length == 0);
  4. savePPTFile(ppt);
  5. private void savePPTFile(SlideShow ppt) throws Exception{
  6. FileOutputStream out = new FileOutputStream("ppt测试.ppt");
  7. ppt.write(out);
  8. out.close();
  9. }

2)设置母版,这样后续的新建幻灯片都将使用母版的字体,背景等设置

  1. SlideShow ppt = new SlideShow();
  2. //设置幻灯片大小
  3. ppt.setPageSize(new Dimension(760,600));
  4. SlideMaster master = ppt.getSlidesMasters()[0];
  5. //设置母板背景,支持多种图片格式
  6. int picIndex = ppt.addPicture(new File("background.png"), Picture.PNG);
  7. Picture background = new Picture(picIndex);
  8. //设置图片位置
  9. background.setAnchor(new java.awt.Rectangle(0, 0, ppt.getPageSize().width
  10. , ppt.getPageSize().height));
  11. master.addShape(background);

3)创建幻灯片并插入文本

  1. SlideShow ppt = new SlideShow();
  2. Slide newSlide = ppt.createSlide();
  3. //添加幻灯片标题
  4. TextBox title = newSlide.addTitle();
  5. RichTextRun titleRun = title.getTextRun().getRichTextRuns()[0];
  6. titleRun.setFontColor(Color.RED);
  7. title.setText("ppt测试");
  8. //添加文本框
  9. TextBox txt = new TextBox();
  10. RichTextRun richTextRun = txt.getTextRun().getRichTextRuns()[0];
  11. richTextRun.setFontColor(Color.BLUE);
  12. //setText参数字符串可以包含回车、换行符,但是最后一行不能以\r\n结尾,否则设置的格式没有效果(v3.5)
  13. richTextRun.setText("这里可以换行\r\n第二行文本");
  14. txt.setAnchor(new java.awt.Rectangle(50,150,400,400));
  15. newSlide.addShape(txt);
  16. savePPTFile(ppt);

4)插入图片,支持多种格式

  1. SlideShow ppt = new SlideShow();
  2. Slide newSlide = ppt.createSlide();
  3. int picIndex = ppt.addPicture(new File("图片.jpg"), Picture.JPEG);
  4. Picture jpg = new Picture(picIndex);
  5. //set image position in the slide
  6. jpg.setAnchor(new java.awt.Rectangle(360, 200, 280, 260));
  7. newSlide.addShape(jpg);
  8. savePPTFile(ppt);

5)插入表格(v3.5)

  1. SlideShow ppt = new SlideShow();
  2. Slide slide = ppt.createSlide();
  3. String[][] datas = {
  4. {"序号", "姓名","年龄"},
  5. {"1", "张三","30"},
  6. {"2", "李四","27"},
  7. };
  8. //create a table of 3 rows and 3 columns
  9. Table table = new Table(3, 3);
  10. for (int i = 0; i < datas.length; i++) {
  11. for (int j = 0; j < datas[i].length; j++) {
  12. TableCell cell = table.getCell(i, j);
  13. RichTextRun rt = cell.getTextRun().getRichTextRuns()[0];
  14. rt.setFontName("宋体");
  15. rt.setFontSize(12);
  16. cell.setVerticalAlignment(TextBox.AnchorMiddle);
  17. cell.setHorizontalAlignment(TextBox.AlignCenter);
  18. cell.setText(datas[i][j]);
  19. if(i == 0){//首行背景设置为灰色
  20. cell.setFillColor(Color.GRAY);
  21. }
  22. }
  23. }
  24. Line border = table.createBorder();
  25. border.setLineColor(Color.black);
  26. border.setLineWidth(2.0);
  27. table.setAllBorders(border);
  28. slide.addShape(table);
  29. table.moveTo(160,260);
  30. savePPTFile(ppt);

6)如果是读取已存在的PPT文档则还要用到HSLFSlideShow,下面代码将PPT文件导出为图片(png)格式,如果幻灯片上有中文字符则这些字符的字体需要修改为支持中文的字体(宋体等),否则导出的图片的中文字符不能正常显示

  1. SlideShow ppt = new SlideShow(new HSLFSlideShow("PPT测试.ppt"));
  2. Dimension pgsize = ppt.getPageSize();
  3. Slide[] slide = ppt.getSlides();
  4. for (int i = 0; i < slide.length; i++) {
  5. BufferedImage img = new BufferedImage(pgsize.width, pgsize.height
  6. , BufferedImage.TYPE_INT_RGB);
  7. Graphics2D graphics = img.createGraphics();
  8. //clear the drawing area
  9. graphics.setPaint(Color.white);
  10. graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));
  11. //render
  12. slide[i].draw(graphics);
  13. FileOutputStream out = new FileOutputStream("slide-"  + (i+1) + ".png");
  14. javax.imageio.ImageIO.write(img, "png", out);
  15. out.close();

7)提取PPT文档信息

  1. SlideShow ppt = new SlideShow(new HSLFSlideShow("PPT测试.ppt"));
  2. Slide[] slides = ppt.getSlides();
  3. //提取文本信息
  4. for (Slide each : slides) {
  5. System.out.println(each.getTitle()) ;
  6. TextRun[] textRuns = each.getTextRuns();
  7. for (int i=0 ;i< textRuns.length; i++ ) {
  8. System.out.println(textRuns[i].getText());
  9. RichTextRun[] richTextRuns = textRuns[i].getRichTextRuns();
  10. for (int j = 0; j < richTextRuns.length; j++) {
  11. System.out.println(richTextRuns[j].getText());
  12. }
  13. }
  14. }
  15. //提取所有JPEG图片
  16. PictureData[] picDatas = ppt.getPictureData();
  17. for (int i=0;i<picDatas.length;i++) {
  18. if(picDatas[i].getType() == Picture.JPEG){
  19. FileOutputStream out = new FileOutputStream("jpg_" + i + ".jpg");
  20. ppt.write(out);
  21. out.close();
  22. }
  23. }

8)设置PPT文档摘要信息(文档点击鼠标右键查看属性)

  1. HSLFSlideShow hslf = HSLFSlideShow.create();
  2. DocumentSummaryInformation dsi= hslf.getDocumentSummaryInformation();
  3. SummaryInformation si= hslf.getSummaryInformation();
  4. dsi.setCompany("yourCompany");
  5. dsi.setCategory("ppt测试");
  6. si.setAuthor("yourName");
  7. si.setTitle("标题");
  8. SlideShow ppt = new SlideShow(hslf);
  9. savePPTFile(ppt);

使用POI操作PPT文档(插入文本、图片)转的更多相关文章

  1. C#向PPT文档插入图片以及导出图片

    PowerPoint演示文稿是我们日常工作中常用的办公软件之一,而图片则是PowerPoint文档的重要组成部分,那么如何向幻灯片插入图片以及导出图片呢?本文我将给大家分享如何使用一个免费版Power ...

  2. 利用Python操作Word文档【图片】

    利用Python操作Word文档

  3. apache poi操作office文档----java在线预览txt、word、ppt、execel,pdf代码

    在页面上显示各种文档中的内容.在servlet中的逻辑 word: BufferedInputStream bis = null;  URL url = null;  HttpURLConnectio ...

  4. 利用poi操作word文档

    关键字:POI JAVA 批注 总页数 总字符数 一:认识POI Apache POI是一个开源的利用Java读写Excel.WORD等微软OLE2组件文档的项目.最新的3.5版本有很多改进,加入了对 ...

  5. poi操作word文档文件操作

    import org.apache.poi.POITextExtractor; import org.apache.poi.hwpf.extractor.WordExtractor; //得到.doc ...

  6. C# 复制幻灯片(包括格式、背景、图片等)到同/另一个PPT文档

    C# 复制幻灯片(包括格式.背景.图片等)到同/另一个PPT文档 复制幻灯片是使用PowerPoint过程中的一个比较常见的操作,在复制一张幻灯片时一般有以下两种情况: 在同一个PPT文档内复制 从一 ...

  7. C# 实现对PPT文档加密、解密以及重置密码的操作

    工作中我们会使用到各种各样的文档,其中,PPT起着不可或缺的作用.一份PPT文档里可能包含重要商业计划.企业运营资料或者公司管理资料等.因此,在竞争环境里,企业重要资料的保密工作就显得尤为重要,而对于 ...

  8. POI 生成 word 文档 简单版(包括文字、表格、图片、字体样式设置等)

      POI 生成word 文档 一般有两种方法: ① word模板 生成word 文档 : ② 写代码直接生成 word 文档: 我这里演示的是第二种方法,即写代码生成 word文档,不多说废话,直接 ...

  9. Java解析word,获取文档中图片位置

    前言(背景介绍): Apache POI是Apache基金会下一个开源的项目,用来处理office系列的文档,能够创建和解析word.excel.ppt格式的文档. 其中对word文档的处理有两个技术 ...

随机推荐

  1. Liberty Mutual Property Inspection, Winner's Interview: Qingchen Wang

    Liberty Mutual Property Inspection, Winner's Interview: Qingchen Wang The hugely popular Liberty Mut ...

  2. .gitignore 失效问题解决

    对于Git,已经跟踪的文件,再加入到.gitignore中,会使忽略失效.使用下面3个命令使它重新生效 git rm -r --cached . git add . git commit -m &qu ...

  3. 乘法逆元(P3811)(四种方法)

    适合单个的,费马小定理,exgcd,都是不错的选择,利用积性函数的方法和欧拉筛的方法适合批量求,但是论时间和空间的话,还是积性函数的方法比较好用,线性的. 题目链接:https://www.luogu ...

  4. 日常训练赛 Problem C – Complete Naebbirac’s sequence

    比赛链接https://vjudge.net/contest/256988#status/17111202012/C/0/ 大意:三个操作,使得输入的数中,从1-n,每一个数出现的次数相同. wa代码 ...

  5. iOS动画1 — UIView动画

    iOS动画基础是Core Animation核心动画.Core Animation是iOS平台上负责图形渲染与动画的基础设施.由于核心动画的实现比较复杂,苹果提供了实现简单动画的接口—UIView动画 ...

  6. [转]perf + 火焰图分析程序性能

    1.perf命令简要介绍 性能调优时,我们通常需要分析查找到程序百分比高的热点代码片段,这便需要使用 perf record 记录单个函数级别的统计信息,并使用 perf report 来显示统计结果 ...

  7. python之pip安装mysql-python失败

    前言 由于公司使用的python版本是python2,并且连接mysql的包是mysql-python,但是mysql-python 使用pip安装报错,需要C++环境等依赖,于是使用wheel直接安 ...

  8. Ubuntu 12.04将默认集成Landscape管理套件【转】

    转自:https://imtx.me/archives/1702.html 今天,我像往常一样对我的Ubuntu 12.04 Beta进行了一次常规升级,然后我发现在系统设置当中多了一个图标,叫「Ma ...

  9. [转]html网页 swf播放器使用代码

    <object id="player" height="240" width="275" classid="CLSID:6B ...

  10. Android 应用安全风险与防范

    代码混淆 Android开发除了部分功能采用C/C++编码外,其余主要都是采用Java进行编码开发功能.Java应用非常容易被反编译,Android自然也不例外.只要利用apktool等类似的反编译工 ...