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. 关于cookie和session

    在设置cookie的时候,它会保留在本地,无论你有没有退出浏览器都是.但是session只能在登录状态有效.退出浏览器过后就会消除掉.同时设置也是有问题的. @app.route('/login',m ...

  2. C# Json To Object 无废话

    json字符串如下: { success : 0, errorMsg : "错误消息", data : { total : "总记录数", rows : [ { ...

  3. ZJOI2019爆蛋记

    Day-2 玩了一个下午,逛了填海校园,晚上吃肯德基 Day-1 上午听lyx巨佬讲课,讲到一半发现,越听越听不懂... 于是打开电脑开始刷知乎 下午听kcz孔爷讲课,emmmm电脑被我玩没电了... ...

  4. Cling项目demo实现Android+DLNA实现

    dlna多屏互动技术在Android和ios上面应用很广,所以自己为了学习,就官方提供的远吗进行了学习. http://4thline.org/projects/cling 由于是一个maven构建的 ...

  5. Coursera台大机器学习技法课程笔记08-Adaptive Boosting

    将分类器组合的过程中,将重点逐渐聚焦于那些被错分的样本点,这种做法背后的数学原因,就是这讲的内容. 在用bootstraping生成g的过程中,由于抽样对不同的g就生成了不同的u,接下来就是不断的调整 ...

  6. LeetCode(22):括号生成

    Medium! 题目描述: 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", ...

  7. Android 插件化 开发

    插件化知识详细分解及原理 之Binder机制https://blog.csdn.net/yulong0809/article/details/56841993 插件化知识详细分解及原理 之代理,hoo ...

  8. 使用Golang编写优化算法 (1)

    动手写点东西是学习新知识很重要的一个阶段.之前用 Python 和 JavaScript 实现优化算法,现在用 Golang 来实现.语法上略有不爽,某些C语言的思维又回来了. - Golang 用 ...

  9. 前端Datatables自定义事件(监听Datatables插件一些常见的事件动作)

    今天开发项目的时候,用Datatables插件做前端分页列表,想在列表发生翻页.排序.搜索.改变单页显示数据条数这些行为的时候做一些其他的操作,看了半天Datatables官网终于找到可以监测到这些事 ...

  10. sklearn GMM模型介绍

    参考  SKlearn 库 EM 算法混合高斯模型参数说明及代码实现   和   sklearn.mixture.GaussianMixture 以前的推导内容:    GMM 与 EM 算法 记录下 ...