问题及说明
- 将一段html语言描述的文本,转换为word文本,在word文档中格式化显示;
保留缩进、序号、字体颜色、背景色、加粗、斜体、删除线等;- 该效果为自定义代码实现;
- 实现代码语言为python;
- 与python docxtpl 库结合使用。
html表示效果图如下:
输出到word中如下:
调研
在决定自定义实现上述效果前,对现有技术实现调研结果如下:
htmldocx
依赖库:pip htmldocx
测试html样例图:
html文本:
<div>
<h1>标题1</h1>
<h2> 标题2(缩进1个tab)</h2>
<p>有序列表:</p>
<ol>
<li>第1段</li>
<li>第2段</li>
</ol>
<p> 有序<span style="background-color: rgb(54, 207, 201);">列表</span>:(<span
style="color: rgb(231, 95, 51);">缩进1个tab</span>)</p>
<ol>
<ol>
<li>第1段</li>
<ul>
<li>有序中无序项1</li>
<li>有序中无序项2</li>
</ul>
<li>第2段</li>
</ol>
</ol>
<p>无序<strong>列表</strong>:</p>
<ul>
<li>第一</li>
<li>第二</li>
</ul>
<p> 无序列表:(<span style="color: rgb(231, 95, 51);">缩进1个tab</span>)</p>
<ul>
<ul>
<li>第一</li>
<li>第二</li>
</ul>
</ul>
<p>测试<u>缩进</u>:</p>
<p> <em>缩进1个tab</em></p>
<p> 缩进2个tab</p>
<p><br></p>
</div>
测试代码:
def test_htmldocx():
# pip htmldocx
from htmldocx import HtmlToDocx
new_parser = HtmlToDocx()
new_parser.parse_html_string(html4)
new_parser.doc.save('htmldoc.docx')
# new_parser.parse_html_file("html_filename", "docx_filename")
输出效果:
- 标题2缩进不理想
- 有序列表序号问题
- 且该中方案无法灵活控制文档模板
实现
自定义实现技术:
- 使用docxtpl灵活定义word模板
- 自定义html_to_richtext函数,将html转换为docxtpl可识别的RichText对象