将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.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.imageio.ImageIO;

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.springframework.stereotype.Component;

@Component
public class PPTToImgUtil {
    /**
     * ppt 文档的转换 后缀名为.ppt
     * @param pptFile ppt文件
     * @param imgFile 图片将要保存的目录(不是文件)
     * @return
     */
    public boolean doPPTToImage(File pptFile,File imgFile) {
        FileInputStream is = null;
        FileOutputStream out = null;

        try {
            is = new FileInputStream(pptFile);
            SlideShow ppt = new SlideShow(is);
            Dimension pgsize = ppt.getPageSize();
            Slide[] slide = ppt.getSlides();

            TextRun[] truns = slide[0].getTextRuns();  // 只取ppt第一张

            for (int k = 0; k < truns.length; k++) {
                RichTextRun[] rtruns = truns[k].getRichTextRuns();
                for (int l = 0; l < rtruns.length; l++) {
                    // 原有的字体索引 和 字体名字
                    int index = rtruns[l].getFontIndex();
                    String name = rtruns[l].getFontName();
                    // 重新设置 字体索引 和 字体名称 是为了防止生成的图片乱码问题
                    rtruns[l].setFontIndex(1);
                    rtruns[l].setFontName("宋体");
                }
            }

            //根据幻灯片大小生成图片
            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));
            slide[0].draw(graphics);
            
            
            /*判断文件目录是否存在,不存在创建*/
            if(!imgFile.exists()){
                imgFile.mkdir();
            }

                // 图片的保存位置
            String absolutePath = imgFile.getAbsolutePath();
            File jpegFile = new File(absolutePath);

            // 这里设置图片的存放路径和图片的格式(jpeg,png,bmp等等),注意生成文件路径
            out = new FileOutputStream(jpegFile);
            ImageIO.write(img, "jpeg", out);
            return true;
            
        } catch (Exception e) {
        }finally{
            /*注意,流要分开判断,分开关闭*/
            if(is!=null){
                //及时关闭掉 输入流
                try {
                    is.close();
                } catch (IOException e) {                    
                }
            }
            if(out!=null){
                //及时关闭掉 输入流
                try {
                    out.close();
                } catch (IOException e) {                    
                }
            }
        }
        return false;
    }
}

 

posted @ 2017-07-14 14:38  unique1319  阅读(136)  评论(0编辑  收藏  举报