概要
开发UOS环境下,使用Python通过pywpsrpc库操作word文档在指定段落添加指定宽高的图片时意外发现的该问题,在原作者的github提问后获得解答后记录(源码地址、对应提问链接以及相关资料链接贴在文章末尾)。
原因及解决方式
首先贴一段简单的代码,作用是新建一个word文档并在其中添加一个图片。
from pywpsrpc.rpcwpsapi import createWpsRpcInstance
hr, rpc = createWpsRpcInstance()
hr, app = rpc.getWpsApplication()
hr, doc = app.Documents.Add()
parag = doc.Paragraphs.Add().Range
img = parag.InlineShapes.AddPictures('/path/img.jpg')
可以看到在最后我们获得了一个InlineShape对象img,如果我们这时候需要对这个图片进行操作,按照wps官方文档,我们应该只需直接通过:
width = 100
height = 100
img.Width = width
img.Height = height
即可完成自定义该图片的长宽,但是pywpsrpc返回的却是默认的tuple所以引发了标题中的报错,此时只需要调用RpcProxy将该对象转换即可,以下是修改后的代码:
from pywpsrpc.rpcwpsapi import createWpsRpcInstance
from pywpsrpc import RpcProxy
hr, rpc = createWpsRpcInstance()
hr, app = rpc.getWpsApplication()
hr, doc = app.Documents.Add()
parag = doc.Paragraphs.Add().Range
img = parag.InlineShapes.AddPictures('/path/img.jpg')
width = 100
height = 100
RpcProxy(img).Width = width
RpcProxy(img).Height = height
doc.SaveAs2('/path/word.docx')
app.Quit()
问题解决,以上。
相关链接
pywpsrpc库:https://github.com/timxx/pywpsrpc
提问链接:https://github.com/timxx/pywpsrpc/issues/93
RpcProxy wiki:https://github.com/timxx/pywpsrpc/wiki/RpcProxy