package uap.pub.fs.pre.poi; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.geom.Rectangle2D.Float; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Base64; import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.TreeSet; import javax.imageio.ImageIO; import nc.bs.logging.Logger; import org.apache.poi.sl.draw.DrawFactory; import org.apache.poi.sl.usermodel.Shape; import org.apache.poi.sl.usermodel.Slide; import org.apache.poi.sl.usermodel.SlideShow; import org.apache.poi.sl.usermodel.SlideShowFactory; import org.apache.poi.xslf.usermodel.XSLFTextParagraph; import org.apache.poi.xslf.usermodel.XSLFTextRun; import org.apache.poi.xslf.usermodel.XSLFTextShape; import uap.pub.fs.pre.poi.IPoiConvertService; public class PPTConvertServiceImpl implements IPoiConvertService { OutputStream output; public String convertHtml(String fileType, InputStream input, OutputStream output) throws Exception { this.output = output; return "ppt".equals(fileType)?this.convertBaseFile(input):this.convertXFile(input); } public String convertBaseFile(InputStream input) throws Exception { StringBuffer sb = new StringBuffer(); sb.append(this.transferPPT(input)); return sb.toString(); } public String convertXFile(InputStream input) throws Exception { StringBuffer sb = new StringBuffer(); sb.append(this.transferPPT(input)); return sb.toString(); } public String transferPPT(InputStream input) throws Exception { StringBuffer sb = new StringBuffer(); sb.append(""); sb.append(" "); sb.append(""); String slidenumStr = "-1"; float scale = 3.0F; SlideShow j = SlideShowFactory.create(input); Throwable sbSub = null; try { List slides = j.getSlides(); Set slidenum = slideIndexes(slides.size(), slidenumStr); if(slidenum.isEmpty()) { String var35 = ""; return var35; } Dimension pgsize = j.getPageSize(); int width = (int)((float)pgsize.width * scale); int height = (int)((float)pgsize.height * scale); Iterator var12 = slidenum.iterator(); while(var12.hasNext()) { Integer slideNo = (Integer)var12.next(); Slide slide = (Slide)slides.get(slideNo.intValue()); Iterator img = slide.getShapes().iterator(); while(img.hasNext()) { Shape graphics = (Shape)img.next(); if(graphics instanceof XSLFTextShape) { XSLFTextShape j1 = (XSLFTextShape)graphics; Iterator sbSub1 = j1.getTextParagraphs().iterator(); while(sbSub1.hasNext()) { XSLFTextParagraph paragraph = (XSLFTextParagraph)sbSub1.next(); List truns = paragraph.getTextRuns(); Iterator var21 = truns.iterator(); while(var21.hasNext()) { XSLFTextRun trun = (XSLFTextRun)var21.next(); trun.setFontFamily("宋体"); } } } } BufferedImage var36 = new BufferedImage(width, height, 2); Graphics2D var37 = var36.createGraphics(); var37.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); var37.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); var37.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); var37.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); var37.setPaint(Color.white); var37.fill(new Float(0.0F, 0.0F, (float)width, (float)height)); DrawFactory.getInstance(var37); var37.scale((double)scale, (double)scale); slide.draw(var37); if(!"null".equals("jpg")) { sb.append(this.getBase64(var36)); } if(sb.length() > 1000) { for(int var38 = 0; var38 * 1000 < sb.length(); ++var38) { String var39 = sb.substring(var38 * 1000, (var38 + 1) * 1000 > sb.length()?sb.length():(var38 + 1) * 1000); this.output.write(var39.toString().getBytes("UTF-8")); } sb.setLength(0); } var37.dispose(); var36.flush(); } } catch (Throwable var31) { sbSub = var31; throw var31; } finally { if(j != null) { if(sbSub != null) { try { j.close(); } catch (Throwable var30) { sbSub.addSuppressed(var30); } } else { j.close(); } } } sb.append("
"); sb.append("
"); for(int var33 = 0; var33 * 1000 < sb.length(); ++var33) { String var34 = sb.substring(var33 * 1000, (var33 + 1) * 1000 > sb.length()?sb.length():(var33 + 1) * 1000); this.output.write(var34.toString().getBytes("UTF-8")); } sb.setLength(0); return sb.toString(); } public String getBase64(BufferedImage image) { StringBuffer sb = new StringBuffer(); try { ByteArrayOutputStream e = new ByteArrayOutputStream(); ImageIO.write(image, "jpg", e); sb.append(Base64.getMimeEncoder().encodeToString(e.toByteArray())); sb.insert(0, "

"); } catch (IOException var4) { Logger.error(var4.getMessage()); } return sb.toString(); } private static Set slideIndexes(int slideCount, String range) { TreeSet slideIdx = new TreeSet(); if("-1".equals(range)) { for(int i = 0; i < slideCount; ++i) { slideIdx.add(Integer.valueOf(i)); } } else { String[] var12 = range.split(","); int var4 = var12.length; label53: for(int var5 = 0; var5 < var4; ++var5) { String subrange = var12[var5]; String[] idx = subrange.split("-"); int startIdx; int endIdx; int i1; switch(idx.length) { case 0: default: break; case 1: startIdx = Integer.parseInt(idx[0]); if(subrange.contains("-")) { endIdx = subrange.startsWith("-")?0:startIdx; i1 = subrange.endsWith("-")?slideCount:Math.min(startIdx, slideCount); int i2 = Math.max(endIdx, 1); while(true) { if(i2 >= i1) { continue label53; } slideIdx.add(Integer.valueOf(i2 - 1)); ++i2; } } else { slideIdx.add(Integer.valueOf(Math.max(startIdx, 1) - 1)); break; } case 2: startIdx = Math.min(Integer.parseInt(idx[0]), slideCount); endIdx = Math.min(Integer.parseInt(idx[1]), slideCount); for(i1 = Math.max(startIdx, 1); i1 < endIdx; ++i1) { slideIdx.add(Integer.valueOf(i1 - 1)); } } } } return slideIdx; } }