如何通过API/宏将图片以链接形式插入LibreOffice文档?
Python实现LibreOffice文档图片插入(含链接式插入)
嵌入式图片代码
基于Pitonyak资料改编的代码,支持向Writer/Draw/Impress/Calc插入嵌入式图片:
import uno from com.sun.star.awt import Point, Size furl = 'https://upload.wikimedia.org/wikipedia/commons/1/1a/Blank_US_Map_%28states_only%29.svg' oDoc= XSCRIPTCONTEXT.getDocument() oShape = oDoc.createInstance("com.sun.star.drawing.GraphicObjectShape") oShape.GraphicURL = furl oDoc.getDrawPages().getByIndex(0).add(oShape) oShape.setSize(oShape.Graphic.Size100thMM) oShape.setPosition(Point(1*2540, 1*2540))
该逻辑可适配为StarBasic或Java版本。
链接式插入图片的正确实现
直接设置GraphicsURL.OriginURL或Graphic.OriginURL无法实现链接式插入,必须通过GraphicProvider服务以链接模式加载图片,代码如下:
import uno from com.sun.star.awt import Point, Size from com.sun.star.graphic import GraphicProvider from com.sun.star.beans import PropertyValue furl = 'https://upload.wikimedia.org/wikipedia/commons/1/1a/Blank_US_Map_%28states_only%29.svg' oDoc = XSCRIPTCONTEXT.getDocument() oShape = oDoc.createInstance("com.sun.star.drawing.GraphicObjectShape") # 初始化GraphicProvider并配置链接加载参数 graphic_provider = uno.getComponentContext().getServiceManager().createInstance(GraphicProvider) load_props = ( PropertyValue("URL", 0, furl, 0), PropertyValue("LoadAsLink", 0, True, 0) ) linked_graphic = graphic_provider.queryGraphic(load_props) # 将链接图片绑定到形状 oShape.Graphic = linked_graphic oDoc.getDrawPages().getByIndex(0).add(oShape) oShape.setSize(linked_graphic.Size100thMM) oShape.setPosition(Point(1*2540, 1*2540))
核心要点
LoadAsLink属性是关键,它告诉LibreOffice仅保留图片链接而非嵌入数据。- 通过
queryGraphic获取的Graphic对象会自动维护OriginURL属性,对应原始图片地址,和手动插入的链接图片行为一致。
内容的提问来源于stack exchange,提问作者bfris
相关产品推荐
相关产品推荐

