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)