2013-03-28 17 views
0

我是Python新手,正在努力掌握現有腳本。這個例子是從pdfrw給出如下:http://code.google.com/p/pdfrw/wiki/ExampleToolsbbox在這個腳本中指的是什麼?

「一個打印機與一個華麗的打印機和/或一個完整的Acrobat副本可以很容易地把你的小PDF轉換成一個小冊子(例如,打印4個字母大小頁面在一個單一的11「×17」)

但是,假設有幾件事情,包括人員知道如何操作硬件和軟件booklet.py讓你把你的PDF轉換成預格式化的小冊子,給他們更少的機會搞砸了:」

,盡我所能告訴的步驟是:

  • 函數開始循環遍歷頁面
  • 一個變量「shift_right」被聲明做??? (我認爲它是爲元數據?)
  • 一個變量「stuff」被聲明爲僅適用於元數據(我認爲)
  • x被BBox列表的第三個索引遞增(這個列表是什麼,是什麼時候建立的?)
  • y被分配到Y和B-盒列表(再次,這是什麼列表,請參閱?)

我覺得我的核心困惑是關於第三個指標之間的較大值這兩行與BBox,以及他們如何相互作用,以創建一個11x17小冊子PDF。感謝任何能夠澄清這一點的人。

import sys 
    import os 

    import find_pdfrw 
    from pdfrw import PdfReader, PdfWriter, PdfDict, PdfArray, PdfName, IndirectPdfDict 
    from pdfrw.buildxobj import pagexobj 
def fixpage(*pages): 
    pages = [pagexobj(x) for x in pages] 

    class PageStuff(tuple): 
     pass 

    x = y = 0 
    for i, page in enumerate(pages): 
     index = '/P%s' % i 
     shift_right = x and '1 0 0 1 %s 0 cm ' % x or '' 
     stuff = PageStuff((index, page)) 
     stuff.stream = 'q %s%s Do Q\n' % (shift_right, index) 
     x += page.BBox[2] 
     y = max(y, page.BBox[3]) 
     pages[i] = stuff 

    # Multiple copies of first page used as a placeholder to 
    # get blank page on back. 
    for p1, p2 in zip(pages, pages[1:]): 
     if p1[1] is p2[1]: 
      pages.remove(p1) 

    return IndirectPdfDict(
     Type = PdfName.Page, 
     Contents = PdfDict(stream=''.join(page.stream for page in pages)), 
     MediaBox = PdfArray([0, 0, x, y]), 
     Resources = PdfDict(
      XObject = PdfDict(pages), 
     ), 
    ) 

inpfn, = sys.argv[1:] 
outfn = 'booklet.' + os.path.basename(inpfn) 
pages = PdfReader(inpfn).pages 

# Use page1 as a marker to print a blank at the end 
if len(pages) & 1: 
    pages.append(pages[0]) 

bigpages = [] 
while len(pages) > 2: 
    bigpages.append(fixpage(pages.pop(), pages.pop(0))) 
    bigpages.append(fixpage(pages.pop(0), pages.pop())) 

bigpages += pages 

PdfWriter().addpages(bigpages).write(outfn) 

回答

4

Bbox通常是「邊界框」的縮寫:在這種情況下,矩形定義了頁面的尺寸。在這種情況下,它看起來像是一個由4個數字組成的數組,其中前兩個是(0,0)頁面的左上角,第三個是頁面右側的x座標(其中,因爲左側爲0,也是寬度),第四個是頁面的底部/高度。