分享

python办公自动化:自动进行word文档处理和排版

 闲读古书 2019-10-26

python进行文本处理和将其在word里进行排版等技巧

使用文本

要有效地处理文本,首先要了解一些块级元素(如段落)和内联级对象(如运行),这一点很重要。

块级与内联文本对象

该段落是Word中的主要块级对象。

块级项目在其左右边缘之间流动包含的文本,每次文本超出其右边界时添加一条附加行。对于段落,边界通常是页边距,但如果页面按列布局,它们也可以是列边界,如果段落出现在表格单元格内,则它们也可以是单元格边界。

表也​​是块级对象。

内联对象是在块级项目内发生的内容的一部分。一个例子是以粗体显示的单词或全部大写的句子。最常见的内联对象是运行。块容器中的所有内容都在内联对象内。通常,段落包含一个或多个运行,每个运行包含段落文本的某些部分。

块级项目的属性指定其在页面上的位置,例如段落前后的缩进和空格。内联项的属性通常指定内容显示的字体,如字体,字体大小,粗体和斜体。

段落属性

段落具有各种属性,用于指定其在容器(通常是页面)中的位置以及将其内容划分为单独行的方式。

通常,最好定义将这些属性收集到有意义的组中的段落样式,并将适当的样式应用于每个段落,而不是将这些属性直接重复应用于每个段落。这类似于层叠样式表(CSS)如何与HTML一起使用。此处描述的所有段落属性都可以使用样式设置,也可以直接应用于段落。

使用段落属性可用的对象 访问段落的格式属性 。

水平对齐(对齐)

也称为对齐,可以使用枚举值将段落的水平对齐设置为左对齐,居中对齐,右对齐或完全对齐(在左侧和右侧对齐) :

>>> from docx.enum.text import WD_ALIGN_PARAGRAPH

>>> document = Document()

>>> paragraph = document.add_paragraph()

>>> paragraph_format = paragraph.paragraph_format

>>> paragraph_format.alignment

None # indicating alignment is inherited from the style hierarchy

>>> paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER

>>> paragraph_format.alignment

CENTER (1)

缩进

缩进是段落与其容器边缘之间的水平空间,通常是页边距。段落可以在左侧和右侧分别缩进。第一行也可以具有与段落其余部分不同的缩进。第一行缩进比段落的其余部分缩进了第一行缩进。缩进的第一行有一个悬挂缩进。

压痕被指定使用的值,诸如,,或 。负值有效并导致段落与保证金重叠指定的金额。值为None表示从样式层次结构继承的缩进值。分配None到缩进属性将删除任何直接应用的缩进设置,并从样式层次结构中恢复继承:

>>> from docx.shared import Inches

>>> paragraph = document.add_paragraph()

>>> paragraph_format = paragraph.paragraph_format

>>> paragraph_format.left_indent

None # indicating indentation is inherited from the style hierarchy

>>> paragraph_format.left_indent = Inches(0.5)

>>> paragraph_format.left_indent

457200

>>> paragraph_format.left_indent.inches

0.5

右侧缩进以类似的方式工作:

>>> from docx.shared import Pt

>>> paragraph_format.right_indent

None

>>> paragraph_format.right_indent = Pt(24)

>>> paragraph_format.right_indent

304800

>>> paragraph_format.right_indent.pt

24.0

使用属性指定第一行缩进, 并相对于左缩进进行解释。负值表示悬挂缩进:

>>> paragraph_format.first_line_indent

None

>>> paragraph_format.first_line_indent = Inches(-0.25)

>>> paragraph_format.first_line_indent

-228600

>>> paragraph_format.first_line_indent.inches

-0.25

制表符

制表位确定段落文本中制表符的呈现。特别是,它指定制表符后面的文本将开始的位置,它将如何与该位置对齐,以及一个可选的引导字符,它将填充由制表符跨越的水平空间。

段落或样式的制表位包含在使用以下属性 访问的对象中:

>>> tab_stops = paragraph_format.tab_stops

>>> tab_stops

<docx.text.tabstops.TabStops object at 0x106b802d8>

使用以下方法添加新的制表位:

>>> tab_stop = tab_stops.add_tab_stop(Inches(1.5))

>>> tab_stop.position

1371600

>>> tab_stop.position.inches

1.5

对齐默认为左,但可以通过提供枚举的成员来指定 。leader字符默认为空格,但可以通过提供 枚举的成员来指定:

>>> from docx.enum.text import WD_TAB_ALIGNMENT, WD_TAB_LEADER

>>> tab_stop = tab_stops.add_tab_stop(Inches(1.5), WD_TAB_ALIGNMENT.RIGHT, WD_TAB_LEADER.DOTS)

>>> print(tab_stop.alignment)

RIGHT (2)

>>> print(tab_stop.leader)

DOTS (1)

使用序列语义访问现有制表位:

>>> tab_stops[0]

<docx.text.tabstops.TabStop object at 0x1105427e8>

更多详细信息是可用和API文档

段间距

的和 属性控制随后的段落之间的间隔,前后段落,控制间隔分别。间段间距折叠页面布局中,这意味着两个段落之间的间距是最大的的 space_after为第一段和space_before第二段的。段落间距指定为值,通常使用 :

>>> paragraph_format.space_before, paragraph_format.space_after

(None, None) # inherited by default

>>> paragraph_format.space_before = Pt(18)

>>> paragraph_format.space_before.pt

18.0

>>> paragraph_format.space_after = Pt(12)

>>> paragraph_format.space_after.pt

12.0

行间距

行间距是段落行中后续基线之间的距离。行间距可以指定为绝对距离或相对于行高(基本上是所用字体的点大小)。典型的绝对衡量标准是18分。典型的相对测量是双倍间距(2.0线高)。默认行间距是单行间距(1.0行高)。

行间距由和 属性的相互作用控制 。 line_spacing是值,a(小ish)或None。甲值表示的绝对距离。A 表示行数高度。None表示行间距是继承的。line_spacing_rule是枚举的成员或None

>>> from docx.shared import Length

>>> paragraph_format.line_spacing

None

>>> paragraph_format.line_spacing_rule

None

>>> paragraph_format.line_spacing = Pt(18)

>>> isinstance(paragraph_format.line_spacing, Length)

True

>>> paragraph_format.line_spacing.pt

18.0

>>> paragraph_format.line_spacing_rule

EXACTLY (4)

>>> paragraph_format.line_spacing = 1.75

>>> paragraph_format.line_spacing

1.75

>>> paragraph_format.line_spacing_rule

MULTIPLE (5)

分页属性

四个段落属性,, , ,和 的段落如何表现近页边界控制方面。

导致整个段落出现在同一页面上,如果否则会在两个页面中断开,则在段落之前发出分页符。

将段落保留在与后续段落相同的页面上。例如,这可用于将节标题保留在与节的第一段相同的页面上。

导致段落放在新页面的顶部。这可以在章节标题上使用,以确保章节从新页面开始。

打破页面以避免将段落的第一行或最后一行放在与段落其余部分不同的页面上。

这些属性的所有四个都是三态,这意味着他们可以采取的价值 TrueFalseNoneNone表示属性值是从样式层次结构继承的。True表示"开启",False表示"关闭":

>>> paragraph_format.keep_together

None # all four inherit by default

>>> paragraph_format.keep_with_next = True

>>> paragraph_format.keep_with_next

True

>>> paragraph_format.page_break_before = False

>>> paragraph_format.page_break_before

False

应用字符格式

在运行级别应用字符格式。示例包括字体字体和大小,粗体,斜体和下划线。

一个对象有一个只读提供访问属性的对象。run的对象提供了获取和设置该运行的字符格式的属性。

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

可以像这样访问运行的字体:

>>> from docx import Document

>>> document = Document()

>>> run = document.add_paragraph().add_run()

>>> font = run.font

字体和大小设置如下:

>>> from docx.shared import Pt

>>> font.name = 'Calibri'

>>> font.size = Pt(12)

许多字体属性是三态,这意味着他们可以采取的价值观 TrueFalseNoneTrue表示该物业处于"开启"状态,表示该物业处于False"关闭"状态。从概念上讲,该None值意味着"继承"。样式继承层次结构中存在运行,并且默认情况下从该层次结构继承其字符格式。使用该对象直接应用的任何字符格式都会覆盖继承的值。

大胆和斜体都是三态属性,如全帽,删除线,上标等等。有关完整列表,请参阅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如果不想要下划线,通常是正确的选择。其他形式的下划线(如double或dashed)是使用 枚举的成员指定的:

>>> font.underline

None

>>> font.underline = True

>>> # or perhaps

>>> font.underline = WD_UNDERLINE.DOT_DASH

字体颜色

每个对象都有一个对象,可以通过其只读属性访问其颜色。

将特定RGB颜色应用于字体:

>>> from docx.shared import RGBColor

>>> font.color.rgb = RGBColor(0x42, 0x24, 0xE9)

通过指定枚举的成员,还可以将字体设置为主题颜色 :

>>> from docx.enum.dml import MSO_THEME_COLOR

>>> font.color.theme_color = MSO_THEME_COLOR.ACCENT_1

通过分配None以下属性或 属性,可以将字体的颜色恢复为其默认(继承)值 :

>>> font.color.rgb = None

确定字体的颜色首先要确定其颜色类型:

>>> font.color.type

RGB (1)

属性的值可以是枚举的成员,也可以是 None。MSO_COLOR_TYPE.RGB表示它是RGB颜色。MSO_COLOR_TYPE.THEME表示主题颜色。 MSO_COLOR_TYPE.AUTO表示其值由应用程序自动确定,通常设置为黑色。(此值相对较少。)None 表示未应用颜色,颜色从样式层次结构继承; 这是最常见的情况。

当颜色类型为MSO_COLOR_TYPE.RGB时,该 属性将是一个指示RGB颜色的值:

>>> font.color.rgb

RGBColor(0x42, 0x24, 0xe9)

当颜色类型是MSO_COLOR_TYPE.THEME,该 属性将是成员 指示主题颜色:

>>> font.color.theme_color

ACCENT_1 (5)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多