100 lines
2.6 KiB
Python
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()
|