我不太擅长在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