我有一个基于Spring MVC构建的应用程序,该应用程序使用Apache POI读取MSWord DOCX,并将其返回到HTML Thymeleaf网页。但是我无法保持粗体,斜体,字体颜色,字体大小等文本格式样式。
Spring Controller方法返回一个ModelAndView,其中包含一个名为docDetail的变量,并从loadResource()中加载了XWPFDocument对象。
[...]
@GetMapping("/document")
public ModelAndView document() {
[...]
modelAndView.addObject("docDetail", fileService.loadResource());
return modelAndView;
}
[...]
HTML Thymeleaf会在浏览文档中的段落时填充一个片段。
[...]
<div th:fragment="doc-detail">
<div th:each="par : ${docDetail.paragraphs}">
<p th:text="${par.text}"></p>
</div>
</div>
[...]
结果显示为纯文本。我还没有尝试过Apache Tika。 因此,如何将样式从文档保留到网页? 预先感谢。
答案 0 :(得分:0)
我想我看到了你的问题。您正在使用XWPFDocument
并在不考虑样式的情况下浏览文本。在POI中,字体和样式以XWPFRun
类型编码,该类型比段落低一级。因此,您将需要一个额外的th:each
来遍历运行并为每个运行应用样式。您的代码将如下所示:
<div th:fragment="doc-detail">
<div th:each="par : ${docDetail.paragraphs}">
<div th:each="run : ${par.runs}">
<span th:if="run.bold"><b th:value="run.text"></b></span>
<span th:unless="run.italic"><i th:value="run.text"></i></span>
<span th:unless="1==1" th:value="run.text"></span>
</div>
</div>
</div>