如何将Word样式应用于Richtext对象? (docxtpl库)

时间:2017-02-09 17:50:24

标签: python xml python-2.7 ms-word

我目前正在尝试使用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上用这个创建了一个问题,但是想知道是否有人之前使用过这个库并且有任何好的工作吗?

1 个答案:

答案 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