POI开源项目-PPT2PNG转换测试

第一次学使用软件去读取Office类文件。

今天百度了一下,发现Apache也是有这样的开源项目的,POI提供下列支持:

测试了一下HSLF对PPT的读操作,并将PPT转化为图片保存到指定目录:

使用之前必须将包引入:

 

关联包:

测试主函数如下:

设置输入ppt文件、输出路径、以及生成图片规模大小。

 1 package edu.office;
 2
 3 import java.util.List;
 4
 5 public class TestTransfor {
 6
 7     /**
 8      * 测试ppt转换
 9      *
10      * **/
11     public static void main(String[] args) {
12         PPTReader reader = new PPTReader();
13         reader.setPPT_file_path("D:/1.ppt");
14         reader.setOutput_path("D:/ppt/");
15         //控制图片尺寸 1倍 2倍 3倍
16         reader.setScale(1);
17
18         List<String> images = reader.ppt2png();
19         for(String image : images){
20             System.out.println(image);
21         }
22     }
23
24 }

PPT转化png类如下:

  1 package edu.office;
  2
  3 import java.awt.Color;
  4 import java.awt.Dimension;
  5 import java.awt.Graphics2D;
  6 import java.awt.RenderingHints;
  7 import java.awt.geom.Rectangle2D;
  8 import java.awt.image.BufferedImage;
  9 import java.io.File;
 10 import java.io.FileInputStream;
 11 import java.io.FileNotFoundException;
 12 import java.io.FileOutputStream;
 13 import java.io.IOException;
 14 import java.util.ArrayList;
 15 import java.util.List;
 16
 17 import javax.imageio.ImageIO;
 18
 19 import org.apache.poi.hslf.model.Slide;
 20 import org.apache.poi.hslf.usermodel.SlideShow;
 21
 22 public class PPTReader{
 23
 24     //ppt输入文件路径
 25     private String ppt_file_path;
 26     //ppt2png保存png图片的路径
 27     private String output_path;
 28     //scale是图片是原来的size几倍
 29     private int scale = 1;
 30
 31     public String getPpt_file_path() {
 32         return ppt_file_path;
 33     }
 34     public void setPPT_file_path(String ppt_file_path) {
 35         this.ppt_file_path = ppt_file_path;
 36     }
 37     public int getScale() {
 38         return scale;
 39     }
 40     public void setScale(int scale) {
 41         this.scale = scale;
 42     }
 43     public String getOutput_path() {
 44         return output_path;
 45     }
 46     public void setOutput_path(String output_path) {
 47         this.output_path = output_path;
 48     }
 49
 50     /**ppt转png
 51      *
 52      * @return null 失败  list<String> 图片名称列表
 53      * **/
 54     public List<String> ppt2png(){
 55         //int slidenum = 2;
 56         List<String> images = new ArrayList<String>();
 57         try {
 58             FileInputStream is;
 59             is = new FileInputStream(ppt_file_path);
 60             SlideShow ppt = new SlideShow(is);
 61             is.close();
 62
 63             Dimension pgsize = ppt.getPageSize();
 64
 65             int width = (int)(pgsize.width*scale);
 66             int height = (int)(pgsize.height*scale);
 67
 68             Slide[] slide = ppt.getSlides();
 69             for (int i = 0; i < slide.length; i++) {
 70
 71                 //if (slidenum != -1 && slidenum != (i+1)) continue;
 72                 //获取每页ppt标题
 73                 String title = slide[i].getTitle();
 74                 //System.out.println("Rendering slide "+slide[i].getSlideNumber() + (title == null ? "" : ": " + title));
 75
 76                 BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
 77                 Graphics2D graphics = img.createGraphics();
 78                 graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 79                 graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
 80                 graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
 81                 graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
 82
 83                 graphics.setPaint(Color.white);
 84                 graphics.fill(new Rectangle2D.Float(0, 0, width, height));
 85
 86                 graphics.scale((double)width/pgsize.width, (double)height/pgsize.height);
 87
 88                 slide[i].draw(graphics);
 89                 //对每一张图片进行命名
 90                 String fname = output_path + "ppt-" + (i+1) + ".png";
 91                 images.add("ppt-" + (i+1) + ".png");
 92                 File file = new File(output_path);
 93                 if(!file.exists()){
 94                     file.mkdirs();
 95                 }
 96                 FileOutputStream out = new FileOutputStream(fname);
 97                 ImageIO.write(img, "png", out);
 98                 out.close();
 99             }
100             return images;
101         } catch (FileNotFoundException e) {
102             e.printStackTrace();
103         } catch (IOException e) {
104             e.printStackTrace();
105         }
106         return null;
107     }
108 }
时间: 2024-07-31 14:27:30

POI开源项目-PPT2PNG转换测试的相关文章

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

今天在看博客的时候,无意中发现了@Trinea在GitHub上的一个项目Android开源项目分类汇总,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有参考价值,包括很炫的界面特效设计.个性化控件.工具库.优秀的Android开源项目.开发测试工具.优秀个人和团体等.可以这样说,每一位Andorid开发人员都能从中找到一个或多个适用自己项目的解决方案,消化吸收并加以利用,可以为自己的APP增色不少.文章最后还列出了部分国外著名Android开发者的信息,包括GitHub地址

Python:渗透测试开源项目

Python:渗透测试开源项目[源码值得精读] sql注入工具:sqlmap DNS安全监测:DNSRecon 暴力破解测试工具:patator XSS漏洞利用工具:XSSer Web服务器压力测试工具:HULK SSL安全扫描器:SSLyze 网络 Scapy: send, sniff and dissect and forge network packets. Usable interactively or as a library pypcap, Pcapy and pylibpcap:

Python:渗透测试开源项目【源码值得精读】

sql注入工具:sqlmap DNS安全监测:DNSRecon 暴力破解测试工具:patator XSS漏洞利用工具:XSSer Web服务器压力测试工具:HULK SSL安全扫描器:SSLyze 网络 Scapy: send, sniff and dissect and forge network packets. Usable interactively or as a library pypcap, Pcapy and pylibpcap: several different Python

Android 开源项目android-open-project开发工具及测试工具解析 开发效率工具,开发自测相关,测试工具,开发及编译环境,其他

主要介绍和Android开发工具和测试工具相关的开源项目. 一.开发效率工具 Parceler 通过注解及工具类自动完成实体类 Parcelable及值传递 项目地址:https://github.com/johncarl81/parceler Json2Java 根据JSon数据自动生成对应的Java实体类,还支持Parcel.Gson Annotations对应代码自动生成.期待后续的提取父类以及多url构建整个工程的功能 项目地址:https://github.com/jonfhancoc

DIOCP开源项目-DIOCP3的ECHO测试&lt;贴图&gt;

星期六开了测试台测试机子.星期天休息,今天早上来接两个图 开了2个客户端,一个qsl的echo client,一个是楠楠的dbiocp回调客户端.建立13240个连接 今天来后,机子很卡,后来发现是楠楠的dbiocp导致的.难怪,速率才14M /s,刚1个小时能达到 90M/S,关掉后,和qsl的客户端继续很正常. 唯一的缺陷是,Integer溢出了,导致统计数据出现了负数.qsl的客户端一样也是这个问题,实际使用倒是可以忽略. 内存占用<设定的WSARecv的内存块大小为1024>,内存占用

Android开源项目第四篇——开发及测试工具篇

本文为那些不错的Android开源项目第四篇——开发工具篇,主要介绍Android开发工具和测试工具相关的开源项目. Android开源项目系列汇总已完成,包括: Android开源项目第一篇——个性化控件(View)篇 Android开源项目第二篇——工具库篇 Android开源项目第三篇——优秀项目篇 Android开源项目第四篇——开发及测试工具篇 Android开源项目第五篇——优秀个人和团体篇 1.Buck facebook开源的Android编译工具,效率是ant的两倍.主要优点在于

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

测试 目前主流的就bdd和tdd,自己查一下差异 推荐 mocha和tape 另外Jasmine也挺有名,angularjs用它,不过挺麻烦的,还有一个选择是qunit,最初是为jquery测试写的,在nodejs里用还是觉得怪怪的. 如果想简单可以tap,它和tape很像,下文会有详细说明 mocha mocha是tj写的 https://github.com/mochajs/mocha var assert = require("assert") describe('truth',

Android图片圆角转换 RoundedImageView开源项目 小记

Android 将图片快速转换成圆角的方法 使用开源项目  RoundedImageView github上面的开源项目 官方地址为:   https://github.com/vinc3m1/RoundedImageView 效果如下:     下面快速的集成进来 步骤分为3个 1: 去github上下载 工程 https://github.com/vinc3m1/RoundedImageView 2: 导入工程 3  在布局中使用它 <com.makeramen.rounded.Rounde

.Net 开源项目资源大全

Awesome DotNet,这又是一个 Awesome XXX 系列的资源整理,由 quozd 发起和维护.内容包括:编译器.压缩.应用框架.应用模板.加密.数据库.反编译.IDE.日志.风格指南等. 伯乐在线已在 GitHub 上发起「DotNet 资源大全中文版」的整理.欢迎扩散.欢迎加入. https://github.com/jobbole/awesome-dotnet-cn (注:下面用 [$] 标注的表示收费工具,但部分收费工具针对开源软件的开发/部署/托管是免费的) API 框架