various cleanups and corrections of smaller errors
[PyX/mjg.git] / pyx / pswriter.py
blob3ee756b9a5e17dcfda1f22d9441e79e9e311df4d
1 #!/usr/bin/env python
2 # -*- coding: ISO-8859-1 -*-
5 # Copyright (C) 2005 Jörg Lehmann <joergl@users.sourceforge.net>
6 # Copyright (C) 2005 André Wobst <wobsta@users.sourceforge.net>
8 # This file is part of PyX (http://pyx.sourceforge.net/).
10 # PyX is free software; you can redistribute it and/or modify
11 # it under the terms of the GNU General Public License as published by
12 # the Free Software Foundation; either version 2 of the License, or
13 # (at your option) any later version.
15 # PyX is distributed in the hope that it will be useful,
16 # but WITHOUT ANY WARRANTY; without even the implied warranty of
17 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 # GNU General Public License for more details.
20 # You should have received a copy of the GNU General Public License
21 # along with PyX; if not, write to the Free Software
22 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 import time
25 import style, version
28 class epswriter:
30 def __init__(self, document, filename):
31 if len(document.pages) != 1:
32 raise ValueError("EPS file can be construced out of a single page document only")
33 page = document.pages[0]
34 canvas = page.canvas
36 if filename[-4:] != ".eps":
37 filename = filename + ".eps"
38 try:
39 file = open(filename, "w")
40 except IOError:
41 raise IOError("cannot open output file")
43 bbox = canvas.bbox()
44 pagetrafo = page.pagetrafo(bbox)
46 # if a page transformation is necessary, we have to adjust the bounding box
47 # accordingly
48 if pagetrafo is not None:
49 bbox.transform(pagetrafo)
51 file.write("%!PS-Adobe-3.0 EPSF-3.0\n")
52 bbox.outputPS(file)
53 file.write("%%%%Creator: PyX %s\n" % version.version)
54 file.write("%%%%Title: %s\n" % filename)
55 file.write("%%%%CreationDate: %s\n" %
56 time.asctime(time.localtime(time.time())))
57 file.write("%%EndComments\n")
59 file.write("%%BeginProlog\n")
61 mergedprolog = []
63 for pritem in canvas.prolog():
64 for mpritem in mergedprolog:
65 if mpritem.merge(pritem) is None: break
66 else:
67 mergedprolog.append(pritem)
69 for pritem in mergedprolog:
70 pritem.outputPS(file)
72 file.write("%%EndProlog\n")
74 # apply a possible page transformation
75 if pagetrafo is not None:
76 pagetrafo.outputPS(file)
78 style.linewidth.normal.outputPS(file)
80 # here comes the canvas content
81 canvas.outputPS(file)
83 file.write("showpage\n")
84 file.write("%%Trailer\n")
85 file.write("%%EOF\n")
88 class pswriter:
89 pass
91 # def outputPS(self, file):
92 # file.write("%%%%PageMedia: %s\n" % self.paperformat)
93 # file.write("%%%%PageOrientation: %s\n" % (self.rotated and "Landscape" or "Portrait"))
94 # # file.write("%%%%PageBoundingBox: %d %d %d %d\n" % (math.floor(pbbox.llx_pt), math.floor(pbbox.lly_pt),
95 # # math.ceil(pbbox.urx_pt), math.ceil(pbbox.ury_pt)))
97 # # page setup section
98 # file.write("%%BeginPageSetup\n")
99 # file.write("/pgsave save def\n")
100 # # for scaling, we need the real bounding box of the page contents
101 # pbbox = canvas.bbox(self)
102 # pbbox.enlarge(self.bboxenlarge)
103 # ptrafo = calctrafo(pbbox, self.paperformat, self.margin, self.rotated, self.fittosize)
104 # if ptrafo:
105 # ptrafo.outputPS(file)
106 # file.write("%f setlinewidth\n" % unit.topt(style.linewidth.normal))
107 # file.write("%%EndPageSetup\n")
109 # # here comes the actual content
110 # canvas.outputPS(self, file)
111 # file.write("pgsave restore\n")
112 # file.write("showpage\n")
113 # # file.write("%%PageTrailer\n")
116 # def writePSfile(self, filename):
117 # """write pages to PS file """
119 # if filename[-3:]!=".ps":
120 # filename = filename + ".ps"
122 # try:
123 # file = open(filename, "w")
124 # except IOError:
125 # raise IOError("cannot open output file")
127 # docbbox = None
128 # for apage in self.pages:
129 # pbbox = apage.bbox()
130 # if docbbox is None:
131 # docbbox = pbbox
132 # else:
133 # docbbox += pbbox
135 # # document header
136 # file.write("%!PS-Adobe-3.0\n")
137 # docbbox.outputPS(file)
138 # file.write("%%%%Creator: PyX %s\n" % version.version)
139 # file.write("%%%%Title: %s\n" % filename)
140 # file.write("%%%%CreationDate: %s\n" %
141 # time.asctime(time.localtime(time.time())))
142 # # required paper formats
143 # paperformats = {}
144 # for apage in self.pages:
145 # if isinstance(apage, page):
146 # paperformats[apage.paperformat] = _paperformats[apage.paperformat]
147 # first = 1
148 # for paperformat, size in paperformats.items():
149 # if first:
150 # file.write("%%DocumentMedia: ")
151 # first = 0
152 # else:
153 # file.write("%%+ ")
154 # file.write("%s %d %d 75 white ()\n" % (paperformat, unit.topt(size[0]), unit.topt(size[1])))
156 # file.write("%%%%Pages: %d\n" % len(self.pages))
157 # file.write("%%PageOrder: Ascend\n")
158 # file.write("%%EndComments\n")
160 # # document default section
161 # #file.write("%%BeginDefaults\n")
162 # #if paperformat:
163 # # file.write("%%%%PageMedia: %s\n" % paperformat)
164 # #file.write("%%%%PageOrientation: %s\n" % (rotated and "Landscape" or "Portrait"))
165 # #file.write("%%EndDefaults\n")
167 # # document prolog section
168 # file.write("%%BeginProlog\n")
169 # mergedprolog = []
170 # for apage in self.pages:
171 # for pritem in apage.prolog():
172 # for mpritem in mergedprolog:
173 # if mpritem.merge(pritem) is None: break
174 # else:
175 # mergedprolog.append(pritem)
176 # for pritem in mergedprolog:
177 # pritem.outputPS(file)
178 # file.write("%%EndProlog\n")
180 # # document setup section
181 # #file.write("%%BeginSetup\n")
182 # #file.write("%%EndSetup\n")
184 # # pages section
185 # for nr, apage in enumerate(self.pages):
186 # file.write("%%%%Page: %s %d\n" % (apage.pagename is None and str(nr) or apage.pagename , nr+1))
187 # apage.outputPS(file)
189 # file.write("%%Trailer\n")
190 # file.write("%%EOF\n")