使用PyPDF2为pdf页面添加边距

时间:2014-10-05 15:47:41

标签: python pdf printing formatting margin

我正在创建一个python脚本,可以修改要在书籍部分打印的pdf文件。由于ubuntu打印设置中没有此类功能。

PyPDF2是一个很棒的工具,除了增加余量之外,我能够做到我想做的一切。

例如,考虑一下这本书 http://www.edwardothorp.com/sitebuildercontent/sitebuilderfiles/beatthemarket.pdf 它需要一些余量,以便在书中有一些空间来绑定它们。 我已经找到了如何将内容移动几个像素,但是"画布"的尺寸。没有改变,所以有些内容被切断了。

我可以调整"页面大小"与PyPDF2通过改变媒体盒大小,但我只裁剪页面,我不能增加他们的大小。 为了增加利润,我必须增加规模。 我也无法缩小内容,因为出于某种原因,页面大小随之缩小。

如果您想要打印书籍,这是脚本。 http://pastebin.com/LGYhKYu1 当然,它只适用于已经有一些边距的pdf,所以你只需要移动内容。

如果有人能指出如何使用PyPDF2向pdf添加边距,我将非常感激,我必须忽视一些事情。

谢谢!

2 个答案:

答案 0 :(得分:5)

似乎没有专用方法,但您可以创建所需大小的空白页面,然后将您的内容与空白页面合并

page = PageObject.createBlankPage(
        yourPage.mediaBox.getWidth () + 2 * margin,  
        yourPage.mediaBox.getHeight() + 2 * margin)
page.mergeScaledTranslatedPage( yourPage, scale, leftMargin, bottomMargin)    
...
output = PdfFileWriter()
output.addPage(page)

答案 1 :(得分:0)

我本人正试图弄清这一点。我的目标是裁剪B5页面的内容并适合小册子使用

bind_margin = 60
for pnum in tqdm(range(numpage)):
    page = inpdf.getPage(pnum)

    # Trim margins from right and left
    page.trimBox.lowerLeft = tuple([a+b for a, b in zip(page.trimBox.lowerLeft, (50, 0))])
    page.trimBox.upperRight = tuple([a-b for a, b in zip(page.trimBox.upperRight, (50, 0))])
    page.cropBox.lowerLeft = tuple([a+b for a, b in zip(page.cropBox.lowerLeft, (50, 0))])
    page.cropBox.upperRight = tuple([a-b for a, b in zip(page.cropBox.upperRight, (50, 0))])

    # create empty A4 size page
    emptyPage = pdf.PageObject.createBlankPage(width=tarw, height=tarh)
    margin_available = tarw + page.mediaBox.lowerLeft[0] - page.mediaBox.upperRight[0]

    if pnum%2==0:
            tx = bind_margin
    else:
            tx = margin_available - bind_margin

    emptyPage.mergeTranslatedPage(page, tx, 180)

    outpdf.addPage(emptyPage)