将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;
    }
}

 

转载于:https://www.cnblogs.com/unique1319/articles/7170205.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值