POI开源项目-PPT2PNG转换测试
第一次学使用软件去读取Office类文件。
今天百度了一下,发现Apache也是有这样的开源项目的,POI提供下列支持:

测试了一下HSLF对PPT的读操作,并将PPT转化为图片保存到指定目录:
使用之前必须将包引入:

关联包:

测试主函数如下:
设置输入ppt文件、输出路径、以及生成图片规模大小。
package edu.office;
import java.util.List;
public class TestTransfor {
/**
* 测试ppt转换
*
* **/
public static void main(String[] args) {
PPTReader reader = new PPTReader();
reader.setPPT_file_path("D:/1.ppt");
reader.setOutput_path("D:/ppt/");
//控制图片尺寸 1倍 2倍 3倍
reader.setScale(1);
List<String> images = reader.ppt2png();
for(String image : images){
System.out.println(image);
}
}
}
PPT转化png类如下:
package edu.office; import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List; import javax.imageio.ImageIO; import org.apache.poi.hslf.model.Slide;
import org.apache.poi.hslf.usermodel.SlideShow; public class PPTReader{ //ppt输入文件路径
private String ppt_file_path;
//ppt2png保存png图片的路径
private String output_path;
//scale是图片是原来的size几倍
private int scale = 1; public String getPpt_file_path() {
return ppt_file_path;
}
public void setPPT_file_path(String ppt_file_path) {
this.ppt_file_path = ppt_file_path;
}
public int getScale() {
return scale;
}
public void setScale(int scale) {
this.scale = scale;
}
public String getOutput_path() {
return output_path;
}
public void setOutput_path(String output_path) {
this.output_path = output_path;
} /**ppt转png
*
* @return null 失败 list<String> 图片名称列表
* **/
public List<String> ppt2png(){
//int slidenum = 2;
List<String> images = new ArrayList<String>();
try {
FileInputStream is;
is = new FileInputStream(ppt_file_path);
SlideShow ppt = new SlideShow(is);
is.close(); Dimension pgsize = ppt.getPageSize(); int width = (int)(pgsize.width*scale);
int height = (int)(pgsize.height*scale); Slide[] slide = ppt.getSlides();
for (int i = 0; i < slide.length; i++) { //if (slidenum != -1 && slidenum != (i+1)) continue;
//获取每页ppt标题
String title = slide[i].getTitle();
//System.out.println("Rendering slide "+slide[i].getSlideNumber() + (title == null ? "" : ": " + title)); BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = img.createGraphics();
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); graphics.setPaint(Color.white);
graphics.fill(new Rectangle2D.Float(0, 0, width, height)); graphics.scale((double)width/pgsize.width, (double)height/pgsize.height); slide[i].draw(graphics);
//对每一张图片进行命名
String fname = output_path + "ppt-" + (i+1) + ".png";
images.add("ppt-" + (i+1) + ".png");
File file = new File(output_path);
if(!file.exists()){
file.mkdirs();
}
FileOutputStream out = new FileOutputStream(fname);
ImageIO.write(img, "png", out);
out.close();
}
return images;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
POI开源项目-PPT2PNG转换测试的更多相关文章
- GitHub上史上最全的Android开源项目分类汇总 (转)
GitHub上史上最全的Android开源项目分类汇总 标签: github android 开源 | 发表时间:2014-11-23 23:00 | 作者:u013149325 分享到: 出处:ht ...
- GitHub上史上最全的Android开源项目分类汇总
今天在看博客的时候,无意中发现了 @Trinea 在GitHub上的一个项目 Android开源项目分类汇总 ,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有参考价值,包括很炫 ...
- Android开源项目分类汇总-转载
太长了,还是转载吧...今天在看博客的时候,无意中发现了@Trinea在GitHub上的一个项目Android开源项目分类汇总,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有参 ...
- Python:渗透测试开源项目
Python:渗透测试开源项目[源码值得精读] sql注入工具:sqlmap DNS安全监测:DNSRecon 暴力破解测试工具:patator XSS漏洞利用工具:XSSer Web服务器压力测试工 ...
- 开源项目在线化 中文繁简体转换/敏感词/拼音/分词/汉字相似度/markdown 目录
前言 以前在 github 上自己开源了一些项目.碍于技术与精力,大部分项目都是 java 实现的. 这对于非 java 开发者而言很不友好,对于不会编程的用户更加不友好. 为了让更多的人可以使用到这 ...
- Nodejs开源项目里怎么样写测试、CI和代码测试覆盖率
测试 目前主流的就bdd和tdd,自己查一下差异 推荐 mocha和tape 另外Jasmine也挺有名,angularjs用它,不过挺麻烦的,还有一个选择是qunit,最初是为jquery测试写的, ...
- 移动端自动化openatx开源项目介绍,pytest并发测试框架结合
开头 相信不少用过appium的同学,对于使用appium的一些体会与感受是否与我相似 1. appium启动服务和app程序非常慢 2. appium多线程并发需要启动多个服务 3. appium必 ...
- 这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)
在前2篇文章这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧 和这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,大伙热情高涨.再次拿出自己的私货,在.NET平台 ...
- .Net 开源项目资源大全
伯乐在线已在 GitHub 上发起「DotNet 资源大全中文版」的整理.欢迎扩散.欢迎加入. https://github.com/jobbole/awesome-dotnet-cn (注:下面用 ...
随机推荐
- Centos学习
Centos学习 ---恢复内容开始--- Centos学习手册by RuffianFish; 痞子鱼 近日闲的无聊,而最近又在搞Centos决定写个Centos详细的学习手册,以便自己在长时间没摸C ...
- linux之SQL语句简明教程---函数
既然数据库中有许多资料都是已数字的型态存在,一个很重要的用途就是要能够对这些数字做一些运算,例如将它们总合起来,或是找出它们的平均值.SQL 有提供一些这一类的函数.它们是: AVG (平均) COU ...
- php float 转int
round(x,prec) 参数 描述 x 可选.规定要舍入的数字. prec 可选.规定小数点后的位数. <?php echo(round(0.60)); echo(round(0.50)); ...
- 很好很实用的.net、网站系统后台模板
本模板是程序园给大家提供的应用系统开发后台模板,主要使用div+css布局实现,菜单使用了ddaccordion.js菜单控件. 转载请标明:http://www.kwstu.com/ArticleV ...
- Codeforces 482B Interesting Array(线段树)
题目链接:Codeforces 482B Interesting Array 题目大意:给定一个长度为N的数组,如今有M个限制,每一个限制有l,r,q,表示从a[l]~a[r]取且后的数一定为q,问是 ...
- 卓尼斯ZT-180评測
卓尼斯ZT-180评測 ——正在出差途中,用10”上网本发帖,没有拍照,且写得冲忙,不妥之处见谅. 一.採购 1.因外出旅游,不想带那台14"笔记本,所以想买一台平板电脑.当时,选择的 ...
- css 的z-index研究
z-index的值受position影响,而且还受父级元素影响.有很多种情况.下面是我看的一个特别全的网址,讲的很详细,收藏了,以后温故用. 对应的例子页面:http://www.neoease.co ...
- struts 2 debug标签隐藏不显示
struts2 的标签debug在页面中应用,并且struts的配置文件中也设置为开发模式,但是这个标签却被隐藏了,究其原因,是因为页面中body元素生命了class,其样式覆盖了原来的样式. 比如: ...
- 浅谈:SAMBA配置设置
通过以下命令安装samba: yum install -y samba samba拥有三个服务,分别是: smbd 提供文件及打印共享功能,使用139.445端口 nmbd 提供NetBIOS支持 ...
- C++容器在遍历时的删除问题
容器是非常便捷常用的,经常用容器来存储多条数据,然后对数据进行增删查改. 有时要在遍历的同时删除一条数据,但是这样删除的时候程序会导致程序崩溃. 这个问题在GCC 中不会出现,而在VS2008,VS2 ...