#!/usr/bin/env python3 """ Scribus headless export script. Called via: scribus -g -ns -py export_document.py -- [args] Exports a .sla template to PDF or PNG, optionally substituting variables. """ import sys import os # Parse args after '--' separator def parse_args(): args = {} variables = {} argv = sys.argv[1:] # Scribus passes script args after '--' i = 0 while i < len(argv): if argv[i] == "--input" and i + 1 < len(argv): args["input"] = argv[i + 1] i += 2 elif argv[i] == "--output" and i + 1 < len(argv): args["output"] = argv[i + 1] i += 2 elif argv[i] == "--format" and i + 1 < len(argv): args["format"] = argv[i + 1] i += 2 elif argv[i] == "--dpi" and i + 1 < len(argv): args["dpi"] = int(argv[i + 1]) i += 2 elif argv[i] == "--var" and i + 1 < len(argv): key, _, value = argv[i + 1].partition("=") variables[key] = value i += 2 else: i += 1 args["variables"] = variables return args def main(): try: import scribus except ImportError: print("ERROR: This script must be run inside Scribus (scribus -g -py)") sys.exit(1) args = parse_args() input_file = args.get("input") output_file = args.get("output") fmt = args.get("format", "pdf") dpi = args.get("dpi", 300) variables = args.get("variables", {}) if not input_file or not output_file: print("ERROR: --input and --output required") sys.exit(1) # Open the document try: scribus.openDoc(input_file) except Exception as e: print(f"ERROR: Could not open {input_file}: {e}") sys.exit(1) # Substitute variables in text frames if variables: page_count = scribus.pageCount() for page_num in range(1, page_count + 1): scribus.gotoPage(page_num) items = scribus.getPageItems() for item_name, item_type, _ in items: # item_type 4 = text frame if item_type == 4: try: text = scribus.getText(item_name) modified = False for key, value in variables.items(): placeholder = f"%{key}%" if placeholder in text: text = text.replace(placeholder, value) modified = True if modified: scribus.selectText(0, scribus.getTextLength(item_name), item_name) scribus.deleteText(item_name) scribus.insertText(text, 0, item_name) except Exception: continue # Export if fmt == "pdf": pdf = scribus.PDFfile() pdf.file = output_file pdf.quality = 0 # Maximum quality pdf.resolution = dpi pdf.version = 14 # PDF 1.4 pdf.compress = True pdf.compressmtd = 0 # Automatic pdf.save() elif fmt == "png": # Export each page as PNG scribus.savePageAsEPS(output_file.replace(".png", ".eps")) # Note: for PNG, we rely on post-processing with ghostscript/imagemagick print(f"EPS exported to {output_file.replace('.png', '.eps')}") print("Convert with: convert -density {dpi} file.eps file.png") elif fmt == "svg": # Scribus can export to SVG scribus.saveDoc() scribus.closeDoc() print(f"Exported: {output_file}") if __name__ == "__main__": main()