如何在LibreOffice Impress中选择一个文本框并使用Python更改其字体大小?



我不太擅长在LibreOffice套件中使用python。我基本上是在尝试以编程方式复制一个基本的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,然后将文件重命名为.pptx6( 庆祝

由于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:

  • Andrew Pitonyak的OpenOffice Macro Information有他的书的链接,其中有几个例子
  • 一些基本功能的小教程
  • 官方文件
  • Python中的Control Libreoffice Impress

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

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

最新更新