相信有些小伙伴会遇到这样的场景,那就是想要在前端网页上面预览word文件,但是直接预览word文件相对来说还是体验不是很好,再加上如果还想直接在文件上面做一些编辑改变的话,一般前端的富文本编辑器编辑的都是Html文件。所以这个时候我们可以考虑将word转成Html,之后预览和编辑都变得非常简单。之后还需要将文件转成pdf之类的文件也非常方便。
话不多说,下面给大家分享个非常简单好用的方案,并且下面会给出个实际实现的案例。
我们借助的是poi工具,它的功能非常强大,贴出他的github地址:https://github.com/apache/poi,如果想获取更多信息可以去看看。
我这边用到的相关工具引入:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.poi.xwpf.converter.xhtml</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>1.3</version>
</dependency>
现在我们遇到的word文件有两种,一种是以docx文件结尾的,另一种是doc文件结尾的。两种文件在内部编码是有一些差异的,doc是03版本或更早,docx只有07版之后才有的格式。
当然它们转Html的方法也稍有不同,下面分别给出demo,两个方案的测试数据也有不同,各位根据自己的需要调整就行。
public static String docToHtml() throws Exception {
HWPFDocument hwpfDocument = new HWPFDocument(new FileInputStream("E:\\****.doc"));
Document newDocument = XMLHelper.getDocumentBuilderFactory().newDocumentBuilder().newDocument();
WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(newDocument);
wordToHtmlConverter.processDocument(hwpfDocument);
Transformer transformer = TransformerFactory.newInstance()
.newTransformer();
//指定Transformer在输出结果树时是否可以添加额外的空格
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
//指定输出编码
transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
transformer.setOutputProperty(OutputKeys.METHOD, "html");
//这里是希望将转换后的流最终输出到字符串进行返回, 如果你希望直接输出文件, 你可以创建一个文件流放进下面的参数
StringWriter stringWriter = new StringWriter();
transformer.transform(new DOMSource(wordToHtmlConverter.getDocument()), new StreamResult(stringWriter));
String html = stringWriter.toString();
return html;
}
private static String docxToHtml(byte[] fileType) throws IOException {
XWPFDocument document = new XWPFDocument(new ByteArrayInputStream(fileType));
StringWriter stringWriter = new StringWriter();
XHTMLConverter xhtmlConverter = (XHTMLConverter) XHTMLConverter.getInstance();
XHTMLOptions options = XHTMLOptions.getDefault();
xhtmlConverter.convert(document, stringWriter,options);
String html = new String (stringWriter.toString().getBytes("utf-8"),"utf-8");
return html;
}
转换成html就可以快乐地使用啦~