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. js 获取格林尼治时间戳

    昨天在一论坛里看到有朋友问 js 如何获取格林尼治时间戳.不少朋友第一反应是 toGMTString ...确实可以得到格林尼治时间,但不是时间戳.虽然我也没有啥好的方法一步到位的获取,不过至少是获取 ...

  2. .Net Core连接RabbitMQ集群

    var connectionFactory = new ConnectionFactory() { //HostName = "192.168.205.128", 集群不在此处声明 ...

  3. 用代码截图去理解MVC原理

    [概述] 看了蒋金楠先生的<Asp.Net Mvc框架揭密>,这本书详细地讲解了mvc的原理,很深奥也很复杂,看了几遍才将就明白了一点.他在第一章用了一个他自己写的mvc框架作为例子,代码 ...

  4. MDP安装之数据库

    /usr/bin/mysqladmin -u root password 'Bic2017' mysql-community-client-5.6.28-2.el6.x86_64 mysql-comm ...

  5. 利用 devcon.exe实现自动安装驱动(转)

    http://blog.csdn.net/u012814201/article/details/44919125 工作的原因打算通过devcon.exe实现自动打包的功能,由于之前一直在Linux那个 ...

  6. 关于 VS 2010 和 VS 2013 的警告 LNK4042

    由于我最近调整了一下 Jimi 的文件结构,导致出现了一个 LNK4042 的 warning,我并没有很重视,这个 warning 导致出现了一些错误. 我调试了几个小时,一开始并没有想到是这个 w ...

  7. nginx:支持跨域访问

    在http节点中配置: #支持跨域访问 add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Header ...

  8. 小白学习安全测试(一)——Http协议基础

    Http协议基础 Web技术发展[http://www.cnblogs.com/ProgrammerGE/articles/1824657.html] 静态WEB[网页] 动态WEB 属于一种应用程序 ...

  9. 掩膜 rcnn

    更多讨论,参考知乎:https://www.zhihu.com/question/57403701

  10. python tar.gz格式压缩、解压

    一.压缩 需求描述 现在有一个目录,需要将此目录打包成tar.gz文件.因为有一个Django项目,需要用到此功能! tar.gz 目录结构如下: ./ ├── folder │   ├── .doc ...