PyPdf2无法添加多个裁剪页面

问题描述 投票:1回答:1

我想在新的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()
python pdf pypdf2
1个回答
1
投票

您需要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()
© www.soinside.com 2019 - 2024. All rights reserved.