package com.yuson.file.utils;
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.OutputStream;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.apache.log4j.Logger;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.converter.PicturesManager;
import org.apache.poi.hwpf.converter.WordToHtmlConverter;
import org.apache.poi.hwpf.usermodel.Picture;
import org.apache.poi.hwpf.usermodel.PictureType;
import org.apache.poi.xwpf.converter.core.FileImageExtractor;
import org.apache.poi.xwpf.converter.xhtml.XHTMLConverter;
import org.apache.poi.xwpf.converter.xhtml.XHTMLOptions;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.w3c.dom.Document;
import com.lancui.base.file.service.FileService;
import com.lancui.base.file.service.FileTypeDefine;
import com.lancui.common.factory.MessageFactory;
import com.runtrial.system.manage.GlobalSystemManange;
public class PoiUtils {
private static Logger logger = Logger.getLogger(PoiUtils.class);
private static FileService fileService = MessageFactory.getApplicationContext().getBean(FileService.class);
public static void wordToHtml(String path, OutputStream os) throws ParserConfigurationException, IOException,
TransformerException {
String suffix = path.substring(path.lastIndexOf(".") + 1, path.length());
if ("doc".equals(suffix))
docToHtml(path, os);
else if ("docx".equals(suffix))
docxToHtml(path, os);
}
public static void docToHtml(String path, OutputStream os)
throws ParserConfigurationException, IOException, TransformerException {
InputStream input = new FileInputStream(path);
HWPFDocument wordDocument = new HWPFDocument(input);
WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(
DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());
wordToHtmlConverter.setPicturesManager(new PicturesManager() {
@Override
public String savePicture(byte[] content, PictureType pictureType, String suggestedName, float widthInches,
float heightInches) {
String fullPath = path + suggestedName;
// 将url拼接成请求,获取图片流
return "/xxx/img.json?path=" + fullPath;
}
});
wordToHtmlConverter.processDocument(wordDocument);
List<Picture> pics = wordDocument.getPicturesTable().getAllPictures();
if (pics != null) {
for (int i = 0; i < pics.size(); i++) {
Picture pic = pics.get(i);
try {
pic.writeImageContent(new FileOutputStream(path + pic.suggestFullFileName()));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
Document htmlDocument = wordToHtmlConverter.getDocument();
DOMSource domSource = new DOMSource(htmlDocument);
StreamResult streamResult = new StreamResult(os);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer serializer = tf.newTransformer();
serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
serializer.setOutputProperty(OutputKeys.INDENT, "yes");
serializer.setOutputProperty(OutputKeys.METHOD, "html");
serializer.transform(domSource, streamResult);
os.flush();
}
public static void docxToHtml(String path, OutputStream os) throws FileNotFoundException, IOException,
TransformerException, ParserConfigurationException {
String substring = path.substring(0, path.lastIndexOf("\\"));
XWPFDocument document = new XWPFDocument(new FileInputStream(path));
XHTMLOptions options = XHTMLOptions.create().indent(4);
// 导出图片
File imageFolder = new File(substring + "/image");
FileImageExtractor fileImageExtractor = new FileImageExtractor(imageFolder);
options.setExtractor(fileImageExtractor);
// URI resolver
BaseFileURIResolver fileURIResolver = new BaseFileURIResolver("/xxx/img.json?path=" + imageFolder
.getPath());
options.URIResolver(fileURIResolver);
XHTMLConverter.getInstance().convert(document, os, options);
}
}
参数是url和response.getOutputStream()