生成HTML:
不生成HTML
doc:
读取word2003所需jar包:
poi-scratchpad-3.10-FINAL.jar
poi-3.10-FINAL.jar
commons-io-1.4.jar
<servlet>
<servlet-name>print</servlet-name>
<servlet-class>com.tpf.PoiWordToHtml</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>print</servlet-name>
<url-pattern>/print</url-pattern>
</servlet-mapping>
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.apache.commons.io.FileUtils;
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.tomcat.util.codec.binary.Base64;
import org.w3c.dom.Document;
public class PoiWordToHtml extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PoiWordToHtml poiWordToHtml = new PoiWordToHtml();
try {
poiWordToHtml.word2003ToHtml(req,resp);
} catch (Exception e) {
e.printStackTrace();
}
}
final String path = "E:\\test\\";
public static void main(String[] args) {
try {
PoiWordToHtml poiWordToHtml = new PoiWordToHtml();
poiWordToHtml.word2003ToHtml();
poiWordToHtml.word2007ToHtml();
} catch (Exception e) {
e.printStackTrace();
}
}
//doc
public void word2003ToHtml(HttpServletRequest req, HttpServletResponse resp) throws Exception{
String file = "签名功能使用手册.doc";
InputStream input = new FileInputStream(path + file);
HWPFDocument wordDocument = new HWPFDocument(input);
WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(
DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());
//设置图片
wordToHtmlConverter.setPicturesManager(new PicturesManager() {
public String savePicture(byte[] content, PictureType pictureType, String suggestedName, float widthInches,
float heightInches) {
return suggestedName;
}
});
wordToHtmlConverter.processDocument(wordDocument);
List pics = wordDocument.getPicturesTable().getAllPictures();
//图片显示方式1:生成图片文件并显示,图片会保存到指定的目录下
/*if (pics != null) {
for (int i = 0; i < pics.size(); i++) {
Picture pic = (Picture) pics.get(i);
try {
pic.writeImageContent(new FileOutputStream(path + pic.suggestFullFileName()));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}*/
Document htmlDocument = wordToHtmlConverter.getDocument();
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
DOMSource domSource = new DOMSource(htmlDocument);
StreamResult streamResult = new StreamResult(outStream);
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);
outStream.close();
String content = new String(outStream.toByteArray());
//图片显示方式2:不生成图片文件,图片以base64形式在页面上展示出来
if (pics != null) {
for (int i = 0; i < pics.size(); i++) {
Picture pic = (Picture) pics.get(i);
byte picContent[] = pic.getContent();
byte picBase[] = Base64.encodeBase64(picContent);
content = content.replace("src=\""+pic.suggestFullFileName(), "src=\"data:image/png;base64,"+new String(picBase)+"\"");
}
}
System.out.println(content);
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
//不生成HTML文件,直接返回数据到页面显示
resp.getWriter().write(content);
//生成指定的HTML文件
//FileUtils.writeStringToFile(new File(path, "签名功能使用手册2003.html"), content, "utf-8");
}
}