使用POI操作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
 6 private void savePPTFile(SlideShow ppt) throws Exception{
 7          FileOutputStream out = new FileOutputStream("ppt测试.ppt");
 8     ppt.write(out);
 9     out.close();
10 }

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 //添加幻灯片标题
 5 TextBox title = newSlide.addTitle();
 6 RichTextRun titleRun = title.getTextRun().getRichTextRuns()[0];
 7 titleRun.setFontColor(Color.RED);
 8 title.setText("ppt测试");
 9
10 //添加文本框
11 TextBox txt = new TextBox();
12 RichTextRun richTextRun = txt.getTextRun().getRichTextRuns()[0];
13 richTextRun.setFontColor(Color.BLUE);
14 //setText参数字符串可以包含回车、换行符,但是最后一行不能以\r\n结尾,否则设置的格式没有效果(v3.5)
15 richTextRun.setText("这里可以换行\r\n第二行文本");
16 txt.setAnchor(new java.awt.Rectangle(50,150,400,400));
17 newSlide.addShape(txt);
18
19 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
 6 //set image position in the slide
 7 jpg.setAnchor(new java.awt.Rectangle(360, 200, 280, 260));
 8
 9 newSlide.addShape(jpg);
10 savePPTFile(ppt);

5)插入表格(v3.5)

 1 SlideShow ppt = new SlideShow();
 2 Slide slide = ppt.createSlide();
 3
 4 String[][] datas = {
 5     {"序号", "姓名","年龄"},
 6     {"1", "张三","30"},
 7     {"2", "李四","27"},
 8 };
 9
10 //create a table of 3 rows and 3 columns
11 Table table = new Table(3, 3);
12
13 for (int i = 0; i < datas.length; i++) {
14     for (int j = 0; j < datas[i].length; j++) {
15         TableCell cell = table.getCell(i, j);
16
17         RichTextRun rt = cell.getTextRun().getRichTextRuns()[0];
18         rt.setFontName("宋体");
19         rt.setFontSize(12);
20
21         cell.setVerticalAlignment(TextBox.AnchorMiddle);
22         cell.setHorizontalAlignment(TextBox.AlignCenter);
23         cell.setText(datas[i][j]);
24
25         if(i == 0){//首行背景设置为灰色
26              cell.setFillColor(Color.GRAY);
27         }
28     }
29 }
30
31 Line border = table.createBorder();
32 border.setLineColor(Color.black);
33 border.setLineWidth(2.0);
34 table.setAllBorders(border);
35
36 slide.addShape(table);
37 table.moveTo(160,260);
38 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
 5 for (int i = 0; i < slide.length; i++) {
 6     BufferedImage img = new BufferedImage(pgsize.width, pgsize.height
 7                                                , BufferedImage.TYPE_INT_RGB);
 8     Graphics2D graphics = img.createGraphics();
 9     //clear the drawing area
10     graphics.setPaint(Color.white);
11     graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));
12
13     //render
14     slide[i].draw(graphics);
15
16     FileOutputStream out = new FileOutputStream("slide-"  + (i+1) + ".png");
17     javax.imageio.ImageIO.write(img, "png", out);
18     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
 5 dsi.setCompany("yourCompany");
 6 dsi.setCategory("ppt测试");
 7 si.setAuthor("yourName");
 8 si.setTitle("标题");
 9
10 SlideShow ppt = new SlideShow(hslf);
11 savePPTFile(ppt);

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

Java代码  

  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)设置母版,这样后续的新建幻灯片都将使用母版的字体,背景等设置

Java代码  

  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)创建幻灯片并插入文本

Java代码  

  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)插入图片,支持多种格式

Java代码  

  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)

Java代码  

  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)格式,如果幻灯片上有中文字符则这些字符的字体需要修改为支持中文的字体(宋体等),否则导出的图片的中文字符不能正常显示

Java代码  

  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文档信息

Java代码  

  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文档摘要信息(文档点击鼠标右键查看属性)

Java代码  

  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);
时间: 2024-12-25 09:33:43

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

poi操作word文档文件操作

import org.apache.poi.POITextExtractor; import org.apache.poi.hwpf.extractor.WordExtractor; //得到.doc文件提取器 org.apache.poi.hwpf.extractor.WordExtractor doc = new WordExtractor(new FileInputStream(filePath)); //提取.doc正文文本 String text = doc.getText(); //

javascript DOM操作HTML文档

文档对象模型(DOM)是W3C为解决浏览器混战时代不同浏览器环境之间的差别而制定的模型标准.W3C将文档对象模型定义为:是一个能让程序和脚本动态 访问和更新文档内容.结构和样式的语言平台.提供了标准的HTML和XML对象集,并有一个标准接口来访问并操作他们,即任何一个 html 元素可以使用 JavaScript DOM 动态访问和控制. 1. DOM概述 文档对象模型定义了JavaScript可以进行操作的浏览器,描述了文档对象的逻辑结构及各个功能组件的标准接口.主要包括以下内容: 核心Jav

如何把ppt文档转换成pdf

如何把ppt文档转换成pdf 如何把ppt转换成pdf?你是否会在制作ppt的时候想将其转换成PDF格式而上传至网络上与网友共享?使用迅捷ppt转换成pdf转换器就可以很轻松的解决这一问题. 具体操作过程如下: 1 首先手头要有一份ppt演示稿(文稿可以是单个或是多个).在在电脑上桌面上新建2个文件夹,一个取名为“ppt”,另一个命名为“pdf”; 2.双击开打ppt转pdf转换软件(这里以ppt转pdf为例).在“菜单栏”中选择“Office转pdf”; 3.点击添加文件将此“ppt”格式文件

POI导出EXCEL文档

package com.wiseweb.util.excel; import java.io.*; import java.util.*; import javax.swing.JOptionPane; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.hssf.util.HSSFColor; import com.wiseweb.pom.entity.BaiinfoPriceTime; public class Expo

POI操纵EXCEL文档之导入文档(一)

             当前主流的后台管理系统,相信都会有文档导入导出的功能.而这其中用到的技术又是多种多样,有用POI框架,也有用JXLS技术的.技术只是手段,项目中实现功能最重要.今天主要说下如何利用POI技术操作EXCEL文档. POI 导入EXCEL文档: 1,首先,要导入EXCEL 文档,就必须要先有导入的模板文件,在这里,我提供好了制作好的EXCEL 模板文件提供下载:( EXCEL文档模板示例下载 ) 2,有了EXCEL 模板文件,就开始编写页面,并编写后台逻辑代码了: <%--

c#操作Word文档

c#操作Word文档 using System; using System.Collections.Generic; using System.Linq; using System.Web; using Word = Microsoft.Office.Interop.Word; using System.Reflection; using System.Text.RegularExpressions; using System.IO; namespace WebWord { public cla

在电视版机上也能随心所欲的操作Office文档

在电视机上操作Office? 老李是跨国公司的高管,在这家公司都工作十多年了.现在成了电视迷,每天不管是工作还是回家都离不开电视.工作还看电视?公司太自由了吧!不是的,老李每天的工作,不是在会议室会见客户,就是在会议室和同事讨论项目,目前会议室的投影仪都用液晶电视替代了,所以,每天的工作中,电视成了必不可少的办公设备.回到家里本想看看电视休息一下,但是目前的电视都能收发邮件了,所以在家里也是经常一边娱乐,一边收发邮件,半公半私. 但是,过去电视机都不能直接播放PPT或Word.PDF等文档文件,

向Docx4j生成的word文档添加图片和布局--第一部分

原文标题:Adding images and layout to your Docx4j-generated word documents, part 1 原文链接:http://blog.iprofs.nl/2012/10/22/adding-images-and-layout-to-your-docx4j-generated-word-documents-part-1/ 原文作者:lvdpal 发表日期:2012年10月22日 注:由于我对docx4j也不是很熟悉,所以很多专业名词不会翻译,

C#工具类:使用iTextSharp操作PDF文档

iTextSharp是一个用于操作PDF文件的组件DLL程序,在C#程序中可以引用iTextSharp组件,用于开发与PDF文件相关的报表等功能,利用iTextSharp组件提供出来的方法接口,我们可以实现很多与PDF文档有关的操作,如打开PDF文档对象.往PDF文档中添加段落.添加图片链接等等,功能非常的强大.这边简单对iTextSharp类进行了封装,提供一些常用的PDF操作方法. iTextSharp官网:http://www.itextpdf.com/ (英文好的建议直接查看原始文档).