如何在Python中将两个PDF页面拼接成一个?

5

我正在使用Python,想要将两个PDF页面合并成一个单页。我的目的是将这两个页面合并为一个,而不是两个PDF文件。有没有一种方法可以逐个合并这两个PDF页面呢?我不想将它们合并在一起。是否有一种不重叠的方式将它们合并在一起?


你看到那个主题了吗?它给你一些解决方案的启示了吗? - AvyWam
根据我的经验,我可能会使用Python将它们转换为图像,然后在Inkscape中合并它们,最后导出为PDF文件。 - Harry
3个回答

7

如果我理解正确,您想以以下方式拼接两个页面:

---------
|   |   |
| 1 | 2 |
|   |   |
---------

pyPDF3模块允许您实现此功能。

from PyPDF3 import PdfFileWriter, PdfFileReader
from PyPDF3.pdf import PageObject

pdf_filenames = ["out_mitry.pdf", "out_cdg.pdf"]

input1 = PdfFileReader(open(pdf_filenames[0], "rb"), strict=False)
input2 = PdfFileReader(open(pdf_filenames[1], "rb"), strict=False)

page1 = input1.getPage(0)
page2 = input2.getPage(0)

total_width = page1.mediaBox.upperRight[0] + page2.mediaBox.upperRight[0]
total_height = max([page1.mediaBox.upperRight[1], page2.mediaBox.upperRight[1]])

new_page = PageObject.createBlankPage(None, total_width, total_height)

# Add first page at the 0,0 position
new_page.mergePage(page1)
# Add second page with moving along the axis x
new_page.mergeTranslatedPage(page2, page1.mediaBox.upperRight[0], 0)

output = PdfFileWriter()
output.addPage(new_page)
output.write(open("result.pdf", "wb"))

1
PyPDF版本3.16已经更新了方法,因此需要更新@Alexander Nikitin提供的答案。
from pypdf import PdfWriter, PdfReader, PageObject

pdf_filenames = ["out_mitry.pdf", "out_cdg.pdf"]

input1 = PdfReader(open(pdf_filenames[0], "rb"), strict=False)
input2 = PdfReader(open(pdf_filenames[1], "rb"), strict=False)

page1 = input1.getPage(0)
page2 = input2.getPage(0)

total_width = page1.mediabox.right + page2.mediabox.right
total_height = max([page1.mediabox.top, page2.mediabox.top])

new_page = PageObject.create_blank_page(None, total_width, total_height)

# Add first page at the 0,0 position
new_page.merge_page(page1)
# Add second page with moving along the axis x
new_page.merge_translated_page(page2, page1.mediabox.right, 0)

output = PdfWriter()
output.add_page(new_page)
output.write(open("result.pdf", "wb"))

0

使用模块PyPDF2https://pypi.org/project/PyPDF2/)。

示例:

from PyPDF2 import PdfFileMerger
pdf_list = ['/path/to/first.pdf', '/path/to/second.pdf']
merger = PdfFileMerger()

for i in pdf_list:
    merger.append(open(i, 'rb'))

with open('/path/to/save/new.pdf', 'wb') as fout:
    merger.write(fout)

1
我只有一个PDF文件。我需要将单个PDF的两个页面合并成一页。 - tins johny
你的意思是将两页PDF合并成一页吗?!我能想到的一个原因是如果你有一张空白页的话。虽然我没有尝试过,但我认为你可以使用“from io import BytesIO”读取PDF内容,将其附加到列表中,然后使用“PdfWriter()”写入字节来合并内容。 - lalam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接