You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jinja2&Flask生成Word文档:如何去除HTML标签并保留格式?

解决方案:将HTML格式文本转换为Word富文本(无HTML标签)

完全可行,核心思路是不要直接将HTML字符串传入Word模板,而是先解析HTML标签,将其转换为Word文档原生支持的富文本格式后再填充模板。以下是针对你的Flask+python-docx-template场景的具体实现步骤:

1. 安装依赖库

确保你已安装必要的工具库:

pip install python-docx-template beautifulsoup4

2. 编写HTML转Word富文本的过滤器

在Flask应用中定义一个Jinja2过滤器,用于解析HTML标签并生成RichText对象(python-docx-template支持的富文本格式):

from bs4 import BeautifulSoup
from docxtpl import RichText
from flask import Flask

app = Flask(__name__)

def html_to_rich_text(html_str):
    soup = BeautifulSoup(html_str, "html.parser")
    rt = RichText()

    # 递归处理HTML元素,支持嵌套格式
    def process_node(node, bold=False, italic=False):
        if node.name == "b":
            for child in node.children:
                process_node(child, bold=True, italic=italic)
        elif node.name == "i":
            for child in node.children:
                process_node(child, bold=bold, italic=True)
        elif node.name == "li":
            # 添加项目符号
            rt.add("• ", bold=bold, italic=italic)
            for child in node.children:
                process_node(child, bold=bold, italic=italic)
            rt.add("\n")
        elif node.name in ("ul", "ol"):
            # 遍历列表子元素,跳过列表容器本身
            for child in node.children:
                process_node(child, bold=bold, italic=italic)
        elif isinstance(node, str):
            # 处理纯文本节点,跳过空内容
            text = node.strip()
            if text:
                rt.add(text, bold=bold, italic=italic)

    process_node(soup)
    return rt

# 注册Jinja2过滤器
app.jinja_env.filters["html_to_rt"] = html_to_rich_text

3. 修改Word模板中的变量引用

在你的Word模板文件中,将原本直接引用变量的语法:

{{ form_content }}

替换为使用过滤器的语法:

{{ form_content|html_to_rt }}

4. 保持原表单流程不变

你的现有表单提交、Flask路由接收变量的逻辑无需修改——只要确保传递给模板的是原始HTML字符串即可,过滤器会自动完成格式转换。

这个方案支持你需要的加粗、斜体、无序列表格式,同时完全去除HTML标签。如果后续需要扩展其他格式(如有序列表、下划线),只需在process_node函数中添加对应标签的处理逻辑即可。

内容的提问来源于stack exchange,提问作者OtterVonBismarck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 13:55:36