package seed.utils; 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.io.StringWriter; import java.io.UnsupportedEncodingException; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.FactoryConfigurationError; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.converter.WordToHtmlConverter; import org.apache.poi.hwpf.usermodel.Picture; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.w3c.dom.Document; import org.w3c.dom.Element; public class SeedCvtDOCToHtml { private Logger log = Logger.getLogger(this.getClass()); // public static void main(String args[]){ // // String filePath = "F:/javaConvert/test/test.doc"; // String output = "F:/javaConvert/test/img/"; // // new SeedCvtDOCToHtml().convert(filePath, output); // } public void convert(String filePath, String output) { boolean success = false; if(filePath.endsWith(".doc")) { File file = new File(filePath); if (file.exists()) { POIFSFileSystem fs = null; FileOutputStream fileOutputStream = null; OutputStreamWriter outputStreamWriter = null; BufferedWriter bufferedWriter = null; try { fs = new POIFSFileSystem(new FileInputStream(filePath)); HWPFDocument hwpfDocument = new HWPFDocument(fs); WordToHtmlConverter wordToHtmlConverter = new img( DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument()); wordToHtmlConverter.processDocument(hwpfDocument); StringWriter stringWriter = new StringWriter(); Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8"); transformer.setOutputProperty(OutputKeys.METHOD, "html"); transformer.transform( new DOMSource(wordToHtmlConverter.getDocument()), new StreamResult(stringWriter)); 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(stringWriter.toString()); bufferedWriter.flush(); success = true; } catch (TransformerConfigurationException e) { log.error("CHECK ERROR:",e); success = false; } catch (TransformerFactoryConfigurationError e) { log.error("CHECK ERROR:",e); success = false; } catch (TransformerException e) { log.error("CHECK ERROR:",e); success = false; } catch (ParserConfigurationException e) { log.error("CHECK ERROR:",e); success = false; } catch (FactoryConfigurationError e) { log.error("CHECK ERROR:",e); success = false; } catch (FileNotFoundException e) { log.error("CHECK ERROR:",e); success = false; } catch (UnsupportedEncodingException e) { log.error("CHECK ERROR:",e); success = false; } catch (IllegalArgumentException 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(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, ""); } } } public class img extends WordToHtmlConverter { public img(Document document) { super(document); } @Override protected void processImageWithoutPicturesManager(Element currentBlock, boolean inlined, Picture picture){ Element imgNode = currentBlock.getOwnerDocument().createElement("img"); StringBuilder sb = new StringBuilder(); sb.append(Base64.encodeBase64String(picture.getRawContent())); sb.insert(0, "data:"+picture.getMimeType()+";base64,"); imgNode.setAttribute("src", sb.toString()); currentBlock.appendChild(imgNode); } } private static String getFileName(String filePath){ int sep = filePath.lastIndexOf("\\") == -1 ? filePath.lastIndexOf("/") : filePath.lastIndexOf("\\"); return filePath.substring( sep + 1 , filePath.lastIndexOf(".")); } }