【问题标题】:HTML does not maintain formatting after using docx4j XHTMLImporterImpl使用 docx4j XHTMLImporterImpl 后 HTML 不保持格式
【发布时间】:2021-07-06 21:48:11
【问题描述】:

我目前使用 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 上看到一个框。所有 div 都显示为新行..类似于以下内容

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

这是我的转换代码

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

【问题讨论】:

  • 我猜识别表格元素的代码对节点名称有一些依赖,而不仅仅是 CSS。

标签: java docx4j


【解决方案1】:

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

如果您使用 html 标签而不是 css 样式来显示表格,则转换将起作用。在这种情况下,您将提供给 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>

【讨论】:

  • 谢谢,我试图避免使用 html 表格,因为当我使用包含许多表格的 html 并尝试将其添加到 word 文档中的表格时遇到了问题。即在word文档中,我有一个位于表格单元格中的书签,然后我必须用具有许多嵌套表格的html替换书签。当我尝试这样做时,Docx4j 似乎会引发转换错误,所以我正在使用带边框的 span 或 div 元素,但似乎可以使用 span 或 div 元素为每个单元格打印边框。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多