在Word软件中图片的添加可以通过“插入”菜单中的图片来添加,见下图;删除图像则只需选定图片然后点击DELETE键即可。而在python-docx包要使用add_picture()函数来添加图像,使用段落删除方法来删除图像。笔者将分图像的添加、图像的定位和图像的删除等3个部分来讲述python-docx包在WORD文档中图片的添加和删除。
WORD软件中添加图片的方式 在python-docx包中添加图像主要使用add_picture()函数来实现。函数的完整形式为:add_picture(图像路径或者图像流,width=None,height=None),其中,width是图像的宽度,height是图像的高度,这两个参数可以不指定,也可以指定1个,本文只使用指定这种情况。add_picture()函数的主要有在文档末尾添加、任意段落添加和在表格里添加等三种使用情形。
文档末尾添加
使用document.add_picture()可以在文档的末尾新建一个段落,然后添加图像。以下代码演示了新建一个docx文档,新建3个段落并在文档末尾添加一个图像。
from docx import Document # 导入docx包document = Document() # 新建docx文档document.add_paragraph('111111111') # 添加第一个段落document.add_paragraph('2222222222') # 添加第二个段落document.add_paragraph('3333333333') # 添加第三个段落document.add_picture('111.jpg') # 文档末尾添加名称为111.jpg的图像document.save('test.docx') # 保存docx文档
文档末尾添加图像效果图 任意段落添加
run.add_picture()方法可以在文档中任意段落里添加图片。run对象是段落中的一个部分,所以在run中添加图像就是在段落里添加。这是添加图像的一般方法,document.add_picture()方法是run.add_picture()方法的特殊情况。要实现添加图像首先要获取段落,然后在段落中增加add_run()并获取run对象,然后使用run.add_picture()添加图像。例如,在上述生成的test.docx文档中的第二个段落里添加图像的代码如下:
document = Document('test.docx') # 读取test.docx文档run = document.paragraphs[1].add_run() # 获取run对象run.add_picture('222.jpg') # 添加名称为222.jpg的图像document.save('test1.docx') # 保存文档在第二个段落里添加图像的程序运行效果如下:
第二个段落里添加图像的效果图 在表格里添加图像
表格单元格里的内容是通过段落来添加的,所以在表格里添加图像从原理上来说和run.add_picture()方法是一致的。要经过了选定单元格,选择单元格里的段落,在段落里添加图像等三个步骤。以下代码演示了在表格中添加图像的方法:
table = document.add_table(2, 1) # 在文档中添加2行1列的表格table.cell(0, 0).paragraphs[0].add_run().add_picture('222.jpg') # 在表格(0,0)位置的单元格的第一个段落里添加图像表格添加图像的效果如下图:
表格里添加图像效果图 图像添加后存储在WORD文档的inline_shapes里面,所以要定位图像,必须先确定对应的inline_shape。以下代码读取test1.dox文档中的第一个图像,并将图像宽度和高度都设置成4cm,代码如下:
from docx.shared import Pt, Cmdocument = Document('test1.docx')print('图形图像的数量:', len(document.inline_shapes))document.inline_shapes[0].height = Cm(4)document.inline_shapes[0].width = Cm(4)程序运行结果见下图
选定文档中图像的运行结果图 选定图像并设置的效果见下图
选定第1个图像的效果图 在上述文档中含有2个图像,通过获取文档中的inline_shapes对象,然后通过图像索引来获取图形图像对象。
图像是通过run对象的add_picture()来添加的,而run对象是段落的一部分,所以通过删除段落可以删除图像。为此,test.docx文档中第1个图像在第4个段落里,删除这个段落代码如下:
paragraph = document.paragraphs[3] # 获取文档中的第四个段落对象print('删除前图形图像的数量:', len(document.inline_shapes)) # 删除前图片的数量paragraph.clear() # 删除段落print('删除洁后图形图像的数量:', len(document.inline_shapes)) # 删除后图片的数量删除段落的运行结果如下图
删除段落运行结果图 删除段落后图像的效果如下图
图像效果图 删除段落前图像数量是2,删除段落后变成了1,所以删除段落的同时里面的图像也被删除了。这种方式对于段落里只含有图像的情形很有效。如果既要删除图像又要保留段落里的其他内容,这种方式就无能为力。
本文的主要内容见下图
python-docx图像添加与删除 #python删除docx图像#