summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Weller <ianweller@gmail.com>2008-12-14 22:27:52 -0600
committerIan Weller <ianweller@gmail.com>2008-12-14 22:27:52 -0600
commitf4bccd9fa5fc18fafb4e2e7a811408e7e0cd909b (patch)
tree9edb572372341e86247428c00784376504264441
parent66e962d63a76904a187c07b2343f7eeebdff159c (diff)
downloadfedora-business-cards-f4bccd9fa5fc18fafb4e2e7a811408e7e0cd909b.zip
fedora-business-cards-f4bccd9fa5fc18fafb4e2e7a811408e7e0cd909b.tar.gz
fedora-business-cards-f4bccd9fa5fc18fafb4e2e7a811408e7e0cd909b.tar.xz
Add --cmyk-pdf option to export PDFs with CMYK color
-rw-r--r--.gitignore2
-rw-r--r--fedora_business_cards/export.py40
-rw-r--r--fedora_business_cards/frontend/cmdline.py7
3 files changed, 49 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 9faf52e..966fbde 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,8 @@
*.pyc
*.pyo
*.png
+*.pdf
+*.eps
*.tif
*.tiff
*.svg
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
diff --git a/fedora_business_cards/frontend/cmdline.py b/fedora_business_cards/frontend/cmdline.py
index d1d9a65..958aa33 100644
--- a/fedora_business_cards/frontend/cmdline.py
+++ b/fedora_business_cards/frontend/cmdline.py
@@ -66,6 +66,9 @@ def main():
action="store_const", help="Export as SVG")
parser.add_option("--eps", dest="output", default="png", const="eps",
action="store_const", help="Export as EPS")
+ parser.add_option("--cmyk-pdf", dest="output", default="png",
+ const="cmyk_pdf", action="store_const",
+ help="Export as PDF with CMYK color")
parser.add_option("-c", "--config", dest="config_location", default="",
help="Location of config.ini configuration file")
options = parser.parse_args()[0]
@@ -149,6 +152,8 @@ def main():
xml = generate.gen_front(name, title, lines, frontloc)
if options.output == "svg":
export.svg_to_file(xml, options.username+'-front.'+options.output)
+ elif options.output == "cmyk_pdf":
+ export.svg_to_cmyk_pdf(xml, options.username+'-front.pdf')
else:
export.svg_to_pdf_png(xml, options.username+'-front.'+options.output,
options.output, options.dpi)
@@ -158,6 +163,8 @@ def main():
xml = generate.gen_back(backloc)
if options.output == "svg":
export.svg_to_file(xml, options.username+'-back.'+options.output)
+ elif options.output == "cmyk_pdf":
+ export.svg_to_cmyk_pdf(xml, options.username+'-back.pdf')
else:
export.svg_to_pdf_png(xml, options.username+'-back.'+options.output,
options.output, options.dpi)