gpt4 book ai didi

python - unotools 将图像插入文档 (libreoffice)

转载 作者:太空宇宙 更新时间:2023-11-03 11:58:15 29 4
gpt4 key购买 nike

我正在尝试将图像插入由 unotools 处理/控制的 libreoffice 文档。

因此,我使用以下命令启动 LibreOffice:

soffice --accept='socket,host=localhost,port=8100;urp;StarOffice.Service'

在我的 python 代码中,我可以连接到 LibreOffice:

from unotools import Socket, connect
from unotools.component.writer import Writer
context = connect(Socket('localhost', 8100))
writer = Writer(context)

(此代码取自此文档:https://pypi.org/project/unotools/)

通过使用 writer.set_string_to_end() 我可以向文档中添加一些文本。但是我还想在文档中插入一张图片。到目前为止,我找不到完成此操作的任何资源。该图像在我的剪贴板中,所以理想情况下我想直接从那里插入图像。或者,我可以暂时保存图像并插入保存的文件。

有没有已知的方法可以使用 unotools 插入图像? 任何替代解决方案也很好。

最佳答案

我找到了一种使用 uno 而不是 unotools 来插入图像的方法:

import uno
from com.sun.star.awt import Size
from pythonscript import ScriptContext

def connect_to_office():
if not 'XSCRIPTCONTEXT' in globals():
localContext = uno.getComponentContext()
resolver = localContext.ServiceManager.createInstanceWithContext(
'com.sun.star.bridge.UnoUrlResolver', localContext )
client = resolver.resolve("uno:socket,host=localhost,port=8100;urp;StarOffice.ComponentContext" )
global XSCRIPTCONTEXT
XSCRIPTCONTEXT = ScriptContext(client, None, None)

def insert_image(doc):
size = Size()
path = uno.systemPathToFileUrl('/somepath/image.png')
draw_page = self.doc.DrawPage
image = doc.createInstance( 'com.sun.star.drawing.GraphicObjectShape')
image.GraphicURL = path
draw_page.add(image)
size.Width = 7500
size.Height = 5000
image.setSize(size)
image.setPropertyValue('AnchorType', 'AT_FRAME')

connect_to_office()
doc = XSCRIPTCONTEXT.getDocument()
insert_image(doc)

sources:

  1. https://ask.libreoffice.org/en/question/38844/how-do-i-run-python-macro-from-the-command-line/

  2. https://forum.openoffice.org/en/forum/viewtopic.php?f=45&t=80302

我仍然不知道如何从剪贴板插入图像,我通过先保存图像解决了这个问题。如果有人知道直接从剪贴板插入图像的方法,那仍然会有帮助。

关于python - unotools 将图像插入文档 (libreoffice),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56417617/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com