2017-02-09 19 views
0

В настоящее время я пытаюсь сгенерировать документ слов с помощью docxtpl. Однако я не могу понять, как добавить стиль слова к объекту Richtext, когда имя стиля включает пробел, поскольку стиль не применяется в документе слова. В других случаях, когда стиль называется одним словом, он отлично работает. Вот мой текущий код:Как применить стили Word к объекту Richtext? (библиотека docxtpl)

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') 

Дзиндзя код в текстовый документ:

{{r data}} 

Я создал вопрос о gitlab с этим, но было интересно, если кто-то использовал эту библиотеку до и имел любая хорошая работа вокруг?

ответ

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

 Смежные вопросы

  • Нет связанных вопросов^_^