HTML 使用 docx4j XHTMLImporterImpl 后不保持格式

HTML does not maintain formatting after using docx4j XHTMLImporterImpl

我目前使用 XHTMLImporterImpl 8.0 版和 docx4j 8.23

我有当前的 html,将其保存到文件并在浏览器中查看看起来不错,但在使用转换后,我们丢失了所有格式...有什么想法吗??

<html>
<div>
    <div id="divHfBody" style="display:table;border-collapse: collapse;">
        <div id="divHfBody" style="display:table-row;">
            <div id="divHfBody" style="display:table-cell;border: 1px solid #000000;width:5%;padding:3px;">CODE1</div>
            <div id="divHfBody" style="display:table-cell;border: 1px solid #000000;width:80%;padding:3px;">DESC1</div>
            <div id="divHfBody" style="display:table-cell;border: 1px solid #000000;width:10%;padding:3px;">1.234</div>
        </div>
        <div id="divHfBody" style="display:table-row;">
            <div id="divHfBody" style="display:table-cell;border: 1px solid #000000;width:5%;padding:3px;">CODE2</div>
            <div id="divHfBody" style="display:table-cell;border: 1px solid #000000;width:85%;padding:3px;">DESC 2</div>
            <div id="divHfBody" style="display:table-cell;border: 1px solid #000000;width:10%;padding:3px;">2.0</div>
        </div>
    </div>
</div>
</html>

然后我进行了以下调用,但是当我查看保存后生成的 word 文档时,我没有看到与浏览器中相同的格式。我只看到另一个 div 上有一个盒子。所有 divs 显示为新行..类似于以下内容

    -------------------------------------------------------------
    -CODE1                                                      -
    -DESC1                                                      -
    -1.234                                                      -
    -CODE2                                                      -
    -DESC2                                                      -
    -2.0                                                        -
    -------------------------------------------------------------

这是我的转换代码

XHTMLImporterImpl importer = new XHTMLImporterImpl(wordMLPackage);
List<Object> pHtml = importer.convert(divHtml, null);

你的 html 显示一个 table,因为你使用 css 样式 display:tabledisplay:table-rowdisplay:table-cell 来告诉浏览器将您的 html 呈现为 table。但是,docx4j 在解释 css 样式方面存在局限性。

如果您使用 html 标签而不是 css 样式来显示 table,转换将起作用。在这种情况下,您将提供给 docx4j 导入程序的 html 必须看起来类似于:

<div>
    <table id="divHfBody" style="border-collapse: collapse;">
        <tr id="divHfBody">
            <td id="divHfBody" style="border: 1px solid #000000;width:5%;padding:3px;">CODE1</td>
            <td id="divHfBody" style="border: 1px solid #000000;width:80%;padding:3px;">DESC1</td>
            <td id="divHfBody" style="border: 1px solid #000000;width:10%;padding:3px;">1.234</td>
        </tr>
        <tr id="divHfBody">
            <td id="divHfBody" style="border: 1px solid #000000;width:5%;padding:3px;">CODE2</td>
            <td id="divHfBody" style="border: 1px solid #000000;width:85%;padding:3px;">DESC 2</td>
            <td id="divHfBody" style="border: 1px solid #000000;width:10%;padding:3px;">2.0</td>
        </tr>
    </table>
</div>