Changeset 727

Show
Ignore:
Timestamp:
01/30/06 10:03:31 (3 years ago)
Author:
mfenniak
Message:

Add PageObject?.compressContentStreams function to reduce the size of pages.

Files:

Legend:

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

    r724 r727  
    7575        return data 
    7676    decode = staticmethod(decode) 
     77 
     78    def encode(data): 
     79        return zlib.compress(data) 
     80    encode = staticmethod(encode) 
    7781 
    7882class ASCIIHexDecode(object): 
  • pypdf/trunk/pyPdf/generic.py

    r725 r727  
    396396    initializeFromDictionary = staticmethod(initializeFromDictionary) 
    397397 
     398    def flateEncode(self): 
     399        if self.has_key("/Filter"): 
     400            f = self["/Filter"] 
     401            if isinstance(f, ArrayObject): 
     402                f.insert(0, NameObject("/FlateDecode")) 
     403            else: 
     404                newf = ArrayObject() 
     405                newf.append(NameObject("/FlateDecode")) 
     406                newf.append(f) 
     407                f = newf 
     408        else: 
     409            f = NameObject("/FlateDecode") 
     410        retval = EncodedStreamObject() 
     411        retval[NameObject("/Filter")] = f 
     412        retval._data = filters.FlateDecode.encode(self._data) 
     413        return retval 
     414 
    398415 
    399416class DecodedStreamObject(StreamObject): 
  • pypdf/trunk/pyPdf/pdf.py

    r726 r727  
    591591        self[NameObject('/Resources')] = newResources 
    592592 
     593    def compressContentStreams(self): 
     594        """ 
     595        Join all content streams and apply a FlateDecode filter to decrease 
     596        the stream's size. 
     597 
     598        Stability: Added in v1.6, will exist for all v1.x releases thereafter. 
     599        However, if content stream compression is ever handled in a different 
     600        and/or more transparent way, this function may not do anything. 
     601        """ 
     602        content = self["/Contents"].getObject() 
     603        if not isinstance(content, ContentStream): 
     604            content = ContentStream(content) 
     605        self[NameObject("/Contents")] = content.flateEncode() 
     606 
     607 
    593608addRectangleAccessor(PageObject, "mediaBox", "/MediaBox", (), 
    594609        """A rectangle, expressed in default user space units, defining the 
     
    703718    page1.mergePage(input3.getPage(0)) 
    704719 
     720    page1.compressContentStreams() 
     721 
    705722    output.addPage(page1) 
    706723    output.write(file("test\\merge-test.pdf", "wb"))