无需 GUI 即可运行 Scribus 脚本

无需 GUI 即可运行 Scribus 脚本

我想运行一个脚本来进行一些 PDF 操作在 Scribus 中非交互地实现,但我找不到文档来明确说明这是否可行,如果可以,如何实现。

答案1

这是可能的,但是您需要“非稳定”的 Scribus >= 1.5.1(这是一个开发版本 - 对于未来的任何人来说,请在稳定的 Scribus >= 1.6 发布时使用它)来使用脚本启动 Scribus。

我必须从 Debian 上的源代码进行编译。

此外,scribus 的 --no-gui 选项实际上似乎不起作用(截至 1.5.2),所以我用xvfb-run它来“屏幕外”隐藏它。

我习惯于&> /dev/null将所有打印到 stderr 的调试信息通过管道传输出去,但这样太嘈杂了,没什么用。不过,在最初让脚本运行时,您需要关闭此功能。

sudo apt-get install xvfb
xvfb-run scribus --no-gui --no-splash -py scribus2pdf.py -o OUTPUT.pdf -- INPUT.sla &> /dev/null

笔记这是仅适用于 Scribus 1.5.2 的建议语法。在其他版本的 Scribus 上,您可能需要以不同的方式格式化 Python 脚本的参数。另请注意,Scribus 使用的是 Python 2,而不是 3。

笔记在 Scribus 1.5 中保存的文件不向后兼容 Scribus 1.4

这是我的scribus2pdf.py

# Requires Scribus >= 1.5.1
# Tested on Scribus 1.5.2

# Usage:
#     scribus --no-gui --no-splash -py scribus2pdf.py -o OUTPUT.pdf -- INPUT.sla &> /dev/null
# To hide the gui properly, prefix the above with xvfb-run

import sys
import getopt
import scribus

try:
    opts, args = getopt.getopt(sys.argv[1:],"o:")
except getopt.GetoptError as e:
    print(e)
    sys.exit(1)

for opt, arg in opts:
  if opt == "-o":
     dest = arg

if not dest: sys.exit(1)

if scribus.haveDoc() :
    pdf = scribus.PDFfile()
    pdf.file = dest
    pdf.save()
else:
    print("Expected input")
    sys.exit(1)

答案2

目前,这只能通过 Python 启动脚本实现。Scribus 仍将启动 UI,因此在无头服务器上,您需要安装 Xvfb 或 Xdummy。

相关内容