From 8313560afb112b61f0ad82607235c2188a6f805b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andr=C3=A9=20Wobst?= Date: Wed, 27 Jul 2005 10:33:33 +0000 Subject: [PATCH] introduce writebbox option git-svn-id: https://pyx.svn.sourceforge.net/svnroot/pyx/trunk/pyx@2322 069f4177-920e-0410-937b-c2a4a81bcd90 --- CHANGES | 5 +++++ contrib/dviconvert.py | 19 +++++++++++++------ manual/document.tex | 4 ++-- pyx/document.py | 4 ++-- pyx/pdfwriter.py | 10 +++++++--- pyx/pswriter.py | 12 +++++++----- 6 files changed, 36 insertions(+), 18 deletions(-) diff --git a/CHANGES b/CHANGES index 108aecfd..7c728472 100644 --- a/CHANGES +++ b/CHANGES @@ -95,6 +95,11 @@ TODO: - canvas module: - add missing writePSfile wrapper - add *args to writeEPSfile and writePDFfile wrappers + - writer modules: + - writebbox option to write bbox information (disabled by default) + even when a paper format is specified (PS and PDF writers only) + - use arclen in spring example + - use pdf graphic files for pdf version of the manual - correct description regarding the manual in the README file diff --git a/contrib/dviconvert.py b/contrib/dviconvert.py index 7980bd81..934d7fe3 100644 --- a/contrib/dviconvert.py +++ b/contrib/dviconvert.py @@ -22,7 +22,7 @@ from optparse import OptionParser from pyx import * from pyx import bbox, dvifile, version -parser = OptionParser(usage="usage: %prog -o output-file [-p paperformat] dvi-file", +parser = OptionParser(usage="usage: %prog [-b] [-p paperformat] -o output-file dvi-file", version="%prog " + version.version) parser.add_option("-o", "--output", type="string", dest="output", @@ -30,14 +30,15 @@ parser.add_option("-o", "--output", parser.add_option("-p", "--paperformat", type="string", dest="paperformat", default=None, help="optional paper format string") +parser.add_option("-b", "--writebbox", + action="store_true", dest="writebbox", default=0, + help="Add bouding box information on PS and PDF when a paperformat is defined") (options, args) = parser.parse_args() if len(args) != 1: parser.error("can process a single dvi-file only") if options.paperformat: - paperformat = getattr(document.paperformat, options.paperformat) - pagebbox = bbox.bbox(0, -paperformat.height, paperformat.width, 0) - pagebbox.transform(trafo.translate(-unit.t_inch, unit.t_inch)) + options.paperformat = getattr(document.paperformat, options.paperformat) df = dvifile.dvifile(args[0], dvifile.readfontmap(["psfonts.map"])) d = document.document() while 1: @@ -45,8 +46,14 @@ while 1: if not dvipage: break if options.paperformat: - p = document.page(dvipage, paperformat=paperformat, bbox=pagebbox) + aligntrafo = trafo.translate(-unit.t_inch, unit.t_inch + paperformat.height) + aligneddvipage = canvas.canvas([aligntrafo]) + aligneddvipage.insert(dvipage) + p = document.page(aligneddvipage, paperformat=paperformat) else: p = document.page(dvipage) d.append(p) -d.writetofile(options.output) +if options.writebbox: + d.writetofile(options.output) +else: + d.writetofile(options.output, writebbox=1) diff --git a/manual/document.tex b/manual/document.tex index 20b0fb10..b53734ce 100644 --- a/manual/document.tex +++ b/manual/document.tex @@ -48,13 +48,13 @@ A \class{document} can be written to a file using one of the following methods: \end{methoddesc} \begin{methoddesc}{writePSfile}{filename, *args, **kwargs} - Write a single page \class{document} to a PS file, passing + Write \class{document} to a PS file, passing \var{args} and \var{kwargs} to the \class{pswriter} instance created for writing. \end{methoddesc} \begin{methoddesc}{writePDFfile}{filename, *args, **kwargs} - Write a single page \class{document} to a PDF file, passing + Write \class{document} to a PDF file, passing \var{args} and \var{kwargs} to the \class{pdfwriter} instance created for writing. \end{methoddesc} diff --git a/pyx/document.py b/pyx/document.py index 50131d95..51b6645d 100644 --- a/pyx/document.py +++ b/pyx/document.py @@ -47,7 +47,7 @@ def _paperformatfromstring(name): class page: - def __init__(self, canvas, pagename=None, paperformat=paperformat.A4, rotated=0, centered=1, fittosize=0, + def __init__(self, canvas, pagename=None, paperformat=None, rotated=0, centered=1, fittosize=0, margin=1 * unit.t_cm, bboxenlarge=1 * unit.t_pt, bbox=None): self.canvas = canvas self.pagename = pagename @@ -85,7 +85,7 @@ class page: The canvas extents are described by bbox. """ - if bbox and (self.rotated or self.centered or self.fittosize): + if bbox and self.paperformat and (self.rotated or self.centered or self.fittosize): paperwidth, paperheight = self.paperformat.width, self.paperformat.height # center (optionally rotated) output on page diff --git a/pyx/pdfwriter.py b/pyx/pdfwriter.py index 91d5a6ba..620f1151 100644 --- a/pyx/pdfwriter.py +++ b/pyx/pdfwriter.py @@ -223,8 +223,11 @@ class PDFpage(PDFobject): "/Type /Page\n" "/Parent %i 0 R\n" % registry.getrefno(self.PDFpages)) paperformat = self.page.paperformat - file.write("/MediaBox [0 0 %f %f]\n" % (unit.topt(paperformat.width), unit.topt(paperformat.height))) - if self.transformedbbox: + if paperformat: + file.write("/MediaBox [0 0 %f %f]\n" % (unit.topt(paperformat.width), unit.topt(paperformat.height))) + else: + file.write("/MediaBox [%f %f %f %f]\n" % self.transformedbbox.highrestuple_pt()) + if self.transformedbbox and writer.writebbox: file.write("/CropBox [%f %f %f %f]\n" % self.transformedbbox.highrestuple_pt()) procset = [] if self.pageregistry.types.has_key("font"): @@ -464,7 +467,7 @@ class PDFwriter: def __init__(self, document, filename, title=None, author=None, subject=None, keywords=None, - fullscreen=0, compress=1, compresslevel=6): + fullscreen=0, writebbox=0, compress=1, compresslevel=6): if not filename.endswith(".pdf"): filename = filename + ".pdf" try: @@ -477,6 +480,7 @@ class PDFwriter: self.subject = subject self.keywords = keywords self.fullscreen = fullscreen + self.writebbox = writebbox if compress and not haszlib: compress = 0 warnings.warn("compression disabled due to missing zlib module") diff --git a/pyx/pswriter.py b/pyx/pswriter.py index 856ebc31..5cff1b23 100644 --- a/pyx/pswriter.py +++ b/pyx/pswriter.py @@ -273,7 +273,7 @@ class epswriter: class pswriter: - def __init__(self, document, filename): + def __init__(self, document, filename, writebbox=0): if not filename.endswith(".ps"): filename = filename + ".ps" try: @@ -300,7 +300,7 @@ class pswriter: documentbbox = page._transformedbbox.enlarge(0) # make a copy file.write("%!PS-Adobe-3.0\n") - if documentbbox: + if documentbbox and writebbox: file.write("%%%%BoundingBox: %d %d %d %d\n" % documentbbox.lowrestuple_pt()) file.write("%%%%HiResBoundingBox: %g %g %g %g\n" % documentbbox.highrestuple_pt()) file.write("%%%%Creator: PyX %s\n" % version.version) @@ -311,7 +311,8 @@ class pswriter: # required paper formats paperformats = {} for page in document.pages: - paperformats[page.paperformat] = page.paperformat + if page.paperformat: + paperformats[page.paperformat] = page.paperformat first = 1 for paperformat in paperformats.values(): @@ -349,9 +350,10 @@ class pswriter: # pages section for nr, page in enumerate(document.pages): file.write("%%%%Page: %s %d\n" % (page.pagename is None and str(nr+1) or page.pagename, nr+1)) - file.write("%%%%PageMedia: %s\n" % page.paperformat.name) + if page.paperformat: + file.write("%%%%PageMedia: %s\n" % page.paperformat.name) file.write("%%%%PageOrientation: %s\n" % (page.rotated and "Landscape" or "Portrait")) - if page._transformedbbox: + if page._transformedbbox and writebbox: file.write("%%%%PageBoundingBox: %d %d %d %d\n" % page._transformedbbox.lowrestuple_pt()) # page setup section -- 2.11.4.GIT