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:table
、display:table-row
和 display: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>
我目前使用 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:table
、display:table-row
和 display: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>