思路:

获取网络PPT 文件 将PPT每一页的幻灯片都转换成单张图片 用流输出到页面展示

1, 首先获取PPT格式 PPT格式无非两种 PPTX,PPT

2,获取PPT幻灯片页数传递到JSP中

3,JSP循环获取每页PPT

代码:

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Graphics2D;

import java.awt.geom.Rectangle2D;

import java.awt.image.BufferedImage;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.util.List;

import javax.imageio.ImageIO;

import org.apache.poi.hslf.HSLFSlideShow;

import org.apache.poi.hslf.model.Slide;

import org.apache.poi.hslf.model.TextRun;

import org.apache.poi.hslf.usermodel.RichTextRun;

import org.apache.poi.hslf.usermodel.SlideShow;

import org.apache.poi.xslf.usermodel.XMLSlideShow;

import org.apache.poi.xslf.usermodel.XSLFShape;

import org.apache.poi.xslf.usermodel.XSLFSlide;

import org.apache.poi.xslf.usermodel.XSLFTextParagraph;

import org.apache.poi.xslf.usermodel.XSLFTextRun;

import org.apache.poi.xslf.usermodel.XSLFTextShape;

import org.openxmlformats.schemas.drawingml.x2006.main.CTRegularTextRun;

import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody;

import org.openxmlformats.schemas.drawingml.x2006.main.CTTextCharacterProperties;

import org.openxmlformats.schemas.drawingml.x2006.main.CTTextFont;

import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph;

import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape;

import org.openxmlformats.schemas.presentationml.x2006.main.CTShape;

import org.openxmlformats.schemas.presentationml.x2006.main.CTSlide;

import com.yyt.yunbao.common.vo.PptImageResult;

/**

@author Xu Yuanyuan

@version 1.0

@date 2017年4月25日 上午11:11:07

@desc PPT转换为图片

*/

public class PPTToImageUtil {

public static void main(String[] args) {

String url = "http://www.xxx.com/xxx.pptx";//支持ppt和pptx

try {

ByteArrayInputStream pptInput = Utility.readNetFile(url);

PptImageResult result = PPTToImageUtil.convert(".pptx", pptInput);

System.out.println(result.getTotalImage());

System.out.println(result.getImageByteList().size());

} catch (Exception e) {

e.printStackTrace();

}

}

public static PptImageResult convert(String suffix, ByteArrayInputStream pptInput) {

if (pptInput != null) {

if (suffix.endsWith(".pptx")) {

return PPTToImageUtil.ppt2007Img(pptInput);

} else if (suffix.endsWith(".ppt")) {

return PPTToImageUtil.ppt2003Img(pptInput);

}

}

return null;

}

/**

设置PPTX字体

@param slide

*/

private static void setFont(XSLFSlide slide) {

for (XSLFShape shape : slide.getShapes()) {

if (shape instanceof XSLFTextShape) {

XSLFTextShape txtshape = (XSLFTextShape) shape;

for (XSLFTextParagraph paragraph : txtshape.getTextParagraphs()) {

List truns = paragraph.getTextRuns();

for (XSLFTextRun trun : truns) {

trun.setFontFamily("宋体");

double currentFontSize = trun.getFontSize();

if((currentFontSize <=0)||(currentFontSize >=26040)){

trun.setFontSize(30);

}

}

}

}

}

}

/**

转换为2007版的PPT到图片流

@param bais

@return

*/

public static PptImageResult ppt2007Img(ByteArrayInputStream bais) {

PptImageResult result = new PptImageResult();

XMLSlideShow ppt = null;

try {

ppt = new XMLSlideShow(bais);

Dimension pgsize = ppt.getPageSize();

XSLFSlide[] slides = ppt.getSlides();

result.setTotalImage(slides.length);

for (int i = 0; i < slides.length; i++) {

// 设置字体为宋体,解决中文乱码问题

CTSlide xmlObject = slides[i].getXmlObject();

setFont(slides[i]);

CTGroupShape spTree = xmlObject.getCSld().getSpTree();

CTShape[] spArray = spTree.getSpArray();

for (CTShape shape : spArray) {

CTTextBody txBody = shape.getTxBody();

if (txBody == null) {

continue;

}

CTTextParagraph[] pArray = txBody.getPArray();

CTTextFont font = CTTextFont.Factory

.parse(""

+ " "

+ " " + "" + "");

for (CTTextParagraph textParagraph : pArray) {

CTRegularTextRun[] textRuns = textParagraph.getRArray();

for (CTRegularTextRun textRun : textRuns) {

CTTextCharacterProperties properties = textRun.getRPr();

properties.setLatin(font);

}

}

}

BufferedImage img = new BufferedImage(pgsize.width, pgsize.height, BufferedImage.TYPE_INT_RGB);

Graphics2D graphics = img.createGraphics();

graphics.setPaint(Color.white);

graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));

slides[i].draw(graphics);

ByteArrayOutputStream baos = new ByteArrayOutputStream();

ImageIO.write(img, "png", baos);

baos.flush();

baos.close();

result.getImageByteList().add(baos.toByteArray());

}

} catch (Exception e) {

e.printStackTrace();

} finally {

if (bais != null) {

try {

bais.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

return result;

}

/**

设置字体防止乱码

@param slide

*/

private static void set2003Font(Slide slide) {

TextRun[] truns = slide.getTextRuns();

if(Utility.isNotEmpty(truns)){

for (TextRun trun: truns) {

RichTextRun[] rtruns = trun.getRichTextRuns();

if(Utility.isNotEmpty(rtruns)){

for (RichTextRun rtrun : rtruns) {

rtrun.setFontIndex(1);

rtrun.setFontName("宋体");

}

}

}

}

}

/**

转换为2003版的PPT到图片流

@param bais

@return

*/

public static PptImageResult ppt2003Img(ByteArrayInputStream bais) {

PptImageResult result = new PptImageResult();

try {

SlideShow ppt = new SlideShow(new HSLFSlideShow(bais));

Dimension pgsize = ppt.getPageSize();

Slide[] slides = ppt.getSlides();

result.setTotalImage(slides.length);

for (int i = 0; i < slides.length; i++) {

set2003Font(slides[i]);

BufferedImage img = new BufferedImage(pgsize.width, pgsize.height, BufferedImage.TYPE_INT_RGB);

Graphics2D graphics = img.createGraphics();

graphics.setPaint(Color.white);

graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));

slides[i].draw(graphics);

ByteArrayOutputStream baos = new ByteArrayOutputStream();

ImageIO.write(img, "png", baos);

baos.flush();

baos.close();

result.getImageByteList().add(baos.toByteArray());

}

} catch (Exception e) {

e.printStackTrace();

} finally {

if (bais != null) {

try {

bais.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

return result;

}

}

java使用poi逐页读取ppxt,JAVA-WEB(通过POI)实现PPT在线预览相关推荐

  1. java flexpaper_java web word文件 pdf文件在线预览源码(flexpaper)

    [实例简介]java web word文件 pdf文件在线预览源码 经过测试 [实例截图] [核心代码] BrowsenOnline html, body{ height:100%; } body { ...

  2. poi PPT 在线预览

    web 中在线预览office 是个头疼的问题. 今天项目刚好做完一个PPT在线预览的功能   在这里分享给大家   思路:      获取网络PPT 文件 将PPT每一页的幻灯片都转换成单张图片   ...

  3. java零碎要点010---Java实现office文档与pdf文档的在线预览功能

    最近项目有个需求要java实现office文档与pdf文档的在线预览功能,刚刚接到的时候就觉得有点难,以自己的水平难以在三四天做完.压力略大.后面查找百度资料.以及在同事与网友的帮助下,四天多把它做完 ...

  4. PPT在线预览 转换为图片实现方案 Apache POI 实现时踩坑:含嵌入文件ppt转换报错 ArrayStoreException

    前言 背景:最近项目需要实现PPT预览功能,以及项目APP上浏览ppt,初步方案是ppt转为图片. 实现 1.ppt转为pdf,然后pdf转为图片 该种实现,先将ppt转为pdf文件,实现方式有很多, ...

  5. java word openoffice_java 使用openoffice 转换文档,成.pdf,实现在线预览效果

    1. 下载 openoffice 地址 https://pan.baidu.com/s/1dfpoG6zlawoW1pqpDvBL0A 密码: v4ej 如果上面的地址无法访问请访问这个地址:下载地址 ...

  6. java 使用poi将PPT转为图片,在线预览PPT

    在线预览PPT,我的思路为java 使用poi将PPT转为图片,图片存储到指定的文件夹下面,然后返回生成的图片名称集合,将图片路径遍历到前台的html标签上,用HTML前台模仿画一个PPT框架,操作图 ...

  7. java通过POI和jacob实现word文档的在线预览和下载

    通过POI和jacob可以实现word文档的在线预览和下载. 首先,引入以下maven依赖. <dependency><groupId>org.apache.poi</g ...

  8. 使用java实现 Excel在线预览

    1 背景  当前有个需求,需要实时读取excel的内容,并显示在页面上. 收到需求的时候, java后端能不能生成个临时文件,然后展示到前台页面,前台只要能请求到后端,预览就生效了. 2 Do IT ...

  9. 快速实现word、excel、ppt、txt等办公文件在线预览功能(Java版)

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/weixin_40986713/ article/details/109527294 java实现办公文件在线预览功能是一个大家 ...

最新文章

  1. IBM之alphablox 数据源定义问题解决
  2. CCF-CSP 201703-2 试题名称: 学生排队(满分代码)
  3. 推荐:浏览器是怎样工作的?
  4. python简单定义_python定义类的简单用法
  5. Python中的抽象类和抽象方法
  6. @QueryParam和@PathParam的区别
  7. Linux教程+操作系统教程
  8. Win10中卸载IE11
  9. 应急响应— 操作系统分析(病毒、后门)
  10. GitHub的Fork 是什么意思
  11. GUI 图形用户界面编程(一)
  12. windows7打不开html文件格式,mht是什么文件?Win7打不开mht格式文件的解决办法
  13. 刘文智《产品经理深入浅出》培训课程笔记
  14. GS认证、VDE认证、CE认证简单介绍
  15. flink SQL与hbase整合
  16. Directsound 与 Waveout 有何不同
  17. 不情愿的守门人:关于全栈开发者的迷思
  18. UNIX 进程揭秘--进程的生命周期
  19. 【Hive】内置函数—日期函数
  20. Caffe中Convolution层

热门文章

  1. bzoj 1646 bfs
  2. WebStorm--常用插件
  3. 验证码生成原理即Python代码实现
  4. “热榜第一”阿里年薪80W的Java架构师,到底是有着怎样的水平?
  5. LaTex | LaTex的数学公式中插入中文
  6. [ACL2017]Going out on a limb:Joint Extraction of Entity Mentions and Relations without Depende...
  7. 【信息系统项目管理师】第二十二章 信息系统安全管理(考点汇总篇)
  8. npm引入小程序官方WeUI组件库weui-miniprogram
  9. 这位“华为天才少年”,竟然要我用“充电宝”打《只狼》
  10. PMP续证流程(PMI)