本篇文章讨论如何设置样式,以及如何利用Word的样式管理器
本文讨论如何设置样式以及如何利用 Word 的样式管理器。
==================================================== === ================================================ ====== ============================================== =================================================== ==============
通常,在排版管理中,所有与文字内容无关的视觉元素都可以称为“样式”,具体包括字体、颜色、对齐方式、行距等。
在Word(以及具有文本编辑功能的Office软件)中,常用的样式有字符样式、段落样式、表格样式、枚举样式等,python-docx目前主要支持前三类,日常使用基本够用。
每种样式的内容主要包括字体(包括字体名称、颜色、斜体、粗体)和段落格式(缩进、分页方式)等。根据样式应用于谁,每种样式可能不包含所有内容。例如,字符样式没有段落格式。
Word 有一个样式管理器,负责管理内置样式和用户定义的样式。python-docx 可以操作这个管理器,向管理器添加自定义样式,或者从管理器中选择一个样式来应用。
因为python-docx的样式设置不能包含Word的所有样式设置。所以我个人的建议是:
当您的操作只涉及Word本身(如批量排序文件格式)时,您可以使用Word的图形界面设置自定义样式,然后使用python-docx操作样式管理器给特定的对象赋予特定的样式。当你的操作涉及Word以外的东西,并且对样式设置的要求不高时(比如HTML转Word,或者格式比较简单的文档,比如官方文档),可以直接使用python-docx来设置样式。如果不能使用Word设置自定义样式(比如需要上百种样式类型)矛与盾的集合表格式教案,并且对设置样式类型要求很高,那就不要使用python-docx,考虑VBScript/VBA,或者一个完整的- 特色工具,例如 win32com。
1. 创建样式和设置字体
运行对象、段落对象和表格对象都有一个成员Style,而这个Style有一个成员Font,它包含了字体的所有设置。
如果您凭空创建样式,请使用 Document 对象的 Styles 集合的 add_style 方法。下面的示例添加 10 个段落,为每个段落创建一个新样式。这些样式之间的区别在于字体大小是按顺序增加的。
# -*- coding: utf-8 -*-
from docx import Document
from docx.shared import Pt
from docx.enum.style import WD_STYLE_TYPE
doc = Document()
for i in range(10):
p = doc.add_paragraph(u'段落 %d' % i)
style = doc.styles.add_style('UserStyle%d' %i,WD_STYLE_TYPE.PARAGRAPH)
style.font.size = Pt(i+20)
p.style = style
doc.save('4-1.docx')
请注意,python-docx 提供了 docx.shared 模块,用于在 Pt(点)中设置字体。类似的单位有 Mm、Cm、Inches、Emu(物理尺寸)和 Twips(Twips,微软更喜欢的蜜露尺寸)
对于run对象,其字体操作可以直接使用Run.font成员。这是一个改变字体的句子:
# -*- coding: utf-8 -*-
from docx import Document
from docx.shared import RGBColor
from docx.oxml.ns import qn
doc = Document()
p = doc.add_paragraph()
text_str = u'一个人的命运啊,当然要靠自我奋斗,但是也要考虑到历史的进程。'
for i,ch in enumerate(text_str):
run = p.add_run(ch)
font = run.font
font.name = u'微软雅黑'
# bug of python-docx
run._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')
font.bold = (i % 2 == 0)
font.italic = (i % 3 == 0)
color = font.color
color.rgb = RGBColor(i*10 % 200 + 55,i*20 % 200 + 55,i*30 % 200 + 55)
doc.save('4-2.docx')
这里使用 docx.shared 模块提供的 RGBColor 类。
2. 段落格式
对于段落样式和表格样式,有一个段落格式成员paragraph_format。它等效于 Word 的此选项:
相应地,段落格式对象的各个成员就相当于对话框中的这些设置元素:
ParagraphFormat.alignment(选择一个 WD_PARAGRAPH_ALIGNMENT)
ParagraphFormat.left_indent(length) ParagraphFormat.right_indent(length) ParagraphFormat.first_line_indent(length) ParagraphFormat.space_before(length) ParagraphFormat.space_after(length) ParagraphFormat.line_spacing_rule(选择一个 WD_LINE_SPACING) ParagraphFormat.line_spacing(length) ParagraphFormat.widow_control(True: Setting, None:继承 Style 设置)
ParagraphFormat.keep_with_next (True: set, None: 继承 Style 设置) ParagraphFormat.keep_together (True: set, None: 继承 Style 设置) ParagraphFormat.page_break_before (True: set, None: 继承 Style 设置)
例如,您可以像这样设置渐进式左对齐:
# -*- coding: utf-8 -*-
from docx import Document
from docx.shared import Cm
from docx.enum.style import WD_STYLE_TYPE
doc = Document()
for i in range(10):
p = doc.add_paragraph(u'段落 %d' % i)
style = doc.styles.add_style('UserStyle%d' %i,WD_STYLE_TYPE.PARAGRAPH)
style.paragraph_format.left_indent = Cm(i)
p.style = style
doc.save('4-3.docx')
3. 样式管理器
Word 有多种样式。您可以使用 Document.styles 集合来访问其内置属性为 True 的内置样式。当然矛与盾的集合表格式教案,你通过 add_style 添加的样式也会放在样式集合中。
对于您自己创建的样式,如果您将 hidden 和 quick_style 属性分别设置为 False 和 True,您可以将这个自己创建的样式添加到 Word 的快速样式管理器中。
下面给出一个综合的例子。
# -*- coding: utf-8 -*-
from docx import Document
from docx.shared import Cm
from docx.enum.style import WD_STYLE_TYPE
doc = Document()
for i in range(10):
p = doc.add_paragraph(u'段落 %d' % i)
style = doc.styles.add_style('UserStyle%d' %i,WD_STYLE_TYPE.PARAGRAPH)
style.paragraph_format.left_indent = Cm(i)
p.style = style
if i == 7:
style.hidden = False
style.quick_style = True
for style in doc.styles:
print style.name,style.builtin
doc.paragraphs[3].style = doc.styles['Subtitle']
doc.save('4-4.docx')
注意样式面板中的第二个快速样式是我们刚刚添加的“UserStyle7”
==========================
至此,本系列的Word部分已经结束。接下来,本系列文章将讲讲使用python操作PowerPoint。
参考:
python-docx.readthedocs.io/en/latest/index.html
真不是个东西