From b28ede2290b08ed168021bbc1c1d790b01071f87 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andr=C3=A9=20Wobst?= Date: Mon, 24 Apr 2006 06:13:44 +0000 Subject: [PATCH] resources/procset management in pdf registry git-svn-id: https://pyx.svn.sourceforge.net/svnroot/pyx/trunk/pyx@2603 069f4177-920e-0410-937b-c2a4a81bcd90 --- pyx/pattern.py | 4 ++-- pyx/pdfwriter.py | 32 +++++++++++++++++++++----------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/pyx/pattern.py b/pyx/pattern.py index fdca9274..e89ba417 100644 --- a/pyx/pattern.py +++ b/pyx/pattern.py @@ -294,7 +294,7 @@ class PDFpattern(pdfwriter.PDFobject): patternproc, writer, registry, patternregistry): self.patternregistry = patternregistry pdfwriter.PDFobject.__init__(self, "pattern") - registry.pageresources.setdefault("Pattern", {})[name] = self + registry.addresource("Pattern", name, self) self.name = name self.patterntype = patterntype @@ -317,7 +317,7 @@ class PDFpattern(pdfwriter.PDFobject): file.write("/YStep %f\n" % self.ystep) file.write("/Matrix %s\n" % str(self.trafo)) file.write("/Resources <<\n") - for patternresource, resources in self.patternregistry.pageresources.items(): + for patternresource, resources in self.patternregistry.resources.items(): file.write("/%s <<\n%s\n>>\n" % (patternresource, "\n".join(["/%s %i 0 R" % (name, self.patternregistry.getrefno(resource)) for name, resource in resources.items()]))) file.write(">>\n") diff --git a/pyx/pdfwriter.py b/pyx/pdfwriter.py index cd631e3e..63f43e8f 100644 --- a/pyx/pdfwriter.py +++ b/pyx/pdfwriter.py @@ -44,8 +44,8 @@ class PDFregistry: self.types = {} # we want to keep the order of the resources self.objects = [] - self.pageresources = {} - self.pageprocsets = {} + self.resources = {} + self.procsets = {"PDF": 1} def add(self, object): """ register object, merging it with an already registered object of the same type and id """ @@ -98,6 +98,21 @@ class PDFregistry: "%i\n" % xrefpos) file.write("%%EOF\n") + def addresource(self, resourcetype, resourcename, object): + self.resources.setdefault(resourcetype, {})[resourcename] = object + + def addprocset(self, procset): + self.procsets[procset] = 1 + + def writeResources(self, file): + file.write("/Resources <<\n") + file.write("/ProcSet [ %s ]\n" % " ".join(["/%s" % p for p in self.procsets.keys()])) + if self.resources: + for resourcetype, resources in self.resources.items(): + file.write("/%s <<\n%s\n>>\n" % (resourcetype, "\n".join(["/%s %i 0 R" % (name, self.getrefno(object)) + for name, object in resources.items()]))) + file.write(">>\n") + class PDFobject: @@ -222,15 +237,10 @@ class PDFpage(PDFobject): file.write("/MediaBox [%f %f %f %f]\n" % self.PDFcontent.bbox.highrestuple_pt()) if self.PDFcontent.bbox and writer.writebbox: file.write("/CropBox [%f %f %f %f]\n" % self.PDFcontent.bbox.highrestuple_pt()) - file.write("/Resources <<\n" - "/ProcSet [ /PDF %s ]\n" % " ".join(["/%s" % p for p in self.pageregistry.pageprocsets.keys()])) - for pageresource, objects in self.pageregistry.pageresources.items(): - file.write("/%s <<\n%s\n>>\n" % (pageresource, "\n".join(["/%s %i 0 R" % (name, registry.getrefno(object)) - for name, object in objects.items()]))) - file.write(">>\n" - "/Contents %i 0 R\n" % registry.getrefno(self.PDFcontent)) if self.page.rotated: file.write("/Rotate 90\n") + file.write("/Contents %i 0 R\n" % registry.getrefno(self.PDFcontent)) + self.pageregistry.writeResources(file) file.write(">>\n") @@ -264,8 +274,8 @@ class PDFfont(PDFobject): def __init__(self, font, chars, writer, registry): PDFobject.__init__(self, "font", font.name) - registry.pageprocsets["Text"] = 1 - registry.pageresources.setdefault("Font", {})[font.name] = self + registry.addprocset("Text") + registry.addresource("Font", font.name, self) self.fontdescriptor = PDFfontdescriptor(font, chars, writer, registry) registry.add(self.fontdescriptor) -- 2.11.4.GIT