package com.steerinfo.dil.util; import org.apache.poi.hslf.usermodel.*; import org.apache.poi.xslf.usermodel.*; import javax.imageio.ImageIO; import java.awt.*; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.Base64; /** * * @author ruand http://blog.csdn.net/emoven/article/details/52683215 */ public class POIPptToHtml { private final static String PPT = "ppt"; private final static String PPTX = "pptx"; public static String pptToHtml(InputStream is, String type) { String htmlStr = "预览失败"; try { if (PPT.equals(type)) { htmlStr = toImage2003(is); } else if (PPTX.equals(type)) { htmlStr = toImage2007(is); } else { htmlStr = "the file is not a ppt"; } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return htmlStr; } public static String toImage2007(InputStream is) throws Exception { String htmlStr = "预览失败"; XMLSlideShow ppt = new XMLSlideShow(is); is.close(); Dimension pgsize = ppt.getPageSize(); System.out.println(pgsize.width + "--" + pgsize.height); StringBuffer sb = new StringBuffer(); for (int i = 0; i < ppt.getSlides().size(); i++) { try { // 防止中文乱码 for (XSLFShape shape : ppt.getSlides().get(i).getShapes()) { if (shape instanceof XSLFTextShape) { XSLFTextShape tsh = (XSLFTextShape) shape; for (XSLFTextParagraph p : tsh) { for (XSLFTextRun r : p) { r.setFontFamily("宋体"); } } } } BufferedImage img = new BufferedImage(pgsize.width, pgsize.height, BufferedImage.TYPE_INT_RGB); Graphics2D graphics = img.createGraphics(); // clear the drawing area graphics.setPaint(Color.white); graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height)); // render ppt.getSlides().get(i).draw(graphics); ByteArrayOutputStream stream = new ByteArrayOutputStream(); ImageIO.write(img, "png", stream); String imgStr = Base64.getEncoder().encodeToString(stream.toByteArray()); // save the output sb.append("
"); sb.append(""); stream.close(); } catch (Exception e) { System.out.println("第" + i + "张ppt转换出错"); } } System.out.println("success"); htmlStr = sb.toString(); return htmlStr; } public static String toImage2003(InputStream is) { String htmlStr = "预览失败"; try { HSLFSlideShow ppt = new HSLFSlideShow(is); Dimension pgsize = ppt.getPageSize(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < ppt.getSlides().size(); i++) { // 防止中文乱码 for (HSLFShape shape : ppt.getSlides().get(i).getShapes()) { if (shape instanceof HSLFTextShape) { HSLFTextShape tsh = (HSLFTextShape) shape; for (HSLFTextParagraph p : tsh) { for (HSLFTextRun r : p) { r.setFontFamily("宋体"); } } } } BufferedImage img = new BufferedImage(pgsize.width, pgsize.height, BufferedImage.TYPE_INT_RGB); Graphics2D graphics = img.createGraphics(); // clear the drawing area graphics.setPaint(Color.white); graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height)); // render ppt.getSlides().get(i).draw(graphics); ByteArrayOutputStream stream = new ByteArrayOutputStream(); //String imageDir = targetDir + "/" + pptFileName + "/"; //FileUtils.createDir(imageDir);// create image dir //String imagePath = imageDir + pptFileName + "-" + (i + 1) + ".png"; ImageIO.write(img, "png", stream); String imgStr = Base64.getEncoder().encodeToString(stream.toByteArray()); sb.append("
"); sb.append(""); stream.close(); } System.out.println("success"); htmlStr = sb.toString(); } catch (Exception e) { } return htmlStr; } /*** * 功能 :调整图片大小 * * @param srcImgPath * 原图片路径 * @param distImgPath * 转换大小后图片路径 * @param width * 转换后图片宽度 * @param height * 转换后图片高度 */ public static void resizeImage(String srcImgPath, String distImgPath, int width, int height) throws IOException { File srcFile = new File(srcImgPath); Image srcImg = ImageIO.read(srcFile); BufferedImage buffImg = null; buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); buffImg.getGraphics().drawImage(srcImg.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null); ImageIO.write(buffImg, "JPEG", new File(distImgPath)); } }