Changeset 686

Show
Ignore:
Timestamp:
01/18/06 08:01:34 (3 years ago)
Author:
laotzu
Message:

Add new PDF capability, inheriting attributes from pagetree nodes for pages. New library capability: rotating pages.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • pypdf/trunk/pyPdf/pdf.py

    r674 r686  
    173173        return self.flattenedPages[pageNumber] 
    174174 
    175     def flatten(self, pages = None): 
     175    def flatten(self, pages = None, inherit = None): 
     176        inheritablePageAttributes = ( 
     177            NameObject("/Resources"), NameObject("/MediaBox"), 
     178            NameObject("/CropBox"), NameObject("/Rotate") 
     179            ) 
     180        if inherit == None: 
     181            inherit = dict() 
    176182        if pages == None: 
    177183            self.flattenedPages = [] 
     
    182188        t = pages["/Type"] 
    183189        if t == "/Pages": 
     190            for attr in inheritablePageAttributes: 
     191                if pages.has_key(attr): 
     192                    inherit[attr] = t[attr] 
    184193            for page in pages["/Kids"]: 
    185                 self.flatten(page
     194                self.flatten(page, inherit
    186195        elif t == "/Page": 
    187             self.flattenedPages.append(pages) 
     196            for attr,value in inherit.items(): 
     197                # if the page has it's own value, it does not inherit the 
     198                # parent's value: 
     199                if not pages.has_key(attr): 
     200                    pages[attr] = value 
     201            pageObj = PageObject() 
     202            pageObj.update(pages) 
     203            self.flattenedPages.append(pageObj) 
    188204 
    189205    def getObject(self, indirectReference): 
     
    560576 
    561577 
     578class PageObject(DictionaryObject): 
     579    def rotateClockwise(self, angle): 
     580        assert angle % 90 == 0 
     581        self.__rotate(angle) 
     582        return self 
     583 
     584    def rotateCounterClockwise(self, angle): 
     585        assert angle %90 == 0 
     586        self.__rotate(-angle) 
     587        return self 
     588 
     589    def __rotate(self, angle): 
     590        currentAngle = self.get("/Rotate", 0) 
     591        self[NameObject("/Rotate")] = NumberObject(currentAngle + angle) 
     592 
     593 
    562594def readUntilWhitespace(stream): 
    563595    txt = "" 
     
    576608 
    577609 
     610if __name__ == "__main__": 
     611    input = PdfFileReader(file("cc-cc.pdf", "rb")) 
     612    output = PdfFileWriter() 
     613    output.addPage(input.getPage(0).rotateClockwise(90)) 
     614    output.write(file("cc-cc-test.pdf", "wb"))