自动将 odt 转换为 pdf

Gau*_*tam 5 pdf conversion libreoffice document

我正在 Libre 办公室创建一些文件,我必须始终将它们作为.pdf.

但是每次我忘记将其导出为 pdf 时,有什么方法可以.odtpdf每次保存文档时将文档自动转换为它?

我只有大约 4 个文档,我一直在对它们进行更改,因此每次我进行更改并保存时,odt我都需要在相应的 pdf 文件中更新该更改。

Ps:我知道unoconv可以通过命令行进行转换,但有没有办法自动转换?

另一个 Ps:我发现有一种叫做 inotify 和 inotify-tools 的东西,可以用来在文件更改时触发事件。但我不知道如何使用它。

小智 3

使用 pyinotify 项目中的代码的快速而肮脏的示例 [http://github.com/seb-m/pyinotify]

您需要将 WATCHED_DIR 更改为包含 ODT 文件的目录。还要记住先安装 unoconv。

# Notifier example from tutorial
#
# See: http://github.com/seb-m/pyinotify/wiki/Tutorial
#
# odtwatcher.py

import os
import pyinotify
import subprocess

WATCHED_DIR = '/tmp/test'

wm = pyinotify.WatchManager()  # Watch Manager
mask = pyinotify.IN_MODIFY

class EventHandler(pyinotify.ProcessEvent):
    def process_IN_MODIFY(self, event):
        fname = event.pathname            
        if os.path.splitext(fname)[1] == '.odt':
            print 'MODIFIED: ', fname
            args = ['unoconv', '-f', 'pdf', fname]
            try:
                subprocess.Popen(args)
            except OSError as e:
                print 'Could not convert file %s to PDF. Error %s' % (fname, str(e))

if __name__ == '__main__':
    handler = EventHandler()
    notifier = pyinotify.Notifier(wm, handler)
    wdd = wm.add_watch(WATCHED_DIR, mask, rec=True)        
    notifier.loop()
Run Code Online (Sandbox Code Playgroud)

将其另存为 odtwatcher.py,然后在后台运行它

python odtwatcher.py &
Run Code Online (Sandbox Code Playgroud)