1.概念
块级元素(block-level) 是指作为一个整体的元素,典型的是段落(paragraph)。 行内元素(inline) ,你可以把它理解为一部分块级元素,即一个块级元素包含一个或多个行内元素,典型的是run对象(我也不知道run应该翻译成什么)。 举个例子,你在Word回车换行开始输入文本,即自成一个段落,如果你选中其中的几个文字,那这些文字即为run对象
2.段落
段落(paragraph)是最主要的块级元素,比如说我们要往文档里添加文字,其实就添加段落,add_paragraph()可以添加一个段落,返回一个Paragraph对象
2.1 插入段落
from docx import Document
from docx.text.paragraph import Paragraph
doc = Document()
paragraph1 = doc.add_paragraph("这是第1个段落")
paragraph2 = doc.add_paragraph("这是第2个段落")
print(doc.paragraphs)
paragraph2.insert_paragraph_before("额外插入的段落文字")
doc.save("./test.docx")
2.1 段落样式
2.1.1 引用内置样式
设置Paragraph的style属性即可
from docx import Document
from docx.text.paragraph import Paragraph
doc = Document()
paragraph1 = doc.add_paragraph("这是第1个段落")
paragraph1.style = "List Bullet"
doc.add_paragraph("测试段落List Number", style="List Number")
doc.add_paragraph("测试段落List Number", style="List Number")
doc.add_paragraph("测试段落List Bullet 2", style="List Bullet 2")
doc.add_paragraph("测试段落List Bullet 2", style="List Bullet 2")
doc.save("./test.docx")
官方文档说段落样式名应该与微软Office保持一致,但我看了微软给出的样式名与其对不上,建议直接参考源码的给出的枚举值,位置是/docx/enum/style.py,或者官方文档:https://python-docx.readthedocs.io/en/latest/user/styles-understanding.html
2.1.2 段落对齐
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
doc = Document()
paragraph1 = doc.add_paragraph("这是居中对齐段落")
paragraph1.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
doc.add_paragraph("这是左对齐段落").alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
doc.add_paragraph("这是右对齐段落").alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
doc.add_paragraph("这是两端对齐段落").alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY
doc.add_paragraph("这是分散对齐段落").alignment = WD_PARAGRAPH_ALIGNMENT.DISTRIBUTE
doc.save("./test.docx")
2.1.3 段落设置
from docx import Document
from docx.shared import Pt
doc = Document()
paragraph1 = doc.add_paragraph("这是一个普通的段落这是一个普通的段落这是一个普通的段落")
paragraph1.paragraph_format.line_spacing = Pt(20)
paragraph1.paragraph_format.first_line_indent = Pt(10)
paragraph1.paragraph_format.space_before = Pt(30)
paragraph1.paragraph_format.space_after = Pt(15)
doc.save("./test.docx")
特别说明,首行缩进的单位支持Pt、Cm、Mm、Inches等,如果想要缩进几个字符,需要自己进行转换,因为不同字号字符占用的磅数是不同的(五号字体 = 10.5pt = 3.70mm = 14px = 0.146inch)
3.Run
Run是指段落中某一部分文本,我们取到某些文本之后才能设置它们的样式,例如加粗、斜体、下划线等
from docx import Document
from docx.oxml.ns import qn
from docx.shared import Pt, RGBColor
from docx.text.paragraph import Paragraph
doc = Document()
paragraph1 = doc.add_paragraph("这是第1个段落")
run1 = paragraph1.add_run("追加的文字")
run1.bold = True
run1.italic = True
run1.underline = True
run1.font.name = "Times New Roman"
run1.element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
run1.font.size = Pt(30)
run1.font.bold = False
run1.font.italic = False
run1.font.underline = False
run1.font.shadow = True
run1.font.color.rgb = RGBColor(56, 36, 255)
doc.save("./test.docx")
关于下划线,font.underline=True是单行下划线,其他样式可以参考官方给出的枚举值:https://python-docx.readthedocs.io/en/latest/api/enum/WdUnderline.html#wdunderline
当然也可以直接使用完整的字符样式
from docx import Document
from docx.text.paragraph import Paragraph
doc = Document()
paragraph1 = doc.add_paragraph("这是第1个段落")
run2 = paragraph1.add_run("又追加了文字")
run2.style = "Emphasis"
doc.save("./test.docx")
4.标题
可以通过add_heading()添加标题,标题等级用数字0-9表示,其实标题也是一个Paragraph对象
from docx import Document
doc = Document()
title = doc.add_heading(text="这是一级标题", level=1)
doc.add_heading(text="这是一级标题2", level=1)
doc.add_heading(text="这是二级标题", level=2)
print("text:", title.text)
print("style:", title.style)
doc.save("./test.docx")
标题等级(level)默认是1,对应“标题1”,如果设置为0,对应“标题”
5.Document对象常用方法和属性
from docx import Document
from docx.shared import Inches
from docx.text.paragraph import Paragraph
doc = Document()
doc.add_heading("这是一个标题")
doc.add_paragraph("这是一个段落")
doc.add_page_break()
doc.add_picture('xxx.png', width=Inches(1.0))
doc.add_table(5, 6)
print(doc.paragraphs)
print(doc.tables)
print(doc.styles)
doc.save("./test.docx")
|