我目前正在尝试使用docxtpl生成word文档。但是,当样式名称包含空格时,我无法弄清楚如何向Richtext对象添加单词样式,因为样式未在单词文档中应用。在使用单个单词命名样式的其他情况下,它可以正常工作。 这是我目前的代码:
from bs4 import BeautifulSoup
from docxtpl import DocxTemplate, RichText
html = "<html><body><p><p>I am a paragraph generated by python.</p></p><ul><li>List 1 item 1</li><li>List 1 item " \
"2</li></ul><p>Example below:</p><li>List 2 item 1</li><li>List 2 item 1</li><p>End paragraph</p></body></html> "
def main():
soup = BeautifulSoup(html, 'html.parser').find_all()
rt = RichText()
for tag in soup:
if tag.name == 'p' and tag.parent.name != 'p':
print tag.text
rt.add(tag.text + "\n\n")
elif tag.name == 'li' and tag.parent.name != 'li':
rt.add(tag.text + "\n", style='Subtle Reference')
output_data = {"data": rt}
tpl = DocxTemplate('template.docx')
tpl.render(output_data)
tpl.save('output.docx')
Word文档中的Jinja代码:
{{r data}}
我在gitlab上用这个创建了一个问题,但是想知道是否有人之前使用过这个库并且有任何好的工作吗?
答案 0 :(得分:1)
从示例文件中,您似乎无法将HTML字符串直接转换为RichText()。你必须使用他们的类语法。
以下是一个例子:
rt = RichText('an exemple of ')
rt.add('a rich text', style='myrichtextstyle')
rt.add(' with ')
rt.add('some italic', italic=True)
rt.add(' and ')
rt.add('some violet', color='#ff00ff')
rt.add(' and ')
rt.add('some striked', strike=True)
rt.add(' and ')
rt.add('some small', size=14)
rt.add(' or ')
rt.add('big', size=60)
rt.add(' text.')
rt.add(' Et voilà ! ')
rt.add('\n1st line')
rt.add('\n2nd line')
rt.add('\n3rd line')
rt.add('\n\n<cool>')
context = {
'example' : rt,
}
tpl.render(context)
tpl.save('test_files/richtext.docx')
来源:https://github.com/elapouya/python-docx-template/blob/master/tests/richtext.py