POIPptToHtml.java 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. package com.steerinfo.dil.util;
  2. import org.apache.poi.hslf.usermodel.*;
  3. import org.apache.poi.xslf.usermodel.*;
  4. import javax.imageio.ImageIO;
  5. import java.awt.*;
  6. import java.awt.geom.Rectangle2D;
  7. import java.awt.image.BufferedImage;
  8. import java.io.ByteArrayOutputStream;
  9. import java.io.File;
  10. import java.io.IOException;
  11. import java.io.InputStream;
  12. import java.util.Base64;
  13. /**
  14. *
  15. * @author ruand http://blog.csdn.net/emoven/article/details/52683215
  16. */
  17. public class POIPptToHtml {
  18. private final static String PPT = "ppt";
  19. private final static String PPTX = "pptx";
  20. public static String pptToHtml(InputStream is, String type) {
  21. String htmlStr = "预览失败";
  22. try {
  23. if (PPT.equals(type)) {
  24. htmlStr = toImage2003(is);
  25. } else if (PPTX.equals(type)) {
  26. htmlStr = toImage2007(is);
  27. } else {
  28. htmlStr = "the file is not a ppt";
  29. }
  30. } catch (Exception e) {
  31. // TODO Auto-generated catch block
  32. e.printStackTrace();
  33. }
  34. return htmlStr;
  35. }
  36. public static String toImage2007(InputStream is) throws Exception {
  37. String htmlStr = "预览失败";
  38. XMLSlideShow ppt = new XMLSlideShow(is);
  39. is.close();
  40. Dimension pgsize = ppt.getPageSize();
  41. System.out.println(pgsize.width + "--" + pgsize.height);
  42. StringBuffer sb = new StringBuffer();
  43. for (int i = 0; i < ppt.getSlides().size(); i++) {
  44. try {
  45. // 防止中文乱码
  46. for (XSLFShape shape : ppt.getSlides().get(i).getShapes()) {
  47. if (shape instanceof XSLFTextShape) {
  48. XSLFTextShape tsh = (XSLFTextShape) shape;
  49. for (XSLFTextParagraph p : tsh) {
  50. for (XSLFTextRun r : p) {
  51. r.setFontFamily("宋体");
  52. }
  53. }
  54. }
  55. }
  56. BufferedImage img = new BufferedImage(pgsize.width, pgsize.height, BufferedImage.TYPE_INT_RGB);
  57. Graphics2D graphics = img.createGraphics();
  58. // clear the drawing area
  59. graphics.setPaint(Color.white);
  60. graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));
  61. // render
  62. ppt.getSlides().get(i).draw(graphics);
  63. ByteArrayOutputStream stream = new ByteArrayOutputStream();
  64. ImageIO.write(img, "png", stream);
  65. String imgStr = Base64.getEncoder().encodeToString(stream.toByteArray());
  66. // save the output
  67. sb.append("<br>");
  68. sb.append("<img src=" + "\"data:image/png;base64," + imgStr + "\"" + "/>");
  69. stream.close();
  70. } catch (Exception e) {
  71. System.out.println("第" + i + "张ppt转换出错");
  72. }
  73. }
  74. System.out.println("success");
  75. htmlStr = sb.toString();
  76. return htmlStr;
  77. }
  78. public static String toImage2003(InputStream is) {
  79. String htmlStr = "预览失败";
  80. try {
  81. HSLFSlideShow ppt = new HSLFSlideShow(is);
  82. Dimension pgsize = ppt.getPageSize();
  83. StringBuffer sb = new StringBuffer();
  84. for (int i = 0; i < ppt.getSlides().size(); i++) {
  85. // 防止中文乱码
  86. for (HSLFShape shape : ppt.getSlides().get(i).getShapes()) {
  87. if (shape instanceof HSLFTextShape) {
  88. HSLFTextShape tsh = (HSLFTextShape) shape;
  89. for (HSLFTextParagraph p : tsh) {
  90. for (HSLFTextRun r : p) {
  91. r.setFontFamily("宋体");
  92. }
  93. }
  94. }
  95. }
  96. BufferedImage img = new BufferedImage(pgsize.width, pgsize.height, BufferedImage.TYPE_INT_RGB);
  97. Graphics2D graphics = img.createGraphics();
  98. // clear the drawing area
  99. graphics.setPaint(Color.white);
  100. graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));
  101. // render
  102. ppt.getSlides().get(i).draw(graphics);
  103. ByteArrayOutputStream stream = new ByteArrayOutputStream();
  104. //String imageDir = targetDir + "/" + pptFileName + "/";
  105. //FileUtils.createDir(imageDir);// create image dir
  106. //String imagePath = imageDir + pptFileName + "-" + (i + 1) + ".png";
  107. ImageIO.write(img, "png", stream);
  108. String imgStr = Base64.getEncoder().encodeToString(stream.toByteArray());
  109. sb.append("<br>");
  110. sb.append("<img src=" + "\"data:image/png;base64," + imgStr + "\"" + "/>");
  111. stream.close();
  112. }
  113. System.out.println("success");
  114. htmlStr = sb.toString();
  115. } catch (Exception e) {
  116. }
  117. return htmlStr;
  118. }
  119. /***
  120. * 功能 :调整图片大小
  121. *
  122. * @param srcImgPath
  123. * 原图片路径
  124. * @param distImgPath
  125. * 转换大小后图片路径
  126. * @param width
  127. * 转换后图片宽度
  128. * @param height
  129. * 转换后图片高度
  130. */
  131. public static void resizeImage(String srcImgPath, String distImgPath, int width, int height) throws IOException {
  132. File srcFile = new File(srcImgPath);
  133. Image srcImg = ImageIO.read(srcFile);
  134. BufferedImage buffImg = null;
  135. buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
  136. buffImg.getGraphics().drawImage(srcImg.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);
  137. ImageIO.write(buffImg, "JPEG", new File(distImgPath));
  138. }
  139. }