在 LibreOffice 中使用宏脚本一次插入多个图像

Posted

技术标签:

【中文标题】在 LibreOffice 中使用宏脚本一次插入多个图像【英文标题】:Insert several images at once using macro scripting in LibreOffice 【发布时间】:2015-07-16 08:57:21 【问题描述】:

我正在用 Python 为 LibreOffice Writer 编写一个宏。 我需要在一个文档中插入几张图片,一张一张地插入它们之间的最小空间。

以下代码将所有图像插入同一区域,并且所有图像都重叠。

每次插入新图像时,我都需要将光标移到插入的图像下方。 我已经尝试过 cursor.gotoEnd()、cursor.goDown() 和其他类似的方法,但似乎都不起作用。

我该如何进行这项工作?

def InsertAll():
    desktop = XSCRIPTCONTEXT.getDesktop()
    doc=desktop.loadComponentFromURL('private:factory/swriter','_blank',0,())

    text = doc.getText()
    cursor = text.createTextCursor()

    file_list = glob.glob('/path/of/your/dir/*.png')
    for f in file_list:
        img = doc.createInstance('com.sun.star.text.TextGraphicObject') 
        img.GraphicURL = 'file://' + f
        text.insertTextContent(cursor, img, False)
        cursor.gotoEnd(False) <- doesnt advance the cursor downwards

    return None

【问题讨论】:

只是手动插入图片,我的经验是你必须在图片后添加换行符才能让光标有位置。因此,可以尝试在图片插入之间向文档添加一两个换行符。 我也试过了。没用。 有一个 Andrew Pitonyak 的文档,可从他的 OpenOffice 站点http://www.pitonyak.org/oo.php 下载“英文宏文档”。在插入多个图像的示例中,代码查找文本字符并在字符的每个实例之后插入和图像。 (代码示例在 StarBasic 中,但 API 名称相同,因此将其应用于 Python 应该不会太糟糕。)也许您可以模仿这一点,在插入图像之前,插入 (file_list 的大小) 文本字符每个后跟一个换行符? 【参考方案1】:

在每张图片后插入一个分节符:

from com.sun.star.text.ControlCharacter import PARAGRAPH_BREAK

    text.insertTextContent(cursor, img, False)
    text.insertControlCharacter(cursor, PARAGRAPH_BREAK, False)
    cursor.gotoEnd(False)

这会将图像分开...用一个段落

Andrew 的书是解决许多 OpenOffice 脚本问题的基本资料:+1

【讨论】:

以上是关于在 LibreOffice 中使用宏脚本一次插入多个图像的主要内容,如果未能解决你的问题,请参考以下文章

LibreOffice 替换宏 - 仅替换一次并按格式替换

如何在 LibreOffice 中运行 python 宏?

创建带有嵌入宏的 LibreOffice 文档

如何使用 LibreOffice 宏将 os.system() 命令写入 python 脚本并执行它?

如何在 LibreOffice 中使用宏和 Visual Basic 突出显示文本

LibreOffice Calc 中的脚本