тип и размер шрифта в python -docx - PullRequest
1 голос
/ 18 июня 2020

Я создаю документ MS Word из шаблона, используя python -docx, и мне нужна функция, которая позволяет мне форматировать текст в том же абзаце.

Я нашел этот фрагмент в другом топи c, который работал у меня:

class Text:
    def __init__(self, text, bold=False, italic=False, color=None):
        self.text = text
        self.bold = bold
        self.italic = italic
        self.color = color

def add_text(textitems):
    p = doc.add_paragraph('')
    for t in textitems:
        r = p.add_run(t.text)
        if t.bold:
            r.bold = True
        if t.italic:
            r.italic = True
        if isinstance(t.color, RGBColor):
            r.font.color.rgb = t.color

Это вызывается из другой функции следующим образом:

add_text([Text('This is an ', bold=False, italic=False, color=None),
          Text('example', bold=True, italic=False, color=RGBColor(0xFF, 0x00, 0x00))])

Теперь я хотите реализовать тип и размер шрифта. Как лучше всего это сделать?

Решено так:

class Text:
    def __init__(self, text, bold=False, italic=False, color=None, name=None, size=None):
        self.text = text
        self.bold = bold
        self.italic = italic
        self.color = color
        self.name = name
        self.size = size

def add_text(textitems):
    p = doc.add_paragraph('')
    for t in textitems:
        r = p.add_run(t.text)
        if t.bold:
            r.bold = True
        if t.italic:
            r.italic = True
        if isinstance(t.color, RGBColor):
            r.font.color.rgb = t.color
        if t.name:
            r.font.name = t.name
        if t.size:
            r.font.size = t.size

И назвав его:

add_text([Text('This is an ', bold=False, italic=False, color=None, name='Calibri', size=Pt(12)), Text('example', bold=True, italic=False, color=RGBColor(0xFF, 0x00, 0x00), name='Calibri', size=Pt(12))])

1 Ответ

0 голосов
/ 18 июня 2020

Что-то вроде этого должно работать нормально. Обратите внимание, что, вероятно, будет проще оставить аргументы ключевых слов, которые не меняют значение по умолчанию, например:

add_text(
    [
        Text('This is an '),
        Text('example', bold=True, color=RGBColor(0xFF, 0x00, 0x00))
    ]
)

Кроме того, есть метод .from_string() для RGBColor, который позволяет более компактное выражение, например:

Text('example', color="FF0000")

и RGBColor.from_string(color) в вашей функции add_text().

...