当前位置: 首页 > news >正文

【python-docx 07】使用word样式

定义样式

使用Document.styles属性定义样式:

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

Styles对象可以像字典一样访问,key为样式名称:

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

内置样式使用其英文名称存储在WordprocessingML文件中,例如:“Heading 1”,但是在中文版的word中,我们看到的是‘标题1’。由于python-docx在WordprocessingML文件上运行,因此样式查找必须使用英文名称。此外部站点上提供的文档允许您创建本地语言名称和英语样式名称之间的映射:外部链接

Styles对象是可迭代的。例如,以下代码将生成段落样式的列表:

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

应用样式

Paragraph,Run和Table对象每个都有一个style属性。将样式对象分配给此属性将应用该样式:

document = Document()
paragraph = document.add_paragraph()
print(paragraph.style.name)
# 'Normal'
paragraph.style = document.styles['Heading 1']
print(paragraph.style.name)
# 'Heading 1'

样式名称也可以直接分配给对象,python-docx会自动去查找样式:

paragraph.style = 'List Bullet'
print(paragraph.style.name)
# 'List Bullet'

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

paragraph = document.add_paragraph(style='Body Text')
print(paragraph.style.name)
# 'Body Text'body_text_style = document.styles['Body Text']
paragraph = document.add_paragraph(style=body_text_style)
print(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)
print(style.name)
# 'Citation'
print(style.type)
# PARAGRAPH (1)

使用base_style属性指定新样式应从以下格式继承格式设置的样式:

print(style.base_style)
# None
style.base_style = styles['Normal']
print(style.base_style.name)
# 'Normal'

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

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

Style.delete()方法从文档中删除样式。它不会影响应用该样式的文档中的内容,使用该内容对象的默认样式来呈现。

定义字符格式

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

这三种样式类型中的每一种都具有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 = '宋体'
font.size = Pt(12)

许多字体属性都是三态,True,False和None。
True表示属性为“on”,
False表示属性为“off”。
从概念上讲,None值表示“继承”。
由于样式存在于继承层次结构中,因此在层次结构中的正确位置指定属性非常重要,通常尽可能远离层次结构。

例如,如果所有’标题’都应该是Arial字体,那么在’标题1’样式上设置该属性并使’标题2’从’标题1’继承更有意义。

粗体和斜体都是三态的,如全大写,删除线,上标等等。有关这类属性的完整列表,请参阅Font API文档:

# 斜体
font.italic = True  
font.italic = False
font.italic = None

下划线是一种特殊情况。它是三态属性和枚举值属性的混合体。
True表示单个下划线,是迄今为止最常见的。
False意味着没有下划线,但更多情况下,如果不需要下划线,则None是正确的选择。
其他形式的下划线(如double或dashed)是使用WD_UNDERLINE里的方法指定:

from docx.enum.text import WD_UNDERLINE
font.underline = True
font.underline = WD_UNDERLINE.DOT_DASH  # 点划线

定义段落格式

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

段落格式包括布局行为,例如对齐,缩进,前后空格,之前的分页和孤行控制。有关可用属性的完整列表,请参阅ParagraphFormat对象的API文档页面API文档页面。

下面是如何创建一个段落样式的示例,该段落样式具有1/4英寸的悬挂缩进,上方12个点的间距以及孤行控制:

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属性,该属性指定应用在该段落之后插入的新段落的样式。当样式通常只在序列中出现一次(例如标题)时,这非常有用。在这种情况下,完成标题后,段落样式可以自动设置回主体样式。

在最常见的情况(正文段落)中,后续段落应该与当前段落具有相同的样式。如果未指定下一个段落样式,则默认情况下通过应用相同样式来处理。

以下是如何将’标题1’样式的下一个段落样式更改为正文文本的示例:

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

通过指定None或样式本身可以恢复默认:

heading_1_style = styles['Heading 1']
print(heading_1_style.next_paragraph_style.name)
# 'Body Text'heading_1_style.next_paragraph_style = heading_1_style
print(heading_1_style.next_paragraph_style.name)
# 'Heading 1'heading_1_style.next_paragraph_style = None
print(heading_1_style.next_paragraph_style.name)
# 'Heading 1'

控制样式在Word中的显示方式

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

一共有五种行为属性:

  • hidden
  • unhide_when_used
  • priority
  • quick_style
  • locked

priority属性采用整数值。
其他四种样式行为属性是三态,True(on),False(off)或None(inherit)。

在样式库中显示样式

以下代码将使“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部分中定义的内置样式的行为属性的说明。

访问文档中的潜在样式

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

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

LatentStyles对象支持len(),迭代和字典样式的访问方法:

len(latent_styles)
# 161
latent_style_names = [ls.name for ls in latent_styles]
print(latent_style_names)
# ['Normal', 'Heading 1', 'Heading 2', ... 'TOC Heading']
latent_quote = latent_styles['Quote']
print(latent_quote)
# <docx.styles.latent.LatentStyle object at 0x10a7c4f50>
更改潜在样式默认值

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

http://www.taodudu.cc/news/show-5435434.html

相关文章:

  • 目标检测算法YOLOv7简介
  • C/C++实现汉诺塔游戏和详细解
  • MongoDB聚合运算符:$unsetField
  • webpack并行构建示例:
  • 【实践】使用vscode来debug go程序的尝鲜
  • linux性能监控之lsof
  • python读取docx文件,就是如此简单
  • Caused by: java.lang.ClassNotFoundException: freemarker.template.Configuration
  • A component required a bean of type ‘XXX‘ that could not be found 解决办法
  • spring aop 自定义注解配合swagger注解保存操作日志到mysql数据库含(源码)
  • 小而美 | Mac上鲜为人知,但极大提升效率的小工具
  • 防火墙体系结构的组合形式
  • E - B-莲子的机械动力学
  • 需要克服的缺点
  • 高版本springboot整合swagger
  • PHP. 03 .ajax传输XML、 ajax传输json、封装
  • ajax请求php返回xml数据格式,ajax传输的数据格式(XML,json)怎么获取解析
  • JavaScript基础之Ajax总结大全
  • Ajax入门和发送http请求
  • 04-Ajax传输json和XML
  • python网络爬虫——爬虫第三方库的使用(二)
  • ajax使用频率,11-Ajax详解
  • 使用Ajax发送http请求(getpost请求)
  • 人加智能FPGA应用实践-AI快速进化
  • Mac显示证书不受信任或者无效的解决办法
  • Mac | 解决证书不受信任问题
  • Java 解析CA证书 对数据进行签名和验签
  • ca证书 csr_什么是csr证书
  • 招行网银证书不见了
  • 网银的业务学习之道:数字证书的基础知识
  • 网上银行安全证书工作原理
  • 数字证书基础
  • 网上银行数字证书原理
  • 海南农信服务器证书异常,农商银行网银显示服务器没有收到您的证书怎么办
  • 顺德农商银行服务器没有收到您的证书,农商行网上银行u盘插入,提示没有证书怎么回......
  • 探讨:网银数字证书加密解密原理