PyPdf2无法添加多个裁剪页面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyPdf2无法添加多个裁剪页面相关的知识,希望对你有一定的参考价值。

我想在新的pdf文件中添加多个裁剪框作为新页面。由于下面的代码,我得到了新的正确数量的页面,但这是问题。最后一页覆盖PDF文件中的每一页。

有什么建议吗?

from PyPDF2 import PdfFileWriter, PdfFileReader

output = PdfFileWriter()
input1 = PdfFileReader(open("1.pdf", "rb"))
outputStream = open("output.pdf", "wb")

page = input1.getPage(0)

page.mediaBox.lowerRight = (205+(0*185), 612)
page.mediaBox.upperLeft = (20+(0*185), 752)
output.addPage(page)
output.write(outputStream)

page.mediaBox.lowerRight = (205+(1*185), 612)
page.mediaBox.upperLeft = (20+(1*185), 752)
output.addPage(page)
output.write(outputStream)

page.mediaBox.lowerRight = (205+(2*185), 612)
page.mediaBox.upperLeft = (20+(2*185), 752)
output.addPage(page)
output.write(outputStream)


outputStream.close()
答案

您需要copy模块才能复制页面对象。 in the docs有一个解释:

Python中的赋值语句不复制对象,它们在目标和对象之间创建绑定。对于可变或包含可变项的集合,有时需要一个副本,因此可以更改一个副本而不更改另一个副本。该模块提供了通用的浅层和深层复制操作(如下所述)。

所以你的代码应该是这样的:

from PyPDF2 import PdfFileWriter, PdfFileReader
from copy import copy

output = PdfFileWriter()
input1 = PdfFileReader(open("1.pdf", "rb"))
outputStream = open("output.pdf", "wb")

page = input1.getPage(0)

x = copy(page)
y = copy(page)
z = copy(page)

x.mediaBox.lowerRight = (205 + (0 * 185), 612)
x.mediaBox.upperLeft = (20 + (0 * 185), 752)
output.addPage(x)

y.mediaBox.lowerRight = (205 + (1 * 185), 612)
y.mediaBox.upperLeft = (20 + (1 * 185), 752)
output.addPage(y)

z.mediaBox.lowerRight = (205 + (2 * 185), 612)
z.mediaBox.upperLeft = (20 + (2 * 185), 752)
output.addPage(z)

output.write(outputStream)
outputStream.close()

以上是关于PyPdf2无法添加多个裁剪页面的主要内容,如果未能解决你的问题,请参考以下文章

使用 PyPDF2 合并多个 pdf 文档中的页面

PDF分割?有了这把魔法剪,PDF任你裁剪(PyPDF2)-

PDF分割?有了这把魔法剪,PDF任你裁剪(PyPDF2)-

PDF分割?有了这把魔法剪,PDF任你裁剪(PyPDF2)-

Python之PyPDF2模块的使用

使用 pypdf2 和电子邮件合并多个 PDf