Java Spring / Apache POI / THymeleaf - Стиль форматирования из MSWord в HTML - PullRequest
0 голосов
/ 17 марта 2019

У меня есть приложение, построенное на Spring MVC, которое читает MSWord DOCX с Apache POI и возвращает его на веб-страницу HTML Thymeleaf. Но я не могу поддерживать такие стили форматирования текста, как жирный, курсив, цвет шрифта, размер шрифта и т. Д.

Метод Spring Controller возвращает ModelAndView с переменной с именем docDetail, загруженной объектом XWPFDocument из loadResource ().

[...]
@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 голосов
/ 17 марта 2019

Я думаю, что вижу вашу проблему.Вы используете 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>
...