使用POI操作PPT文档(插入文本、图片)转
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文档:
- 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);
使用POI操作PPT文档(插入文本、图片)转的更多相关文章
- C#向PPT文档插入图片以及导出图片
PowerPoint演示文稿是我们日常工作中常用的办公软件之一,而图片则是PowerPoint文档的重要组成部分,那么如何向幻灯片插入图片以及导出图片呢?本文我将给大家分享如何使用一个免费版Power ...
- 利用Python操作Word文档【图片】
利用Python操作Word文档
- apache poi操作office文档----java在线预览txt、word、ppt、execel,pdf代码
在页面上显示各种文档中的内容.在servlet中的逻辑 word: BufferedInputStream bis = null; URL url = null; HttpURLConnectio ...
- 利用poi操作word文档
关键字:POI JAVA 批注 总页数 总字符数 一:认识POI Apache POI是一个开源的利用Java读写Excel.WORD等微软OLE2组件文档的项目.最新的3.5版本有很多改进,加入了对 ...
- poi操作word文档文件操作
import org.apache.poi.POITextExtractor; import org.apache.poi.hwpf.extractor.WordExtractor; //得到.doc ...
- C# 复制幻灯片(包括格式、背景、图片等)到同/另一个PPT文档
C# 复制幻灯片(包括格式.背景.图片等)到同/另一个PPT文档 复制幻灯片是使用PowerPoint过程中的一个比较常见的操作,在复制一张幻灯片时一般有以下两种情况: 在同一个PPT文档内复制 从一 ...
- C# 实现对PPT文档加密、解密以及重置密码的操作
工作中我们会使用到各种各样的文档,其中,PPT起着不可或缺的作用.一份PPT文档里可能包含重要商业计划.企业运营资料或者公司管理资料等.因此,在竞争环境里,企业重要资料的保密工作就显得尤为重要,而对于 ...
- POI 生成 word 文档 简单版(包括文字、表格、图片、字体样式设置等)
POI 生成word 文档 一般有两种方法: ① word模板 生成word 文档 : ② 写代码直接生成 word 文档: 我这里演示的是第二种方法,即写代码生成 word文档,不多说废话,直接 ...
- Java解析word,获取文档中图片位置
前言(背景介绍): Apache POI是Apache基金会下一个开源的项目,用来处理office系列的文档,能够创建和解析word.excel.ppt格式的文档. 其中对word文档的处理有两个技术 ...
随机推荐
- OpenGL ES 2.0 Shader 调试新思路(一): 改变提问方式
OpenGL ES 2.0 Shader 调试新思路(一): 改变提问方式 --是什么(答案是具体值) VS 是不是(答案是布尔值) 目录 背景介绍 问题描述 Codea 是 iPad 上的一款很方便 ...
- [整理]CSS3 滤镜
1.灰度 兼容 http://www.526net.com/blog/qianduan/226.html http://james.padolsey.com/demos/grayscale/grays ...
- Linux 静态库与动态库
静态库(.a) 一个deal.c usedeal.c 重点 1. gcc -c deal.c 生成 deal.o 2. ar -rsv libdeal.a deal.o 生成 libdeal.a ...
- iOS必学技-cocoapods
我就不再造轮子了,网上的教程很详细,楼主亲测,好用. http://code4app.com/article/cocoapods-install-usage 楼主安装使用过程中遇到以下几个问题,同学们 ...
- 深入浅出js事件
深入浅出js事件 一.事件流 事件冒泡和事件捕获分别由微软和网景公司提出,这两个概念是为了解决页面中事件流(事件发生顺序)的问题. <div id="outer"> & ...
- vim下如何去掉windows编辑的文件中的^M
可以去掉^M, 例如: 在终端下敲命令: dos2unix a.c 直接转换成unix格式,这样就可以去掉^M •$dos2unix filename •vim filename :%s/^M$//g ...
- Centos: -bash: unzip: command not found
安装命令:yum install -y unzip zip 同时安装unzip和zip
- 09 Go 1.9 Release Notes
Go 1.9 Release Notes Introduction to Go 1.9 Changes to the language Ports ppc64x requires POWER8 Fre ...
- Android 应用安全风险与防范
代码混淆 Android开发除了部分功能采用C/C++编码外,其余主要都是采用Java进行编码开发功能.Java应用非常容易被反编译,Android自然也不例外.只要利用apktool等类似的反编译工 ...
- zoj 3827(2014牡丹江现场赛 I题 )
套公式 Sample Input 33 bit25 25 50 //百分数7 nat1 2 4 8 16 32 3710 dit10 10 10 10 10 10 10 10 10 10Sample ...