0

我是使用 Python 和 LibreOffice 套件的新手。我基本上是在尝试以编程方式复制基本的 Impress 文件并批量复制它,但会更改某些文本框的大小。

我在网上查看了一些关于此的文档,但对如何实际实现它感到困惑。

谢谢

编辑:我写了这个测试代码

import os
import zipfile
import glob
import uno

def MassCreatePresentation():

    file = os.path.abspath(glob.glob('INTROTEMPLATE.pptx')[0])
    print('File Found')
    print(file)
    oDoc = XSCRIPTCONTEXT.getDocument()

    return

但它显示了这个错误:

File "MassPresentation.py", line 10, in MassCreatePresentation
    oDoc = XSCRIPTCONTEXT.getDocument()
NameError: name 'XSCRIPTCONTEXT' is not defined

编辑:

好的,我终于用这个逻辑弄清楚了。我这样做的方式:

1)获取shutil复制基本文件2)使用zipfile解压缩复制的pptx文件,3)导航到幻灯片xml并使用readlines()4)修改xml并将其保存5)存档为zip,然后将文件重命名为. pptx 6)庆祝

4

2 回答 2

0

由于在 Impress中似乎无法进行宏录制,因此您可以尝试另一种方法。

LibreOffice 文件基本上只是其中包含 xml 或图像文件的 zip 文件。

如果你解压 odp 文件,里面有一个content.xml

您可以使用 ElementTree 或 lxml 处理此文件并更改您需要的字段。字体设置也在那里。

<?xml version="1.0" encoding="UTF-8"?>
  ....
  <draw:text-box><text:list text:style-name="L1">
    <text:list-item>
      <text:p>CHANGE TEXT HERE</text:p>
    </text:list-item></text:list>
  </draw:text-box>
  ....
  <style:text-properties fo:font-family="StarSymbol" fo:color="#666666" fo:font-size="45%"/>

我找不到一个好的文档,哪些方法可以使用宏 iterface。它可能更优雅,但事实证明这样做可以在一两个小时内工作:

  • 解压
  • 用 ElementTree 打开
  • 改变
  • 保存文件
  • 将其重新压缩并更新旧的

此页面显示了一些用于处理 zip 和 LibreOffice 文件的代码。还有这个

充其量通过这样content.xml的在线格式化程序的内容。所以可以很好地了解它的结构。

您可以直接分配字体或使用定义的样式之一。

这是 的定义L1

<text:list-style style:name="L1">

<office:automatic-styles>

这是该类型的用法:

<text:list text:style-name="L1">

关于 Impress 宏的信息和示例很少,其中大部分都在 BASIC 中:

于 2020-05-06T06:22:50.213 回答
0

此代码更改标准(“西方”)字体的字体大小。

def resize_text_box():
    oDoc = XSCRIPTCONTEXT.getDocument()
    oDrawPage = oDoc.getDrawPages().getByIndex(0)
    for oShape in oDrawPage:
        if oShape.supportsService("com.sun.star.drawing.TextShape"):
            oShape.CharHeight = 18

相关:https ://stackoverflow.com/a/59934440/5100564

于 2020-05-06T19:42:17.007 回答