使用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文档的处理有两个技术 ...
随机推荐
- Kafka 温故(一):Kafka背景及架构介绍
一.Kafka简介 Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,使用Scala语言编写,之后成为Apache项目的一部分.Kafka是一个分布式的,可划分的,多订阅者,冗余 ...
- 怎样提高WebService的性能
服务器端WebService程序: using System.Runtime.Serialization.Formatters.Binary; using System.IO; using Syste ...
- 蓝桥杯 问题 1117: K-进制数 (递归)
题目链接 题目描述 考虑包含N位数字的K-进制数. 定义一个数有效, 如果其K-进制表示不包含两连续的0. 考虑包含N位数字的K-进制数. 定义一个数有效, 如果其K-进制表示不包含两连续的0. 例: ...
- insert into与insert ignore以及replace into的区别
insert ignore表示,如果表中已经存在相同的记录,则忽略当前新数据: INSERT INTO有无数据都插入,如果主键则不插入; REPLACE INTO 如果是主键插入则会替换以前的数据; ...
- 用代码截图去理解MVC原理
[概述] 看了蒋金楠先生的<Asp.Net Mvc框架揭密>,这本书详细地讲解了mvc的原理,很深奥也很复杂,看了几遍才将就明白了一点.他在第一章用了一个他自己写的mvc框架作为例子,代码 ...
- docker之安装和管理mongodb
前言 折腾一些使用docker来配置和管理mongodb和mongodb集群. 安装mongodb 从docker网站拉取mongodb镜像 docker search mongo # 选择一个版本 ...
- request_irq与request_threaded_irq
/* * Allocate the IRQ */ #if 0 retval = request_irq(uap->port.irq, pl011_int, 0, "uart-pl011 ...
- 普通用户修改root密码【转】
在普通用户下修改root用户密码 1 从普通用户切换到root用户 sudo -s 再输入密码.2 输入passwd ,会提醒你输入当前用户密码,验证后会提醒你输入root用户密码.3 切换到ro ...
- JavaScript中的普通函数与构造函数
问题 什么是构造函数? 构造函数与普通函数区别是什么? 用new关键字的时候到底做了什么? 构造函数有返回值怎么办? 构造函数能当普通函数调用吗? 以下是我的一些理解,理解错误的地方恳请大家帮忙指正, ...
- Visual Studio 2013 发布正式版及使用感受
(注意:文末我添加了一个小节,用来更新最新的一些使用感受.) 昨天晚上,微软在正式发布Windows 8.1的同时,也同时发布了Visual Studio 2013产品系列的正式版. 版本情况 Vis ...