python-docx 中的字体类型和字体大小

font type and font size in python-docx

我正在使用 python-docx 从模板生成 MS Word 文档,我需要一个允许我在同一段落中设置文本格式的功能。

我在另一个对我有用的主题中找到了这个片段:

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

像这样的东西应该工作得很好。请注意,省略不更改默认值的关键字参数可能更清晰,例如:

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

此外,在 RGBColor 上有一个 .from_string() 方法,允许更紧凑的表达式,例如:

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

RGBColor.from_string(color) 在你的 add_text() 函数中。