rdesign/scripts/convert_idml.py

100 lines
2.6 KiB
Python

#!/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()