win32com操作word API精讲 第十三集 图片操作 InlineShapes接口

175 阅读3分钟

第十三集终于姗姗来迟,本文章主要讲通过InlineShapes接口操作图片资源,为:

  • 插入图片
  • 设置图片尺寸
  • 图片对齐
  • 图片题注设置

InlineShapes接口封装在DocumentRangeSelection下,具体使用哪个对象来调用InlineShapes视具体情况而定,本文章将通过Document对象发起调用。

InlineShape(s)

InlineShapesInlineShape对象的集合,与DocumentsParagraphs一样,通过InlineShapes.Item(index)或者InlineShapes(index)即可获取到某个InlineShape对象。要想操作某张图片,必须先获得该图片对象。

InlineShapes包含哪些资源

该接口文档中被翻译为内嵌形状,包含图片、OLE对象(在文档中插入的文档、音频等)和ActiveX 控件。

重要属性和方法

一、插入图片

from win32com.client import Dispatch

client = Dispatch('kwps.Application')
client.Visible = 1
doc = client.Documents.Open(r'D:\demo.doc')

p5 = doc.Paragraphs(6).Range

# AddPicture有返回值,为新插入的图片InlineShape对象
doc.InlineShapes.AddPicture(
    r'D:\课程\course\121.jpg',  # 本地图片资源
    False, 
    False, 
    p5 # 在该Range对象的前面插入图片
)

二、获取某张图片设置图片尺寸

鉴于InlineShapes包含各种对象,并非只有图片,使用inlineShapes.Count来统计一共有几张图片是不可靠的,要操作某张图片,还需要使用Type属性来判断当前对象是否为图片(Type为3时),伪代码演示。

for s in doc.InlineShapes:
  if s.Type == 3:
    print(f'{s}为图片')

假设后面的所有操作,都建立在InlineShapes都是图片的基础上。

from win32com.client import Dispatch

client = Dispatch('kwps.Application')
client.Visible = 1
doc = client.Documents.Open(r'D:\demo.doc')

# 获取第一张图片,即获取一个InlineShape对象
pic1 = doc.InlineShapes(1)
# 所以图片纵横比,防止图片变形
pic1.LockAspectRatio = True
# 设置宽高 单位为磅
pic1.Width = 200 
pic1.Height = 200
# 按比例缩放 90等于缩放为原尺寸的90%
pic1.ScaleHeight = 90
pic1.ScaleWidth = 90

三、图片对齐 InlineShapeRange对象,在设置对齐前,需要使用Range属性来返回一个Range对象。

from win32com.client import Dispatch

client = Dispatch('kwps.Application')
client.Visible = 1
doc = client.Documents.Open(r'D:\demo.doc')

# 获取第一张图片,即获取一个InlineShape对象
pic1 = doc.InlineShapes(1)
# 先转成Range对象,然后再设置对齐:居中对齐
pic1.Range.ParagraphFormat.Alignment = 1

四、设置图片题注

题注的形式如下,题注可以在图片上方也可以在下方,实际上在word中,图片、图表等资源都会有题注,在毕业论文中,题注是必要的格式,在文档中,题注是这么设置的(理想状态下是这样,但往往用户不会通过这种方式来设置题注)。

设置题注的方法InsertCaption()封装在RangeSelection中,在此使用Range进行演示。

"""沿用上一步的代码"""
pic1.Range.InsertCaption(
    Label=-1, # 当前操作的对象为图片
    Title='撸猫延年益寿', # 题注中的标题
    TitleAutoText='', # 暂未清楚
    Position=1, # 在图片的下方插入题注,0为上方
)

操作后的效果:

图片题注在实操中的运用

当我们要检测文档中题注是否合规时,有几种思路可供选择:

1、图片上方或下方的文本的Style是否为题注类型,下篇文章将单独讲解Style接口;

2、图片上方或下方的文本是否符合图+数字的,如图 1、图 2等;

仅靠第一点来判断是不够的,因为用户交过来的文档中的题主,也许根本没有题注格式,只有正文格式的题注。