Show
Ignore:
Timestamp:
08/20/05 17:56:22 (19 years ago)
Author:
jerome
Message:

Fixed PCLXL computation of number of copies for each page.
Now uses a similar routine in the PostScript? parser.
Added detection of a special number of copies setting for some PS drivers.

Files:
1 modified

Legend:

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

    r237 r248  
    7979        self.infile.seek(0) 
    8080        pagecount = 0 
     81        pages = {} 
     82        pages[0] = { "copies" : 1 } 
    8183        for line in self.infile.xreadlines() :  
    8284            if line.startswith(r"%%Page: ") : 
    8385                pagecount += 1 
     86                pages[pagecount] = { "copies" : 1 } 
    8487            elif line.startswith(r"%%Requirements: numcopies(") :     
    8588                try : 
     
    8891                    pass 
    8992                else :     
    90                     if number > self.copies : 
    91                         self.copies = number 
     93                    if number > pages[pagecount]["copies"] : 
     94                        pages[pagecount]["copies"] = number 
    9295            elif line.startswith(r"%%BeginNonPPDFeature: NumCopies ") : 
    9396                # handle # of copies set by some Windows printer driver 
     
    97100                    pass 
    98101                else :     
    99                     if number > self.copies : 
    100                         self.copies = number 
     102                    if number > pages[pagecount]["copies"] : 
     103                        pages[pagecount]["copies"] = number 
    101104            elif line.startswith("1 dict dup /NumCopies ") : 
    102105                # handle # of copies set by mozilla/kprinter 
     
    106109                    pass 
    107110                else :     
    108                     if number > self.copies : 
    109                         self.copies = number 
    110         return pagecount * self.copies 
     111                    if number > pages[pagecount]["copies"] : 
     112                        pages[pagecount]["copies"] = number 
     113            elif line.startswith("/languagelevel where{pop languagelevel}{1}ifelse 2 ge{1 dict dup/NumCopies") : 
     114                try : 
     115                    number = int(previousline.strip()[2:]) 
     116                except : 
     117                    pass 
     118                else : 
     119                    if number > pages[pagecount]["copies"] : 
     120                        pages[pagecount]["copies"] = number 
     121            previousline = line 
     122             
     123        # extract max number of copies to please the ghostscript parser, just     
     124        # in case we will use it later 
     125        self.copies = max([ v["copies"] for (k, v) in pages.items() ]) 
     126         
     127        # now apply the number of copies to each page 
     128        for pnum in range(1, pagecount + 1) : 
     129            page = pages.get(pnum, pages.get(1, { "copies" : 1 })) 
     130            copies = page["copies"] 
     131            pagecount += (copies - 1) 
     132            if self.debug : 
     133                sys.stderr.write("%s * page #%s\n" % (copies, pnum)) 
     134        return pagecount 
    111135         
    112136    def getJobSize(self) :