使用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文档的处理有两个技术 ...
随机推荐
- kubeadm部署Kubernetes集群
Preface 通过kubeadm管理工具部署Kubernetes集群,相对离线包的二进制部署集群方式而言,更为简单与便捷.以下为个人学习总结: 两者区别在于前者部署方式使得大部分集群组件(Kube- ...
- jQuery中Animate进阶用法(二)
Step Type: Function( Number now, Tween tween )每个动画元素的每个动画属性将调用的函数.这个函数为修改Tween 对象提供了一个机会来改变设置中得属性值. ...
- css左右等高问题
先看看预览效果:http://lgdy.whut.edu.cn/index.php?c=home&a=detail&id=3394 再来谈谈css左右等高的应用场景:在内容管理系统(c ...
- [BZOJ 1013][JSOI 2008] 球形空间产生器sphere 题解(高斯消元)
[BZOJ 1013][JSOI 2008] 球形空间产生器sphere Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面 ...
- Java初转型-SSM配置文件
文章来源:http://www.cnblogs.com/wxisme/p/4924561.html web.xml的配置 ...
- input文本框禁止修改文本——disabled和readonly属性的作用及区别
1.input文本框禁止修改文本 disabled属性:<input type="text" name="name" value="xxx&qu ...
- IE浏览器如何调试Asp.net的 js代码
不管我们开发什么项目,都需要使用调试.后端的调试比较简单.前端js调试稍微复杂了一点,但是也别怕,因为我们有很多调试前端js代码的浏览器工具.比如IE浏览器.firefox浏览器.chrome浏览器等 ...
- pip --version问题
安装pip之后,在cmd下输入 pip --version始终提示: Unknown option:versionDid not provide a command自己安装步骤没错,怎么想也不明白,无 ...
- Go语言Windows 10开发环境搭建:Eclipse+GoClipse
Intel Core i5-8250U,Windows 10家庭中文版,go version go1.11 windows/amd64, Eclipse IDE for C/C++ Developer ...
- redis 命令远程批量删除keys
1.首先在电脑上装上 redis 客户端; https://www.cnblogs.com/feijl/p/6879929.html 2.安装成功后,进入 redis-cli 客户端目录; 连接 re ...