package seed.utils; import java.io.BufferedReader; 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.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import org.apache.log4j.Logger; import org.apache.poi.xwpf.converter.core.FileImageExtractor; import org.apache.poi.xwpf.converter.core.FileURIResolver; import org.apache.poi.xwpf.converter.core.XWPFConverterException; import org.apache.poi.xwpf.converter.xhtml.XHTMLConverter; import org.apache.poi.xwpf.converter.xhtml.XHTMLOptions; import org.apache.poi.xwpf.usermodel.XWPFDocument; public class SeedCvtDOCXToHtml { private Logger log = Logger.getLogger(this.getClass()); // public static void main(String args[]) { // // String rootPath = "F:/javaConvert"; // String filePath = "test/test.docx"; // String output = "F:/javaConvert/test/img/"; // // new SeedCvtDOCXToHtml().convert(rootPath, filePath, output); // } public synchronized void convert(String rootPath, String filePath, String output) { boolean success = false; if(filePath.endsWith(".docx")) { File file = new File(rootPath + "/" + filePath); if (file.exists()) { FileInputStream fileInputStream = null; InputStreamReader inputStreamReader = null; BufferedReader bufferedReader = null; FileOutputStream fileOutputStream = null; OutputStreamWriter outputStreamWriter = null; BufferedWriter bufferedWriter = null; try{ StringBuffer fileHtml = new StringBuffer(); InputStream in = new FileInputStream(file); XWPFDocument document = new XWPFDocument(in); XHTMLOptions options = XHTMLOptions.create(); File imageFolder = new File(output + getFileName(filePath) + "/img"); options.setExtractor( new FileImageExtractor(imageFolder)); options.URIResolver( new FileURIResolver(imageFolder)); fileOutputStream = new FileOutputStream(new File(output + getFileName(filePath) + "_org_.jsp")); XHTMLConverter.getInstance().convert(document, fileOutputStream, options); //이미지 경로때문에 파일 읽어서 다시 쓰기 해야함(서버경로에서 해당 파일 경로로 변경) File tmpFile = new File(output + getFileName(filePath) + "_org_.jsp"); if(tmpFile.exists()){ fileInputStream = new FileInputStream(output + getFileName(filePath) + "_org_.jsp"); inputStreamReader = new InputStreamReader(fileInputStream, "EUC-KR"); bufferedReader = new BufferedReader(inputStreamReader); String fileBuffer = ""; while((fileBuffer = bufferedReader.readLine()) != null){ fileHtml.append(fileBuffer); fileHtml.append("\n"); } fileOutputStream = new FileOutputStream(output + getFileName(filePath) + ".jsp"); outputStreamWriter = new OutputStreamWriter(fileOutputStream, "UTF-8"); bufferedWriter = new BufferedWriter(outputStreamWriter); bufferedWriter.write("<%@ page contentType=\"text/html;charset=utf-8\" %>"); bufferedWriter.write("\n"); bufferedWriter.write(fileHtml.toString().replaceAll("\\\\", "/").replaceAll(output, "/site/"+filePath.substring(0, filePath.lastIndexOf("/"))+"/"+getFileName(filePath)+"/convert/")); bufferedWriter.flush(); success = true; } } catch (FileNotFoundException e) { log.error("CHECK ERROR:",e); success = false; } catch (UnsupportedEncodingException e) { log.error("CHECK ERROR:",e); success = false; } catch (XWPFConverterException e) { log.error("CHECK ERROR:",e); success = false; } catch (IOException e) { log.error("CHECK ERROR:",e); success = false; } catch (Exception e) { log.error("CHECK ERROR:",e); success = false; } finally{ if(bufferedReader!=null){try{bufferedReader.close();}catch(IOException e){log.error("CHECK ERROR:",e);}} if(inputStreamReader!=null){try{inputStreamReader.close();}catch(IOException e){log.error("CHECK ERROR:",e);}} if(fileInputStream!=null){try{fileInputStream.close();}catch(IOException e){log.error("CHECK ERROR:",e);}} if(bufferedWriter!=null){try{bufferedWriter.close();}catch(IOException e){log.error("CHECK ERROR:",e);}} if(outputStreamWriter!=null){try{outputStreamWriter.close();}catch(IOException e){log.error("CHECK ERROR:",e);}} if(fileOutputStream!=null){try{fileOutputStream.close();}catch(IOException e){log.error("CHECK ERROR:",e);}} } } if(!success){ SeedUtils.setSeedDeleteFiles(output, ""); }else{ SeedUtils.setSeedDeleteFile(output + getFileName(filePath) + "_org_.jsp"); } } } private static String getFileName(String filePath){ int sep = filePath.lastIndexOf("\\") == -1 ? filePath.lastIndexOf("/") : filePath.lastIndexOf("\\"); return filePath.substring( sep + 1 , filePath.lastIndexOf(".")); } }