Java Spring / Apache POI / THymeleaf-从MSWord到HTML的格式化样式

时间:2019-03-17 05:31:57

标签: java spring spring-mvc apache-poi thymeleaf

我有一个基于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。 因此,如何将样式从文档保留到网页? 预先感谢。

1 个答案:

答案 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>