【发布时间】:2022-01-18 14:44:40
【问题描述】:
我从我的 API 中获取降价文本,如下所示:
{
name:'Onur',
surname:'Gule',
biography:'## Computers
I like **computers** so much.
I wanna *be* a computer.',
membership:1
}
biography 列包括上面的降价字符串。
## Computers
I like **computers** so much.
I wanna *be* a computer.
我想将此降价文本转换为我的报告的 docx 字符串。
在我的 docx 模板中:
{{markdownText|mark2html}}
{{simpleText}}
我正在使用 python3 docxtpl 包来创建 docx,它适用于简单的文本。
- 我尝试使用 BeautifulSoup 将 markdown 转换为 docx 文本,但它不适用于样式(粗体、斜体等)。
- 我尝试了 pandoc,它可以工作,但它只是创建了一个 docx 文件,我想将呈现的 markdown 文本添加到现有的 docx(在创建时)。
我当前的代码:
import docx
from docxtpl import DocxTemplate, RichText
import markdown
import jinja2
import markupsafe
from bs4 import BeautifulSoup
import pypandoc
def safe_markdown(text):
return markupsafe.Markup(markdown.markdown(text))
def mark2html(value):
html = markdown.markdown(value)
soup = BeautifulSoup(html, features='html.parser')
output = pypandoc.convert_text(value,'rtf',format='md')
return RichText(value) #tried soup and pandoc..
def from_template(template):
template = DocxTemplate(template)
context = {
'simpleText':'Simple text test.',
'markdownText':'Markdown **text** test.'
}
jenv = jinja2.Environment()
jenv.filters['markdown'] = safe_markdown
jenv.filters["mark2html"] = mark2html
template.render(context,jenv)
template.save('new_report.docx')
那么,我如何将渲染的 Markdown 添加到现有的 docx 或创建时,也许使用 jinja2 过滤器?
【问题讨论】:
标签: python html jinja2 markdown docx