第一次学使用软件去读取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转换测试的更多相关文章

  1. GitHub上史上最全的Android开源项目分类汇总 (转)

    GitHub上史上最全的Android开源项目分类汇总 标签: github android 开源 | 发表时间:2014-11-23 23:00 | 作者:u013149325 分享到: 出处:ht ...

  2. GitHub上史上最全的Android开源项目分类汇总

    今天在看博客的时候,无意中发现了 @Trinea 在GitHub上的一个项目 Android开源项目分类汇总 ,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有参考价值,包括很炫 ...

  3. Android开源项目分类汇总-转载

    太长了,还是转载吧...今天在看博客的时候,无意中发现了@Trinea在GitHub上的一个项目Android开源项目分类汇总,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有参 ...

  4. Python:渗透测试开源项目

    Python:渗透测试开源项目[源码值得精读] sql注入工具:sqlmap DNS安全监测:DNSRecon 暴力破解测试工具:patator XSS漏洞利用工具:XSSer Web服务器压力测试工 ...

  5. 开源项目在线化 中文繁简体转换/敏感词/拼音/分词/汉字相似度/markdown 目录

    前言 以前在 github 上自己开源了一些项目.碍于技术与精力,大部分项目都是 java 实现的. 这对于非 java 开发者而言很不友好,对于不会编程的用户更加不友好. 为了让更多的人可以使用到这 ...

  6. Nodejs开源项目里怎么样写测试、CI和代码测试覆盖率

    测试 目前主流的就bdd和tdd,自己查一下差异 推荐 mocha和tape 另外Jasmine也挺有名,angularjs用它,不过挺麻烦的,还有一个选择是qunit,最初是为jquery测试写的, ...

  7. 移动端自动化openatx开源项目介绍,pytest并发测试框架结合

    开头 相信不少用过appium的同学,对于使用appium的一些体会与感受是否与我相似 1. appium启动服务和app程序非常慢 2. appium多线程并发需要启动多个服务 3. appium必 ...

  8. 这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)

    在前2篇文章这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧 和这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,大伙热情高涨.再次拿出自己的私货,在.NET平台 ...

  9. .Net 开源项目资源大全

    伯乐在线已在 GitHub 上发起「DotNet 资源大全中文版」的整理.欢迎扩散.欢迎加入. https://github.com/jobbole/awesome-dotnet-cn (注:下面用 ...

随机推荐

  1. 利用Azure Automation实现云端自动化运维(2)

      Azure automation的认证: 用户名和密码   在Azure的automation中使用Powershell可以管理当前订阅的资源,也可以管理不同订阅的资源,那么问题就来了,安全性如何 ...

  2. Ubuntu12.04 LTS Add Sources List

    1. First Step: sudo gedit /etc/apt/sources.list 2. Add Soures List Content: # deb cdrom:[Ubuntu LTS ...

  3. 从HCE的各种问题 讨论未来趋势

    为了能让NFC手机支持NFC支付,维萨公司和万事达公司宣布了对HCE的研发,并且将很快推出最新的HCE规范.从2012年末,我一直在关注关于HCE的相关信息,其原因是由于我们公司参与了名为Simply ...

  4. linux命令之uname

    uname是linux中查询系统基本信息的命令. 命令形式: uname [选项] 选项包括:(若不跟任何选项:则默认-s选项) -s, --kernel-name 输出内核名称   -n, --no ...

  5. today reading notes

    paminit manager from upstart to systemd/systemctl;Vivid Vervet  + openStack kilo;为容器开发者(OpenStack工作环 ...

  6. Python with ASP

    Python with ASP Python with ASP

  7. Hadoop 6、第一个mapreduce程序 WordCount

    1.程序代码 Map: import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.h ...

  8. #include <queue>

    双端队列deque比向量vector更有优势 双端队列(deque) 连续存储的指向不同元素的指针所组成的数组<deque> 队列(queue) 先进先出的值的排列 <queue&g ...

  9. eclipse 中的凝视 快捷键

    (1)Ctrl+Space 说明:内容助理. 提供对方法,变量,參数,javadoc等得提示, 应运在多种场合,总之须要提示的时候可先按此快捷键. 注:避免输入法的切换设置与此设置冲突 (2)Ctrl ...

  10. jquery第三期:js与jquery对象转换

    我们开始进入jquery的学习了,jquery的学习就不那么中规中矩了,我们来看一个和javascript有所区别的地方. <!DOCTYPE html PUBLIC "-//W3C/ ...