Changeset 736

Show
Ignore:
Timestamp:
06/06/06 10:11:40 (2 years ago)
Author:
mfenniak
Message:

Apply Bradley Lawrence's patch for multiple cross reference tables found in some very odd PDF files. Test library works.

Files:

Legend:

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

    r734 r736  
    356356                readNonWhitespace(stream) 
    357357                stream.seek(-1, 1) 
    358                 num = readObject(stream, self) 
    359                 readNonWhitespace(stream) 
    360                 stream.seek(-1, 1) 
    361                 size = readObject(stream, self) 
    362                 readNonWhitespace(stream) 
    363                 stream.seek(-1, 1) 
    364                 cnt = 0 
    365                 while cnt < size: 
    366                     line = stream.read(20) 
    367                     offset, generation = line[:16].split(" ") 
    368                     offset, generation = int(offset), int(generation) 
    369                     if not self.xref.has_key(generation): 
    370                         self.xref[generation] = {} 
    371                     self.xref[generation][num] = offset 
    372                     cnt += 1 
    373                     num += 1 
    374                 readNonWhitespace(stream) 
    375                 stream.seek(-1, 1) 
    376                 assert stream.read(7) == "trailer" 
     358                while 1: 
     359                    num = readObject(stream, self) 
     360                    readNonWhitespace(stream) 
     361                    stream.seek(-1, 1) 
     362                    size = readObject(stream, self) 
     363                    readNonWhitespace(stream) 
     364                    stream.seek(-1, 1) 
     365                    cnt = 0 
     366                    while cnt < size: 
     367                        line = stream.read(20) 
     368                        offset, generation = line[:16].split(" ") 
     369                        offset, generation = int(offset), int(generation) 
     370                        if not self.xref.has_key(generation): 
     371                            self.xref[generation] = {} 
     372                        if self.xref[generation].has_key(num): 
     373                            "It really seems like we should allow the last" 
     374                            "xref table in the file to override previous" 
     375                            "ones. Since we read the file backwards, assume" 
     376                            "any existing key is already set correctly." 
     377                            pass 
     378                        else: 
     379                            self.xref[generation][num] = offset 
     380                        cnt += 1 
     381                        num += 1 
     382                    readNonWhitespace(stream) 
     383                    stream.seek(-1, 1) 
     384                    trailertag = stream.read(7) 
     385                    if trailertag != "trailer": 
     386                        "more xrefs!" 
     387                        stream.seek(-7, 1) 
     388                    else: 
     389                        break 
    377390                readNonWhitespace(stream) 
    378391                stream.seek(-1, 1)