python-docx官方文档翻译--用户指南09--使用样式

使用样式

本页面使用上一页中开发的概念,无需介绍。如果不熟悉该术语,请查阅上一页 了解样式 中的定义。

访问样式

使用 Document.styles 属性访问样式:

document = Document()
styles = document.styles
styles
# <docx.styles.styles.Styles object at 0x10a7c4f50>

Styles 对象提供按名称对定义的样式的字典式访问:

styles['Normal']
# <docx.styles.style._ParagraphStyle object at <0x10a7c4f6b>

注意

内置样式以其英文名称的方式存储在 WordprocessingML 文件中,例如 “Heading 1”,即使使用 Word 的本地化版本的用户也会在用户界面中看到母语名称,例如 “ 标题 1”。由于 python-docx 在 WordprocessingML 文件上运行,因此样式查找必须使用英文名称。该外部站点上的文档可让您在本地语言名称和英语样式名称之间创建映射:
http://www.thedoctools.com/index.php?show=mt_create_style_name_list
现链接为:https://www.thedoctools.com/word-macros-tips/word-macros/create-style-name-list/
ps: 好像只有 英语,丹麦语,德语和法语

用户定义的样式(也称为自定义样式)未本地化,并且使用与 Word UI 中显示的名称完全相同的名称进行访问。

Styles 对象也是可迭代的。通过使用 BaseStyle 上的标识属性,可以生成已定义样式的各种子集。例如,此代码将生成已定义的段落样式的列表:

from docx.enum.style import WD_STYLE_TYPE
styles = document.styles
paragraph_styles = [
    s for s in styles if s.type == WD_STYLE_TYPE.PARAGRAPH
]
for style in paragraph_styles:
    print(style.name)
# Normal
# Body Text
# List Bullet
应用样式

ParagraphRunTable 对象每个都有一个 style 属性。将样式对象分配给此属性将应用该样式:

document = Document()
paragraph = document.add_paragraph()
paragraph.style
# <docx.styles.style._ParagraphStyle object at <0x11a7c4c50>
paragraph.style.name
# 'Normal'
paragraph.style = document.styles['Heading 1']
paragraph.style.name
# 'Heading 1'

样式名称也可以直接分配,在这种情况下,python-docx将执行查找:

paragraph.style = 'List Bullet'
paragraph.style
# <docx.styles.style._ParagraphStyle object at <0x10a7c4f84>
paragraph.style.name
# 'List Bullet'

也可以在创建时使用样式对象或其名称来应用样式:

paragraph = document.add_paragraph(style='Body Text')
paragraph.style.name
# 'Body Text'
body_text_style = document.styles['Body Text']
paragraph = document.add_paragraph(style=body_text_style)
paragraph.style.name
# 'Body Text'
添加或删除样式

通过指定唯一名称和样式类型,可以将新样式添加到文档中:

from docx.enum.style import WD_STYLE_TYPE
styles = document.styles
style = styles.add_style('Citation', WD_STYLE_TYPE.PARAGRAPH)
style.name
# 'Citation'
style.type
# PARAGRAPH (1)

使用 base_style 属性指定新样式应继承的格式:

style.base_style
# None
style.base_style = styles['Normal']
style.base_style
# <docx.styles.style._ParagraphStyle object at 0x10a7a9550>
style.base_style.name
# 'Normal'

只需调用样式的 delete() 方法即可将样式从文档中删除:

styles = document.styles
len(styles)
# 10
styles['Citation'].delete()
len(styles)
# 9

注意

Style.delete() 方法从文档中删除样式的定义。它不会影响应用该样式的文档中的内容。文档中未定义样式的内容以默认样式进行呈现。如果是段落,则为“Normal”。

定义字符格式

字符,段落和表格样式都可以指定要应用于该样式内容的字符格式。所有字符格式可以用样式指定也可以直接应用于文本。示例包括字体字体和大小,粗体,斜体和下划线。

这三种样式类型中的每一种都有一个 font 属性,该属性提供对 Font 对象的访问。样式的 Font 对象提供用于获取和设置该样式的字符格式的属性。

这里提供了几个示例。有关可用属性的完整集合,请参见 Font API 文档。

样式的字体可以这样访问:

from docx import Document
document = Document()
style = document.styles['Normal']
font = style.font

字体和大小设置如下:

from docx.shared import Pt
font.name = 'Calibri'
font.size = Pt(12)

许多字体属性是三态的,这意味着它们可以采用值 True,False 和 None。True 表示属性为“ on”,False 表示属性为“ off”。从概念上讲,None 值表示“继承”。因为样式存在于继承层次结构中,所以重要的是具有在层次结构中正确位置指定属性的能力,通常在层次结构中尽可能远。例如,如果所有标题都应为 Arial 字体,则在 Heading 1 样式上设置该属性并使 Heading 2 继承自 Heading 1 更为有意义。

粗体和斜体是三态属性,全大写,删除线,上标和其他许多属性也是如此。有关完整列表,请参见 Font API文档。

font.bold, font.italic
# (None, None)
font.italic = True
font.italic
# True
font.italic = False
font.italic
# False
font.italic = None
font.italic
# None

下划线有点特殊情况。它是三态属性和枚举值属性的混合。 True 表示单下划线,是迄今为止最常见的下划线。 False 表示没有下划线,但是如果不需要下划线,则通常 None 是正确的选择,因为很少从基础样式继承下划线。用 WD_UNDERLINE 枚举的成员指定其他形式的下划线,例如双下划线或虚线。

font.underline
# None
font.underline = True
# 或
font.underline = WD_UNDERLINE.DOT_DASH
定义段落格式

段落样式和表格样式都允许指定段落格式。这些样式通过它们的 paragraph_format 属性提供对 ParagraphFormat 对象的访问。

段落格式包括布局行为,例如对齐,缩进,前后的空间,分页符之前的行为以及 widow_control。有关可用属性的完整列表,请查阅API文档页面中的 ParagraphFormat 对象。

以下示例,说明如何创建具有 1/4 英寸的悬挂缩进,上方 12 Pt的间距以及 widow_control 的段落样式:

from docx.enum.style import WD_STYLE_TYPE
from docx.shared import Inches, Pt
document = Document()
style = document.styles.add_style('Indent', WD_STYLE_TYPE.PARAGRAPH)
paragraph_format = style.paragraph_format
paragraph_format.left_indent = Inches(0.25)
paragraph_format.first_line_indent = Inches(-0.25)
paragraph_format.space_before = Pt(12)
paragraph_format.widow_control = True
使用段落特定的样式属性

段落样式具有 next_paragraph_style 属性,该属性指定要应用于在该样式的段落之后插入的新段落的样式。当样式通常仅在序列(例如标题)中仅出现一次时,这非常有用。在这种情况下,可以在完成标题后将段落样式自动设置回正文样式。

在最常见的情况下(正文段落),后续段落应采用与当前段落相同的样式。如果未指定下一个段落样式,则默认值可以通过应用相同的样式来很好地处理这种情况。

以下示例说明了如何将 Heading 1 样式的下一个段落样式更改为正文。

from docx import Document
document = Document()
styles = document.styles
styles['Heading 1'].next_paragraph_style = styles['Body Text']

可以通过分配 None 或样式本身来恢复默认行为:

heading_1_style = styles['Heading 1']
heading_1_style.next_paragraph_style.name
# 'Body Text'

heading_1_style.next_paragraph_style = heading_1_style
heading_1_style.next_paragraph_style.name
# 'Heading 1'

heading_1_style.next_paragraph_style = None
heading_1_style.next_paragraph_style.name
# 'Heading 1'
控制样式在Word UI中的显示方式

样式的属性分为两类,行为属性和格式设置属性。行为属性控制样式在 Word UI 中显示的时间和位置。格式属性决定了要应用样式的内容的格式,例如字体的大小及其段落缩进。

样式有五个行为属性:

请参阅 “了解样式”中的“样式特性” 部分,以获取有关这些行为属性如何相互作用以确定样式在 Word UI 中何时何地出现的描述。

priority 属性采用整数值。其他四个样式行为属性是三态的,这意味着它们可以采用值 True(打开),False(关闭)或None(继承)。

在样式库中显示样式

以下代码将使“Body Text(正文)”段落样式首先出现在样式库中:

from docx import Document
document = Document()
style = document.styles['Body Text']

style.hidden = False
style.quick_style = True
style.priorty = 1
从样式库中删除样式

此代码将从样式库中删除“Normal(普通)”段落样式,但允许其保留在建议的列表中:

style = document.styles['Normal']

style.hidden = False
style.quick_style = False
处理潜在样式

有关潜在样式如何定义尚未在 .docx 文件的 styles.xml part 中定义的内置样式的行为属性的描述,请参阅“了解样式”中的“内置样式和潜在样式”部分。

访问文档中的潜在样式

可从样式对象访问文档中的潜在样式:

document = Document()
latent_styles = document.styles.latent_styles

LatentStyles 对象支持 len(),迭代和以字典形式通过样式名称访问:

len(latent_styles)
# 161

latent_style_names = [ls.name for ls in latent_styles]
latent_style_names
# ['Normal', 'Heading 1', 'Heading 2', ... 'TOC Heading']

latent_quote = latent_styles['Quote']
latent_quote
# <docx.styles.latent.LatentStyle object at 0x10a7c4f50>
latent_quote.priority
# 29
更改默认样式

LatentStyles 对象还提供对当前文档中内置样式的默认行为属性的访问。这些默认值为 _LatentStyle 定义的任何未定义属性以及没有显式潜在样式定义的内置样式的所有行为属性提供值。有关可用属性的完整集合,请参见 LatentStyles 对象的API文档:

latent_styles.default_to_locked
# False
latent_styles.default_to_locked = True
latent_styles.default_to_locked
# True
添加潜在样式定义

可以使用 LatentStyles 上的 add_latent_style() 方法添加新的潜在样式。这段代码为内置样式“List Bullet(列表项目符号)”添加了新的潜在样式,并将其设置为显示在样式库中:

latent_style = latent_styles['List Bullet']
# KeyError: no latent style with name 'List Bullet'
latent_style = latent_styles.add_latent_style('List Bullet')
latent_style.hidden = False
latent_style.priority = 2
latent_style.quick_style = True
删除潜在样式定义

潜在样式定义可以通过调用其 delete() 方法来删除:

latent_styles['Light Grid']
# <docx.styles.latent.LatentStyle object at 0x10a7c4f50>
latent_styles['Light Grid'].delete()
latent_styles['Light Grid']
# KeyError: no latent style with name 'Light Grid'
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值