在使用WORD文档中,使用最多的要数字体的设置,在OFFICE软件中直接点击菜单栏中的字体区域内的功能按钮进行设置。
菜单栏设置字体 或者文档中的字处鼠标右键菜单栏中点击字体,调出设置字体的界面。
鼠标右键菜单字体按钮 字体设置界面 而在python-docx包中设置字体主要使用docx.text.run类中的Font类来实现。笔记将从字体的字体、字形、字号、字体颜色,下划线和效果等6个方面详细叙述如何实现字体的设置。最后笔记将节中的内容制作了思维导图。
在中文版的WORD中字体主要分成西文字体和中文字体两类。
西文字体的设置
西文字体主要用的docx.text.run.Font中的name属性进行设置。使用方法见如下代码:
from docx import Documentdocument = Document()run = document.add_paragraph().add_run('This is a letter.')font = run.fontfont.name = '宋体' # 设置字体document.save('test.docx')西文字体设置的WORD文档的效果见图4
西文字体设置的WORD文档的效果 在西文字体中直接将字体名称的字符串赋值给name属性即可。字体名称可以从OFFICE软件中的字体中查询。见图5和图5-2
从字体属性页面查询字体名称 从菜单栏中查询字体名称 中文字体的设置
而对于中文字体的设置相对来说比较复杂,要用到样式,代码如下:
from docx.enum.style import WD_STYLE_TYPEfrom docx.oxml.ns import qndocument.styles.add_style('Song', document.styles.add_style('Song', WD_STYLE_TYPE.CHARACTER).font.name = '宋体' # 添加字体样式-Songdocument.styles['Song']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体') # 东亚地区的字符设置成宋体document.add_paragraph().add_run('第二个段落,abcDEFg,这是中文字符', style='Song') # 使用样式添加字体中文字体设置的WORD文档的效果见下图
中文字体设置的WORD文档的效果 在上述代码中使用样式设置中文字体,要先增加一个样式“Song”,在样式中将w:eastAsia类型的字符设置成“宋体”,将其中的西文字体也设置成“宋体”,这样通过为文档的字符指定样式就就实现了中文字体的设置。这部分内容可以参考文章python-docx设置中文字体。
在docx文档字形可以包括常规、加粗、斜体和加粗斜体四种类型,在python-docx包中主要通过font.bold和font.italic属性来实现的。这两个属性都是三态属性。所谓三态属性就是在bool类型的基础上增加了None,即由True,False和None三个值组成,含义如下:
True代表设置起作用False代表设置不起作用None代表从样式表中继承那么如下程序将演示字形四种类型的设置:
paragraph = document.add_paragraph() # 增加第三个段落paragraph.add_run('第三个段落,字形常规,', style='Song') # 字形常规paragraph.add_run('字形加粗,', style='Song').font.bold = True # 字形加粗paragraph.add_run('字形倾斜,', style='Song').font.italic = True # 字形倾斜font = paragraph.add_run('字形加粗+倾斜,', style='Song').font # 获取字体font.bold = True # 设置字体加粗font.italic = True # 设置字体倾斜字形设置效果见图8
字形设置效果图 设置或者更改字形就是要为bold和italic赋值或者更改值。
字好的设置主要通过font.size属性来实现。这里需要进行单位的换算,通常使用磅,即Pt。需要加载单位换算的包,字号的值事是大于0。代码如下:
font = document.add_paragraph().add_run('第四个段落,字体大小为12磅字体-小四', style='Song').fontfont.size = Pt(12) # 字号12磅,也就是小四字体大小设置见下图
字号大小设置效果图 可以看到当我们设置成12磅时,显示的是小四字体。这是因为字体大小只能通过赋具体的值进行设置。在WORD软件为进行自动识别。那字号和中文字号的对应关系见下表:
使用font.color属性可以设置和读取的颜色,可以分成font.color.rgb和font.color.theme_color两种颜色设置形式。
RGB设置形式
在RGB设置形式中,设置通过设置R,G,B三个颜色通道的值,值的范围为[0,255],来设置字体的颜色;也可以通过16进制的形式进行设置见代码:
paragraph = document.add_paragraph() # 增加第五个段落font = paragraph.add_run('第五个段落,字体颜色为红色(RGB十进制),', style='Song').fontfont.color.rgb = RGBColor(255, 0, 0) # RGB的值通过int 0-255赋值。font = paragraph.add_run('字体颜色为绿色(RGB十六进制),', style='Song').fontfont.color.rgb = RGBColor(0x00, 0xFF, 0x00) # RGB的值通过16进制赋值RGB形式设置字体颜色效果如下图
RGB形式设置字体颜色效果图 主题颜色设置形式
也可以通过内置的主题颜色进行设置。在python-docx中的docx.enum.dml. MSO_THEME_COLOR_INDEX中定义了BACKGROUND_1、BACKGROUND_2、TEXT_1、TEXT_2、ACCENT_1、ACCENT_2、ACCENT_3、ACCENT_4、ACCENT_5和ACCENT_6共10个内置主题颜色。所有的主题颜色设置代码如下:
from docx.enum.dml import MSO_THEME_COLOR_INDEX, MSO_COLOR_TYPEparagraph = document.add_paragraph() # 增加第六个段落paragraph.add_run('第六个段落,字体颜色主题颜色:', style='Song')paragraph.add_run('BACKGROUND_1,', style='Song').font.color.theme_color = MSO_THEME_COLOR_INDEX.BACKGROUND_1paragraph.add_run('TEXT_1,', style='Song').font.color.theme_color = MSO_THEME_COLOR_INDEX.TEXT_1paragraph.add_run('BACKGROUND_2,', style='Song').font.color.theme_color = MSO_THEME_COLOR_INDEX.BACKGROUND_2paragraph.add_run('TEXT_2,', style='Song').font.color.theme_color = MSO_THEME_COLOR_INDEX.TEXT_2paragraph.add_run('ACCENT_1,', style='Song').font.color.theme_color = MSO_THEME_COLOR_INDEX.ACCENT_1paragraph.add_run('ACCENT_2,', style='Song').font.color.theme_color = MSO_THEME_COLOR_INDEX.ACCENT_2paragraph.add_run('ACCENT_3,', style='Song').font.color.theme_color = MSO_THEME_COLOR_INDEX.ACCENT_3paragraph.add_run('ACCENT_4,', style='Song').font.color.theme_color = MSO_THEME_COLOR_INDEX.ACCENT_4paragraph.add_run('ACCENT_5,', style='Song').font.color.theme_color = MSO_THEME_COLOR_INDEX.ACCENT_5paragraph.add_run('ACCENT_6。', style='Song').font.color.theme_color = MSO_THEME_COLOR_INDEX.ACCENT_6paragraph.add_run('DARK_1,', style='Song').font.color.theme_color = MSO_THEME_COLOR_INDEX.DARK_1paragraph.add_run('DARK_2,', style='Song').font.color.theme_color = MSO_THEME_COLOR_INDEX.DARK_2使用主题颜色设置字体颜色效果,以及同WORD中的主题颜色对应如下图
主题颜色设置字体颜色效果图 高亮背景颜色
使用font.highlight_color可以设置字体的高亮背景颜色,用法同font.color.theme_color。
paragraph = document.add_paragraph() # 增加第七个段落paragraph.add_run('第七个段落,字体高亮背景颜色:', style='Song')font = paragraph.add_run('ACCENT_1,', style='Song').fontfont.color.theme_color = MSO_THEME_COLOR_INDEX.ACCENT_1 # 设置字体主题颜色font.highlight_color = MSO_THEME_COLOR_INDEX.DARK_1 # 设置高亮背景颜色高亮背景颜色的设置效果见下图
高亮背景颜色的设置效果图 通过font.underline的属性可以设置字体下划线,同时需要导入下划线类型的包,WD_UNDERLINE。代码如下:
from docx.enum.text import WD_UNDERLINEparagraph = document.add_paragraph() # 增加第七个段落,主题颜色paragraph.add_run('第八个段落设置字体的下划线:', style='Song')paragraph.add_run('单下划线,', style='Song').font.underline = True # 设置成有下划线paragraph.add_run('单下划线(枚举SINGLE),', style='Song').font.underline = WD_UNDERLINE.SINGLE # 设置成有下划线paragraph.add_run('其他类型只能通过WD_UNDERLINE设置', style='Song').font.underline = WD_UNDERLINE.WAVY # 设置波浪线下划线设置见下图
下划线设置效果图 设置单下划线可以采用一般形式,也可以采用underline = True的形式,而其他形式只能采用WD_UNDERLINE中定义的类型。docx.enum.text. WD_UNDERLINE中共定义了17种下划线类型,组成见下图。
下划线的类型 字体的效果在font中的属性进行修改,例如为字体增加阴影,见代码:
paragraph = document.add_paragraph() # 增加第九个段落paragraph.add_run('第九个段落设置字体的特殊效果:', style='Song')paragraph.add_run('阴影', style='Song').font.shadow = True # 设置阴影字体阴影效果见下图
字体阴影设置效果图 字体特殊效果属性都是三态属性,通过赋值为True,实现字体效果的设置。字体特殊效果与WORD字体设置对照见下图。
字体特殊效果与WORD对应图 笔者总结了python-docx包对WORD文档中字体、字型、字号、颜色、下划线和特殊效果等6个部分,将主要内容制作了思维导图,见下图。
python-docx字体设置思维导图