第一次学使用软件去读取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. How Many Fibs?

    How Many Fibs? 点我 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  2. UVA 12657 Boxes in a Line

    双向链表 注意:如果算法是最后处理翻转情况时,注意指令4翻转后1,2两个指令也要翻转处理: 指令3 中交换盒子要注意两个盒子相邻的情况 #include <iostream> #inclu ...

  3. Ubuntu安装与初始配置

    转载请注明作者:梦里风林 更多文章查看我的个人站: ahangchen.site 适用于Ubuntu版本 14.04/16.04LTS 64位 先上图 双系统安装 划分空闲磁盘,U盘安装ubuntu ...

  4. 使用jsp生成验证码

    在开发中验证码是比较常用到有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试的方式. 此演示程序包括三个文件: 1.index.jsp:登录页面 2.image.jsp:生成 ...

  5. 你真的会玩SQL吗?内连接、外连接

    原文:你真的会玩SQL吗?内连接.外连接 大多数人一般写多表查询会这样写select * from tbA ,tbB  没有用到JOIN关键字,太Low了,官网标准建议是用JOIN明确表间的关系,下面 ...

  6. Snippet Compiler——代码段编译工具

    原文地址:http://www.cnblogs.com/conexpress/archive/2011/07/24/2115308.html 不知道大家在工作中是否遇到过下面的情况:在项目中实现了一段 ...

  7. Poj 1269 Intersecting Lines_几何模板

    #include <iostream> #include <math.h> #include <iomanip> #define eps 1e-8 #define ...

  8. poj 1094 Sorting It All Out_拓扑排序

    题意:是否唯一确定顺序,根据情况输出 #include <iostream> #include<cstdio> #include<cstring> #include ...

  9. 【类克鲁斯卡尔做法+枚举最小边】【HDU1598】【find the most comfortable road】

    题意:  给你一个图,有边权,K个询问:u到v 的路径中   边权最大值-边权最小值的最小值是多少 http://acm.hdu.edu.cn/showproblem.php?pid=1598 题解( ...

  10. JavaScript 【跨浏览器处理XML,做个兼容】

    //兼容方法        function getXMLDOM(xmlStr) {            var xmlDom = null;            if (typeof windo ...