#!/usr/bin/env python3 """ Scribus script: Import an IDML file (InDesign Markup Language) and export to SLA (Scribus native) and/or PDF. Scribus has a built-in IDML import filter. This script leverages it headlessly. Called via: scribus -g -ns -py convert_idml.py -- [args] """ import sys import os def parse_args(): args = {} argv = sys.argv[1:] 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-sla" and i + 1 < len(argv): args["output_sla"] = argv[i + 1] i += 2 elif argv[i] == "--output-pdf" and i + 1 < len(argv): args["output_pdf"] = argv[i + 1] i += 2 elif argv[i] == "--dpi" and i + 1 < len(argv): args["dpi"] = int(argv[i + 1]) i += 2 else: i += 1 return args def main(): try: import scribus except ImportError: print("ERROR: Must run inside Scribus (scribus -g -py)") sys.exit(1) args = parse_args() input_file = args.get("input") output_sla = args.get("output_sla") output_pdf = args.get("output_pdf") dpi = args.get("dpi", 300) if not input_file: print("ERROR: --input required") sys.exit(1) if not os.path.exists(input_file): print(f"ERROR: File not found: {input_file}") sys.exit(1) if not output_sla and not output_pdf: print("ERROR: At least one of --output-sla or --output-pdf required") sys.exit(1) # Open the IDML file — Scribus handles import via its built-in filter try: scribus.openDoc(input_file) print(f"Opened: {input_file}") print(f"Pages: {scribus.pageCount()}") except Exception as e: print(f"ERROR: Could not open {input_file}: {e}") sys.exit(1) # Save as SLA (Scribus native format) if output_sla: try: scribus.saveDocAs(output_sla) print(f"Saved SLA: {output_sla}") except Exception as e: print(f"ERROR saving SLA: {e}") # Export to PDF if output_pdf: try: pdf = scribus.PDFfile() pdf.file = output_pdf pdf.quality = 0 pdf.resolution = dpi pdf.version = 14 pdf.compress = True pdf.compressmtd = 0 pdf.save() print(f"Exported PDF: {output_pdf}") except Exception as e: print(f"ERROR exporting PDF: {e}") scribus.closeDoc() print("Done.") if __name__ == "__main__": main()