166 lines
6.2 KiB
Java
166 lines
6.2 KiB
Java
package seed.utils;
|
||
|
||
import java.awt.Color;
|
||
import java.awt.Dimension;
|
||
import java.awt.Graphics2D;
|
||
import java.awt.geom.AffineTransform;
|
||
import java.awt.geom.Rectangle2D;
|
||
import java.awt.image.BufferedImage;
|
||
import java.io.BufferedWriter;
|
||
import java.io.File;
|
||
import java.io.FileInputStream;
|
||
import java.io.FileNotFoundException;
|
||
import java.io.FileOutputStream;
|
||
import java.io.IOException;
|
||
import java.io.OutputStreamWriter;
|
||
import java.util.stream.Collectors;
|
||
|
||
import javax.imageio.ImageIO;
|
||
|
||
import org.apache.log4j.Logger;
|
||
import org.apache.poi.xslf.usermodel.XMLSlideShow;
|
||
import org.apache.poi.xslf.usermodel.XSLFSlide;
|
||
|
||
public class SeedCvtPPTXToImg {
|
||
|
||
private Logger log = Logger.getLogger(this.getClass());
|
||
|
||
// public static void main(String[] args) {
|
||
//
|
||
// String rootPath = "F:/javaConvert";
|
||
// String filePath = "test/test.pptx";
|
||
// String output = "F:/javaConvert/test/img/";
|
||
//
|
||
// new SeedCvtPPTXToImg().convert(rootPath, filePath, output);
|
||
// }
|
||
|
||
public void convert(String rootPath, String filePath, String output) {
|
||
|
||
boolean success = false;
|
||
|
||
if(filePath.endsWith(".pptx")) {
|
||
|
||
File file = new File(rootPath + "/" + filePath);
|
||
|
||
if (file.exists()) {
|
||
|
||
FileInputStream fileInputStream = null;
|
||
FileOutputStream fileOutputStream = null;
|
||
|
||
FileOutputStream htmlFileOutputStream = null;
|
||
OutputStreamWriter htmlOutputStreamWriter = null;
|
||
BufferedWriter htmlWriter = null;
|
||
|
||
try {
|
||
|
||
fileInputStream = new FileInputStream(file);
|
||
XMLSlideShow ppt = new XMLSlideShow(fileInputStream);
|
||
|
||
double zoom = 2; // magnify it by 2
|
||
AffineTransform at = new AffineTransform();
|
||
at.setToScale(zoom, zoom);
|
||
|
||
Dimension pgsize = ppt.getPageSize();
|
||
XSLFSlide[] slide = ppt.getSlides().stream().toArray(XSLFSlide[]::new);
|
||
|
||
if(slide.length > 0){
|
||
SeedUtils.setSeedMkDirs(output);
|
||
}
|
||
|
||
//html??????
|
||
htmlFileOutputStream = new FileOutputStream(output + "/" + getFileName(filePath) + ".jsp");
|
||
htmlOutputStreamWriter = new OutputStreamWriter(htmlFileOutputStream, "UTF-8");
|
||
htmlWriter = new BufferedWriter(htmlOutputStreamWriter);
|
||
|
||
htmlWriter.write("<%@ page contentType=\"text/html;charset=utf-8\" %>");
|
||
htmlWriter.write("\n");
|
||
htmlWriter.write("<!doctype html>");
|
||
htmlWriter.write("\n");
|
||
htmlWriter.write("<!--[if lt IE 7 ]><html class=\"ie ie6\" lang=\"ko\"><![endif]-->");
|
||
htmlWriter.write("\n");
|
||
htmlWriter.write("<!--[if IE 7 ]><html class=\"ie ie7\" lang=\"ko\"><![endif]-->");
|
||
htmlWriter.write("\n");
|
||
htmlWriter.write("<!--[if IE 8 ]><html class=\"ie ie8\" lang=\"ko\"><![endif]-->");
|
||
htmlWriter.write("\n");
|
||
htmlWriter.write("<!--[if (gte IE 9)|!(IE)]><!--><html lang=\"ko\"><!--<![endif]--> ");
|
||
htmlWriter.write("\n");
|
||
htmlWriter.write(" <head>");
|
||
htmlWriter.write("\n");
|
||
htmlWriter.write(" <meta charset=\"utf-8\">");
|
||
htmlWriter.write("\n");
|
||
htmlWriter.write(" <meta name=\"robots\" content=\"noindex\">");
|
||
htmlWriter.write("\n");
|
||
htmlWriter.write(" <!--[if IE]>");
|
||
htmlWriter.write("\n");
|
||
htmlWriter.write(" <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">");
|
||
htmlWriter.write("\n");
|
||
htmlWriter.write(" <![endif]-->");
|
||
htmlWriter.write("\n");
|
||
htmlWriter.write(" <title>誘몃━蹂닿린 ??댁?</title>");
|
||
htmlWriter.write("\n");
|
||
htmlWriter.write(" <!-- js -->");
|
||
htmlWriter.write("\n");
|
||
htmlWriter.write(" <!--[if lte IE 9]>");
|
||
htmlWriter.write("\n");
|
||
htmlWriter.write(" <script src=\"/js/html5.js\"></script>");
|
||
htmlWriter.write("\n");
|
||
htmlWriter.write(" <![endif]-->");
|
||
htmlWriter.write("\n");
|
||
htmlWriter.write(" </head>");
|
||
htmlWriter.write("\n");
|
||
htmlWriter.write(" <body>");
|
||
htmlWriter.write("\n");
|
||
|
||
for (int i = 0; i < slide.length; i++) {
|
||
|
||
BufferedImage img = new BufferedImage((int)Math.ceil(pgsize.width*zoom), (int)Math.ceil(pgsize.height*zoom), BufferedImage.TYPE_INT_RGB);
|
||
|
||
Graphics2D graphics = img.createGraphics();
|
||
graphics.setTransform(at);
|
||
|
||
graphics.setPaint(Color.white);
|
||
graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));
|
||
slide[i].draw(graphics);
|
||
fileOutputStream = new FileOutputStream(output + getFileName(filePath) + "_" + (i + 1) + ".jpg");
|
||
ImageIO.write(img, "jpg", fileOutputStream);
|
||
|
||
htmlWriter.write(" <img src='/site/"+filePath.substring(0, filePath.lastIndexOf("/"))+"/"+getFileName(filePath)+"/convert/" + getFileName(filePath) + "_" + (i + 1) + ".jpg' alt='" + getFileName(filePath) + "_" + (i + 1) + "' />");
|
||
htmlWriter.write("\n");
|
||
}
|
||
|
||
htmlWriter.write(" </body>");
|
||
htmlWriter.write("\n");
|
||
htmlWriter.write("</html>");
|
||
htmlWriter.write("\n");
|
||
|
||
htmlWriter.flush();
|
||
|
||
success = true;
|
||
|
||
} catch (FileNotFoundException e) {
|
||
log.error("CHECK ERROR:",e);
|
||
success = false;
|
||
} catch (IOException e) {
|
||
log.error("CHECK ERROR:",e);
|
||
success = false;
|
||
}finally{
|
||
if(fileInputStream!=null){try{fileInputStream.close();}catch(IOException e){log.error("CHECK ERROR:",e);}}
|
||
if(fileOutputStream!=null){try{fileOutputStream.close();}catch(IOException e){log.error("CHECK ERROR:",e);}}
|
||
if(htmlWriter!=null){try{htmlWriter.close();}catch(IOException e){log.error("CHECK ERROR:",e);}}
|
||
if(htmlOutputStreamWriter!=null){try{htmlOutputStreamWriter.close();}catch(IOException e){log.error("CHECK ERROR:",e);}}
|
||
if(htmlFileOutputStream!=null){try{htmlFileOutputStream.close();}catch(IOException e){log.error("CHECK ERROR:",e);}}
|
||
}
|
||
}
|
||
|
||
if(!success){
|
||
SeedUtils.setSeedDeleteFiles(output, "");
|
||
}
|
||
}
|
||
}
|
||
|
||
private static String getFileName(String filePath){
|
||
int sep = filePath.lastIndexOf("\\") == -1 ? filePath.lastIndexOf("/") : filePath.lastIndexOf("\\");
|
||
return filePath.substring( sep + 1 , filePath.lastIndexOf("."));
|
||
}
|
||
}
|