#! /usr/bin/env python
# Sketch - A Python-based interactive drawing program
# Copyright (C) 1998, 1999, 2000, 2003 by Bernhard Herzog
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# Convert a SKFile into a PostScript file.
#
# This is a very simple implementation of such a script: Just load the
# entire drawing into a document object (via the load module) and draw
# it into a PostScriptDevice.
#
# This means that a lot of more or less unnecessary modules are
# loaded...
import sys, os
from Sketch import load,PostScriptDevice
from Sketch.Lib import util
def sk2ps(filename, psfilename, **psargs):
# convert the SK file FILENAME into a PostScript file PSFILENAME.
# Any keyword arguments are passed to the PostScript device class.
doc = load.load_drawing(filename)
bbox = doc.BoundingRect(visible = psargs.get('visible', 0),
printable = psargs.get('printable', 1))
psargs['bounding_box'] = tuple(bbox)
psargs['document'] = doc
ps = apply(PostScriptDevice, (psfilename,), psargs)
doc.Draw(ps)
ps.Close()
usage = '''\
usage: sk2ps [Options] infile [outfile]
Convert the Skencil/Sketch SK-file infile to PostScript (EPS). Output is
written to outfile or to stdout.
Generic options:
-h --help Print this help message and exit
Layer Selection:
Normally all layers marked as printable are printed, regardless of
whether they are visible or not. These options control which layers to
print:
-v --visible Print all layers marked as visible
-p --noprintable Choose layers only according to their visible flag
and the -v option.
Eps Header Comments:
-t --title=TITLE Use TITLE as the value of the `Title:\' comment.
Default is the basename of infile.
-d --date=DATE Use the DATE as the vale of the `CreationDate:\'
comment. Default is the current date.
-f --for=NAME Use NAME as the value of the `For:\' comment.
default is the real user name.
Other Options:
-e --embed-fonts Embed fonts in the eps file.
-r --rotate Rotate the drawing 90 degree counter clockwise
'''
def print_usage():
print usage
def main():
import Sketch
Sketch.init_lib()
draw_printable = 1
draw_visible = 0
embed_fonts = 0
eps_for = util.get_real_username()
eps_date = util.current_date()
eps_title = None
rotate = 0
import getopt
opts, args = getopt.getopt(sys.argv[1:], 'hprved:f:t:',
['help', 'noprintable', 'rotate', 'visible',
'embed-fonts', 'for=', 'date=', 'title='])
for optchar, value in opts:
if optchar == '-h' or optchar == '--help':
print_usage()
return -1
elif optchar == '-p' or optchar == '--noprintable':
draw_printable = 0
elif optchar == '-v' or optchar == '--visible':
draw_visible = 1
elif optchar == '-d' or optchar == '--date':
eps_date = value
elif optchar == '-f' or optchar == '--for':
eps_for = value
elif optchar == '-r' or optchar == '--rotate':
rotate = 1
elif optchar == '-t' or optchar == '--title':
eps_title = value
elif optchar == '-e' or optchar == '--embed-fonts':
embed_fonts = 1
if len(args) not in (1, 2):
print_usage()
return -1
filename = args[0]
if len(args) > 1:
psfile = args[1]
else:
psfile = sys.stdout
if eps_title is None:
eps_title = os.path.basename(filename)
sk2ps(filename, psfile, printable= draw_printable, visible = draw_visible,
For = eps_for, CreationDate = eps_date, Title = eps_title,
rotate = rotate, embed_fonts = embed_fonts)
if __name__ == '__main__':
result = main()
if result:
sys.exit(result)
|