summaryrefslogtreecommitdiffstats
path: root/fedora_business_cards/export.py
diff options
context:
space:
mode:
Diffstat (limited to 'fedora_business_cards/export.py')
-rw-r--r--fedora_business_cards/export.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/fedora_business_cards/export.py b/fedora_business_cards/export.py
index 7da871c..7f8a008 100644
--- a/fedora_business_cards/export.py
+++ b/fedora_business_cards/export.py
@@ -22,6 +22,14 @@ Functions to export cards from SVGs.
"""
import subprocess
+import math
+
+RGB_TO_CMYK = (
+ ("0 0 0", "0 0 0 1"),
+ ("1 1 1", "0 0 0 0"),
+ ("0.23529412 0.43137255 0.70588237", "1 0.46 0 0"),
+ ("0.16078432 0.25490198 0.44705883", "1 0.57 0 0.38"),
+)
def svg_to_file(xmlstring, filename):
@@ -65,3 +73,35 @@ def svg_to_pdf_png(xmlstring, filename, format='png', dpi=300):
else:
raise Exception("Invalid file format requested")
return True
+
+
+def svg_to_cmyk_pdf(xmlstring, filename, dpi=300, converter=RGB_TO_CMYK):
+ """
+ Export an SVG to a PDF while converting to CMYK.
+ xmlstring = the SVG XML to export
+ filename = name of file to save as
+ dpi = DPI to export PDF with (default: 300)
+ converter = a tuple of tuples to convert from RGB to CMYK colors. see
+ RGB_TO_CMYK for an example
+ """
+ stdin = xmlstring.encode('utf-8')
+ command = "inkscape -C -z -T -B -E /dev/stdout /dev/stdin"
+ proc = subprocess.Popen(command, shell=True, stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ eps = proc.communicate(stdin)[0]
+ for that in converter:
+ eps = eps.replace("\n%s setrgbcolor" % that[0],
+ "\n%s setcmykcolor" % that[1])
+ command = "inkscape -z -W /dev/stdin"
+ proc = subprocess.Popen(command, shell=True, stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ width = str(int(math.ceil(float(proc.communicate(stdin)[0])*dpi/90)))
+ command = "inkscape -z -H /dev/stdin"
+ proc = subprocess.Popen(command, shell=True, stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ height = str(int(math.ceil(float(proc.communicate(stdin)[0])*dpi/90)))
+ command = "gs -q -sDEVICE=pdfwrite -dAutoRotatePages=/None -r%s -g%sx%s -sOutputFile='%s' - -c quit" % (str(dpi), width, height, filename)
+ proc = subprocess.Popen(command, shell=True, stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ proc.communicate(eps)
+ return True