You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 20:06:25