我正在努力掌握现有的Python脚本。这个例子来自pdfrw,如下所示:http://code.google.com/p/pdfrw/wiki/ExampleTools
“一台打印机配有一台精美的打印机和/或Acrobat的完整副本,可以轻松地将您的小PDF转换成小册子(例如,在一张11英寸x 17英寸的单张纸上打印4张字母大小的页面)。在
但这需要考虑几个因素,包括人员知道如何操作硬件和软件。小册子.py您可以将您的PDF转换为预先格式化的小册子,以减少他们弄乱的机会:“
我能告诉你的最好步骤是:
我想我的核心困惑是关于这两行与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)
Bbox通常是“边界框”的缩写:在本例中,是定义页面尺寸的矩形。在本例中,它看起来像是一个由4个数字组成的数组,其中前两个数字是页面左上角的(0,0),第三个是页面右侧的x坐标(因为左边是0,所以也是宽度),第四个是页面的底部/高度。在
相关问题 更多 >
编程相关推荐