文档章节

第一天开通博客,分享点自己的东西

 朕是愤怒鱼
发布于 2016/09/20 14:42
字数 977
阅读 12
收藏 0

如何利用poi将ppt,pptx转换为HTML

大部分内容是参考网上的,还有一部分是自己写的,毕竟是忙了很长时间,分享下劳动成果,代码很简单,主要思路是将ppt或者pptx,解析成图片,然后拼装成html代码字符串

说明:方法中传了两个参数,一个是ppt文件在服务器的物理路径,一个是相对于项目的路径,其实是一个地址,相对于项目的路径主要是为了生成存放图片的文件夹。每上传一个文件,如果只是用于预览,生成的文件未免有些多了,建议还是定期删除为好。

 

package com.ysy.officeRead.controller;


import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;

import java.util.List;


import org.apache.poi.hslf.usermodel.HSLFSlide;
import org.apache.poi.hslf.usermodel.HSLFSlideShow;
import org.apache.poi.hslf.usermodel.HSLFTextParagraph;
import org.apache.poi.hslf.usermodel.HSLFTextRun;

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


public class PPTToImage {

    public static void main(String[] args) {
        File file = new File("D:/222.ppt");
        String projectPath = "";
        doPPtoImage(file,projectPath);
    }
    

//用来解析ppt文件,生成html
    public static String doPPTToString(String url,String projectPath){
        
        File file = new File(url);
        String proString2 = projectPath.substring(0, projectPath.lastIndexOf("."))+"/";
        String pathString = url.substring(0, url.lastIndexOf("."));
        if(file.exists()){
            boolean isppt = checkFile(file);
            if (!isppt) {
                System.out.println("The image you specify don't exit!");
                return null;
            }
            
            try {
                
                List<String> imgList = new ArrayList<String>();
                
                FileInputStream is = new FileInputStream(file);
                HSLFSlideShow hss = new HSLFSlideShow(is);
                is.close();
                
                Dimension pgsize = hss.getPageSize();
                List<HSLFSlide> slides = hss.getSlides();
                for (int i = 0; i < slides.size(); i++) {
                    System.out.println("第"+i+"页");
                    
                    List<List<HSLFTextParagraph>> sTextRun = slides.get(i).getTextParagraphs();
                    for (int j = 0; j < sTextRun.size(); j++) {
                        List<HSLFTextParagraph> htps = sTextRun.get(j);
                        for (int k = 0; k < htps.size(); k++) {
                            List<HSLFTextRun> htr = htps.get(k).getTextRuns();
                            for (int l = 0; l < htr.size(); l++) {

                                htr.get(l).setFontIndex(1);
                                htr.get(l).setFontFamily("宋体");
                                System.out.println(htr.get(l).getRawText());
                            }
                        }
                    }
                    
                    BufferedImage img = new BufferedImage(pgsize.width, pgsize.height, BufferedImage.TYPE_INT_RGB);
                    Graphics2D graphics = img.createGraphics();
                    graphics.setColor(java.awt.Color.BLUE);
                    graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));
                    slides.get(i).draw(graphics);
                    
                    //这里设置图片的存放路径和图片的格式(jpeg,png,bmp等),注意生成文件路径
                    File imgFile = new File(pathString+"/"+(i+1)+".jpeg");
                    if (!imgFile.exists()) {
                        if(!imgFile.isDirectory()){
                            imgFile.getParentFile().mkdirs();
                        }
                        imgFile.createNewFile();
                        
                    }
                    
                    FileOutputStream out = new FileOutputStream(pathString+"/"+(i+1)+".jpeg");
                    imgList.add(proString2+(i+1)+".jpeg");
                    
                    javax.imageio.ImageIO.write(img, "jpeg", out);
                    out.close();
                    
                }
                
                String imgcontentString = "";
                //遍历列表,循环输出图片
                if(imgList.size()>0){
                    for (String string : imgList) {
                        imgcontentString = imgcontentString 
                                + "<p valign='middle' align='center'><img src='"+string+"' width='326.95pt' height='266.95pt' /></p></br>";
                        
                    }
                }
                
                System.out.println("success!!");
                return imgcontentString;
                
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
        }
        
        return null;
        
    }
    
    

//用来解析pptx,生成html
    public static String doPPTXToString(String url,String projectPath){
        
        File file = new File(url);
        String proString2 = projectPath.substring(0, projectPath.lastIndexOf("."))+"/";
        String pathString = url.substring(0, url.lastIndexOf("."));
        if(file.exists()){
            boolean isppt = checkFile(file);
            if (!isppt) {
                System.out.println("The image you specify don't exit!");
                return null;
            }
            
            try {
                
                List<String> imgList = new ArrayList<String>();
                
                FileInputStream is = new FileInputStream(file);
                XMLSlideShow hss = new XMLSlideShow(is);
                is.close();
                
                
                List<XSLFSlide> slides = hss.getSlides();
                for (int i = 0; i < slides.size(); i++) {
                    System.out.println("第"+i+"页");
                    
                    
                    Dimension pgsize = hss.getPageSize();                    
                    BufferedImage img = new BufferedImage(pgsize.width, pgsize.height, BufferedImage.TYPE_INT_RGB);
                    Graphics2D graphics = img.createGraphics();
                    graphics.setColor(java.awt.Color.WHITE);
                    graphics.fillRect(0, 0, pgsize.width, pgsize.height);
                    /*graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));*/
                    slides.get(i).draw(graphics);
                    
                    //这里设置图片的存放路径和图片的格式(jpeg,png,bmp等),注意生成文件路径
                    File imgFile = new File(pathString+"/"+(i+1)+".jpeg");
                    if (!imgFile.exists()) {
                        if(!imgFile.isDirectory()){
                            imgFile.getParentFile().mkdirs();
                        }
                        imgFile.createNewFile();
                        
                    }
                    
                    FileOutputStream out = new FileOutputStream(pathString+"/"+(i+1)+".jpeg");
                    imgList.add(proString2+(i+1)+".jpeg");
                    
                    javax.imageio.ImageIO.write(img, "jpeg", out);
                    out.close();
                    
                }
                
                String imgcontentString = "";
                //遍历列表,循环输出图片
                if(imgList.size()>0){
                    for (String string : imgList) {
                        imgcontentString = imgcontentString 
                                + "<p valign='middle' align='center'><img src='"+string+"' width='326.95pt' height='266.95pt' /></p></br>";
                        
                    }
                }
                
                System.out.println("success!!");
                return imgcontentString;
                
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
        }
        
        return null;
        
    }
    
    
    
    public static boolean doPPtoImage(File file,String projectPath){
        
        boolean isppt = checkFile(file);
        if (!isppt) {
            System.out.println("The image you specify don't exit!");
            return false;
        }
        
        try {
            
            FileInputStream is = new FileInputStream(file);
            HSLFSlideShow hss = new HSLFSlideShow(is);
            is.close();
            
            Dimension pgsize = hss.getPageSize();
            List<HSLFSlide> slides = hss.getSlides();
            for (int i = 0; i < slides.size(); i++) {
                System.out.println("第"+i+"页");
                
                List<List<HSLFTextParagraph>> sTextRun = slides.get(i).getTextParagraphs();
                for (int j = 0; j < sTextRun.size(); j++) {
                    List<HSLFTextParagraph> htps = sTextRun.get(j);
                    for (int k = 0; k < htps.size(); k++) {
                        List<HSLFTextRun> htr = htps.get(k).getTextRuns();
                        for (int l = 0; l < htr.size(); l++) {

                            htr.get(l).setFontIndex(1);
                            htr.get(l).setFontFamily("宋体");
                            System.out.println(htr.get(l).getRawText());
                        }
                    }
                }
                
                BufferedImage img = new BufferedImage(pgsize.width, pgsize.height, BufferedImage.TYPE_INT_RGB);
                Graphics2D graphics = img.createGraphics();
                graphics.setColor(java.awt.Color.BLUE);
                graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));
                slides.get(i).draw(graphics);
                
                //这里设置图片的存放路径和图片的格式(jpeg,png,bmp等),注意生成文件路径
                FileOutputStream out = new FileOutputStream("D:/temp/pptToImg/"+(i+1)+".jpeg");
                javax.imageio.ImageIO.write(img, "jpeg", out);
                out.close();
                
            }
            
            System.out.println("success!!");
            return true;
            
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        
        
        return false;
        
    }

    
    //function 检查文件是否为PPT
    private static boolean checkFile(File file) {
        // TODO Auto-generated method stub
        
        boolean isppt = false;
        String filenameString = file.getName();
        String suffixnameString = null;
        if(filenameString != null && filenameString.indexOf(".")!=-1){
            suffixnameString = filenameString.substring(filenameString.indexOf("."));
            if (suffixnameString.equals(".ppt")||suffixnameString.equals(".pptx")){
                isppt = true;
            }
            
            return isppt;
        }else {
            return isppt;
        }
        
    }
}
 

© 著作权归作者所有

粉丝 0
博文 4
码字总数 5115
作品 0
昌平
私信 提问
Python 3 极简教程

Python 3 极简教程 吴小龙同學2017-10-119 阅读 Python 人生苦短,我用 Python! 今天上班的第一天,大家的状态如何昵,是否有假期综合症昵。从《 MySQL、Python 搞起 》,我已经开始自学 Py...

吴小龙同學
2017/10/11
0
0
养猫人士必备App——Catbook

去年在外实习的时候,养了一只叫球球的猫,后来因为一些特殊原因回到另一个城市,临走时将球球托付给了同事,在送走之后,其实整个过程是比较愧疚的,我知道每一只猫都有着人一样细腻又多感的...

升茂
2018/05/18
0
0
读书笔记之这一年学习c#等语言编程知识的感悟(图)

读书笔记之这一年学习c#等语言编程知识的感悟(图) 今天无意翻看自己的博客,发现自己竟是一年前的7月开始学习编程知识的。 感叹时光的飞逝,不知不觉又到了一个7月份。回想当初开通博客的时...

原创小博客
2018/07/23
17
0
JavaScript Date 格式化 以及 本周本月的获取

本文网上收集转载,觉得很有用处,所以留下(毕竟,知识靠积累)。。。。。。 1 Date 的主要使用----单独取值 Date() //------返回当日的日期和时间。 getDate() //---从 Date 对象返回一个月...

learn_more
2014/10/31
1K
0
微信公众号吸引关注的15 种方法

     微信公众号吸引关注是微信公众号运营的一部分,做好它对于公众号的宣传至关重要。下面小编就来为大家整理一些微信公众号吸引关注的方法。      1,利用个人微信号为微信公号宣传...

公众开发运营官网
2017/11/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Replugin借助“UI进程”来快速释放Dex

public static boolean preload(PluginInfo pi) { if (pi == null) { return false; } // 借助“UI进程”来快速释放Dex(见PluginFastInstallProviderProxy的说明) return PluginFastInsta......

Gemini-Lin
今天
4
0
Hibernate 5 的模块/包(modules/artifacts)

Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义...

honeymoose
今天
4
0
CSS--属性

一、溢出 当内容多,元素区域小的时候,就会产生溢出效果,默认是纵向溢出 横向溢出:在内容和容器之间再套一层容器,并且内部容器要比外部容器宽 属性:overflow/overflow-x/overflow-y 取值...

wytao1995
今天
4
0
精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
今天
7
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部