Python docx书写的通用设置
2021/12/30 17:07:09
本文主要是介绍Python docx书写的通用设置,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、依赖库
- 二、Document
- 1、创建document
- 2、document的格式设置
- 三、Paragraph
- 1、para的基本设置:
- 2、单独设置para的格式
- 3、add_run()
- 4、插入图片add_picture()
前言
在之前完成的一个项目中,有一个模块需要用到Python的docx库来自动生成对应格式的word文档,但是实际操作发现docx的格式调整花费不少时间,在此总结和分享个人的使用心得
一、依赖库
from docx import Document from docx.shared import Pt, Cm, Mm from docx.oxml.ns import qn from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
二、Document
1、创建document
#书写word的第一层,创建一个空白的文档 document = Document()
一个建议:
要生成一个新的文档时,都需要一个空白的模板文档。如果第一次创建文档,并在上面修改,保存的时候也只会保存自身,这样在创建第二个文档的时候又要创建一个空白文档,比较麻烦。因此个人会预先指定一个空白文档给后面的文件做模板,具体代码如下:
demo_path = os.path.join(abspath, 'demo.docx') if not os.path.exists(demo_path): document = Document() # document.add_paragraph(' ')# 如果报错试试先写入内容 document.save(demo_path) doc = Document(demo_path)
这样当我们保存doc在别的地方时,不会影响到模板文件的内容。
2、document的格式设置
documnet层对应word文档的全局设置,一经设置,整篇生效
下面是一些 通用的设置(doc对应Document类)
# 在doc开头调用进行设置 def docxinitial(doc): # 设置正文字体类型、大小 doc.styles["Normal"].font.name = u'宋体' doc.styles["Normal"].font.size = Pt(12) doc.styles["Normal"]._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体') # 设置页眉 header = doc.sections[0].header pheader = header.paragraphs[0] # 获取页眉的第一个段落 ph = pheader.add_run('权利要求书') ph.font.name = u'黑体' # 设置页眉字体样式 ph._element.rPr.rFonts.set(qn('w:eastAsia'), u'黑体') ph.font.size = Pt(16) # 设置页眉字体大小 ph.bold = True # 页眉字体加粗 pheader.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 页眉对齐方式设为居中 # 在doc结尾处调用进行设置 # 通过sections(节)进行设置时,节对应文档中的每一页 # 每个节在没输入内容之前是不存在的,因此在最后才对每个节逐一进行设置 def setsectionformat(doc): for sec in doc.sections: # 设置页面边距(左上25毫米,右下15毫米) sec.top_margin = Cm(2.5) sec.left_margin = Cm(2.5) sec.right_margin = Cm(1.5) sec.bottom_margin = Cm(1.5) # 设置纸张大小(A4) sec.page_height = Mm(297) sec.page_width = Mm(210) # 设置页眉页脚距离 sec.header_distance = Cm(1.5) sec.footer_distance = Cm(0.2) # 例如: doc = Document(demo_path) docxinitial(doc) doc.add_run('需要填充的内容') setsectionformat(doc)
三、Paragraph
paragraph(以下简称para)是往文档中写入内容的基础,每一个para对应section中的段落。
1、para的基本设置:
# 往doc中添加段落 para = doc.add_paragraph() # 设置行前后间距,行间距(前后间距和行间距效果不相同,具体自行测试) para.paragraph_format.space_before = Pt(0) para.paragraph_format.space_after = Pt(0) para.paragraph_format.line_spacing = Pt(24) # 设置首行缩进 para.first_line_indent = para.style.font.size * 2
2、单独设置para的格式
前面我们设置document的时候,对整篇文档的字体类型、大小进行了设置,那么我们创建的para也会依照这个设置。如果我们对其中一些para有别的要求,比如标题,就需要另设一个para进行单独的设置。如下:
# 写标题 title = '这里是要居中、改变大小、加粗的标题' ti = doc.add_paragraph() ti.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER ti1 = ti.add_run(title) ti1.font.size = Pt(16) # 添加页面内容 ti1.bold = True
3、add_run()
paragraph的add_run()是往段落中添加内容
para.add_run(u'本行的内容')
若想要对写入的内容单独加粗也可加上:
para.add_run(u'本行的内容').bold = True
add_run()会将里面的内容原封不动写入。这代表,在一个para中,每一次add_run()不会自动换行,因此我们需要手动添加换行符。
para.add_run(u'本行的内容\n')
但还有一种情况,就是要写入的内容中本身包含多段,如果我们在前面的doc设置中设置了首行缩进或在add_run()中手动缩进,写入的内容也只会在开头缩进,对后面的段落不会有缩进,这时需要我们对内容进行处理:
# 通过换行符检测有几段,再切开手动缩进 def checkchangeline(con, para): linenum = con.count('\n') lines = [] if linenum > 0: lines = con.split('\n') if len(lines) > 1: for i, line in enumerate(lines): para.add_run(' ' + line + '\n') else: para.add_run(' ' + con + '\n')
4、插入图片add_picture()
doc.add_picture(path)用于在段落中插入图片,path为图片的路径。
需要注意的是,直接插入的图片是按照默认设置摆放的
如果需要设置图片居中可以这样操作:
doc.add_picture(pngpath) last_paragraph = doc.paragraphs[-1] # 这里的paragraphs为单独创建,用于放图片 last_paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
为图片添加图片序号
para = doc.add_paragraph() para.add_run(' 图1').bold = True
这篇关于Python docx书写的通用设置的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门