使用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文档的处理有两个技术 ...
随机推荐
- ODPS_ele—UDF Python API
自定义函数(UDF) UDF全称User Defined Function,即用户自定义函数.ODPS提供了很多内建函数来满足用户的计算需求,同时用户还可以通过创建自定义函数来满足不同的计算需求.UD ...
- shape-outside 矩形之外的另一种思路
http://docs.webplatform.org/wiki/css/properties/shape-outside
- import和require的区别
node编程中最重要的思想就是模块化,import和require都是被模块化所使用. 遵循规范 require 是 AMD规范引入方式 import是es6的一个语法标准,如果要兼容浏览器的话必须转 ...
- redis从入门到踩坑
背景 Redis在互联网项目的使用也是非常普遍的,作为最常用的NO-SQL数据库,对Redis的了解已经成为了后端开发的必备技能.小编对Redis的使用时间不长,但是项目中确两次踩中了Redis的坑, ...
- Linux 串口、usb转串口驱动分析(2-2) 【转】
转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=26807463&id=4186852 Linux 串口.usb转 ...
- (转载)ibatis:解决sql注入问题
原文地址:http://blog.csdn.net/scorpio3k/article/details/7610973 对于ibaits参数引用可以使用#和$两种写法,其中#写法会采用预编译方式,将转 ...
- python 列表元组加减乘除法
元组(typle)列表(list)没有减法和除法,但有加法和乘法. 1.加法,即把元素相加.只可以list和tuple相加,不能加其他类型. t= (1, ) + (2, 3, 4) print(t, ...
- About Saliency Object Detection
显著性对象检测综述 详见:http://mmcheng.net/zh/paperreading/ 一. 程明明等人的论文:Salient Object Detection: A Survey(简 ...
- 【redis】3.Spring 集成注解 redis 项目配置使用
spring-data-redis 项目,配合 spring 特性并集成 Jedis 的一些命令和方法. 配置redis继承到spring管理项目,使用注解实现redis缓存功能. 参考:http: ...
- Spring AOP实现原理-动态代理
目录 代理模式 静态代理 动态代理 代理模式 我们知道,Spring AOP的主要作用就是不通过修改源代码的方式.将非核心功能代码织入来实现对方法的增强.那么Spring AOP的底层如何实现对方法的 ...