unotools вставляет изображение в документ (libreoffice)

Я пытаюсь вставить изображение в документ libreoffice, который обрабатывается / контролируется unotools.

Поэтому я запускаю 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? Любое альтернативное решение также было бы отличным.


person SerAlejo    schedule 02.06.2019    source источник


Ответы (1)


Я нашел способ вставлять изображения, используя 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)

источники:

  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

Я до сих пор не знаю, как вставить изображение из буфера обмена, я решил эту проблему, предварительно сохранив изображение. Если кто-то знает, как вставить изображение прямо из буфера обмена, это все равно будет полезно.

person SerAlejo    schedule 06.06.2019