Show
Ignore:
Timestamp:
10/07/05 23:36:57 (19 years ago)
Author:
jerome
Message:

Better heuristic to detect when gs has to be used for parsing

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • pkpgcounter/trunk/pkpgpdls/postscript.py

    r272 r273  
    7171        except OSError, msg :     
    7272            raise pdlparser.PDLParserError, "Problem during analysis of Binary PostScript document : %s" % msg 
     73        self.logdebug("GhostScript said : %s pages" % pagecount)     
    7374        return pagecount * self.copies 
    7475         
     
    7778        self.infile.seek(0) 
    7879        pagecount = 0 
    79         pages = {} 
    80         pages[0] = { "copies" : 1 } 
     80        self.pages = { 0 : { "copies" : 1 } } 
    8181        oldpagenum = None 
    8282        previousline = "" 
     83        notrust = 0 
    8384        for line in self.infile.xreadlines() :  
    84             if line.startswith(r"%%Creator: PScript5.dll") : 
    85                 return 0 # Let this stuff be managed by GhostScript, since nup and copies disturb us. 
     85            if line.startswith(r"%%BeginResource: procset pdf") : 
     86                notrust = 1 # Let this stuff be managed by GhostScript, but we still extract number of copies 
    8687            elif line.startswith(r"%%Page: ") or line.startswith(r"(%%[Page: ") : 
    8788                proceed = 1 
     
    9798                if proceed :         
    9899                    pagecount += 1 
    99                     pages[pagecount] = { "copies" : pages[pagecount-1]["copies"] } 
     100                    self.pages[pagecount] = { "copies" : self.pages[pagecount-1]["copies"] } 
    100101            elif line.startswith(r"%%Requirements: numcopies(") :     
    101102                try : 
     
    104105                    pass 
    105106                else :     
    106                     if number > pages[pagecount]["copies"] : 
    107                         pages[pagecount]["copies"] = number 
     107                    if number > self.pages[pagecount]["copies"] : 
     108                        self.pages[pagecount]["copies"] = number 
    108109            elif line.startswith(r"%%BeginNonPPDFeature: NumCopies ") : 
    109110                # handle # of copies set by some Windows printer driver 
     
    113114                    pass 
    114115                else :     
    115                     if number > pages[pagecount]["copies"] : 
    116                         pages[pagecount]["copies"] = number 
     116                    if number > self.pages[pagecount]["copies"] : 
     117                        self.pages[pagecount]["copies"] = number 
    117118            elif line.startswith("1 dict dup /NumCopies ") : 
    118119                # handle # of copies set by mozilla/kprinter 
     
    122123                    pass 
    123124                else :     
    124                     if number > pages[pagecount]["copies"] : 
    125                         pages[pagecount]["copies"] = number 
     125                    if number > self.pages[pagecount]["copies"] : 
     126                        self.pages[pagecount]["copies"] = number 
    126127            elif line.startswith("/languagelevel where{pop languagelevel}{1}ifelse 2 ge{1 dict dup/NumCopies") : 
    127128                try : 
     
    130131                    pass 
    131132                else : 
    132                     if number > pages[pagecount]["copies"] : 
    133                         pages[pagecount]["copies"] = number 
     133                    if number > self.pages[pagecount]["copies"] : 
     134                        self.pages[pagecount]["copies"] = number 
    134135            previousline = line 
    135136             
    136137        # extract max number of copies to please the ghostscript parser, just     
    137138        # in case we will use it later 
    138         self.copies = max([ v["copies"] for (k, v) in pages.items() ]) 
     139        self.copies = max([ v["copies"] for (k, v) in self.pages.items() ]) 
    139140         
    140141        # now apply the number of copies to each page 
    141142        for pnum in range(1, pagecount + 1) : 
    142             page = pages.get(pnum, pages.get(1, { "copies" : 1 })) 
     143            page = self.pages.get(pnum, self.pages.get(1, { "copies" : 1 })) 
    143144            copies = page["copies"] 
    144145            pagecount += (copies - 1) 
    145146            self.logdebug("%s * page #%s" % (copies, pnum)) 
     147        self.logdebug("Internal parser said : %s pages" % pagecount) 
     148         
     149        if notrust :     
     150            pagecount = 0 # Let gs do counting 
    146151        return pagecount 
    147152         
     
    150155        self.copies = 1 
    151156        return self.natively() or self.throughGhostScript() 
     157             
    152158         
    153159def test() :