在没有 GUI 的情况下运行 Scribus 脚本

l0b*_*0b0 2 script scribus

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

小智 5

这是可能的,但是您需要“非稳定”的 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
Run Code Online (Sandbox Code Playgroud)

请注意,这是仅适用于 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)
Run Code Online (Sandbox Code Playgroud)