unotools вставляет изображение в документ (libreoffice) - PullRequest
4 голосов
/ 02 июня 2019

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

1 Ответ

0 голосов
/ 06 июня 2019

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

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

...