PyPDF2 - 合并来自两个不同 PDF 文件的页面不起作用

PyPDF2 - merging pages from two different PDF files is not working

我正在尝试将两个 PDF 文件的页面合并为一个只有一个页面的 PDF。所以我尝试了下面使用 PyPDF2 的代码:

from PyPDF2 import PdfFileReader,PdfFileWriter
import sys
f = sys.argv[1]
k = sys.argv[2]
print f,k
file1 = PdfFileReader(file(f, "rb"))
file2 = PdfFileReader(file(k, "rb"))
output = PdfFileWriter()
page = file1.getPage(0)
page.mergePage(file2.getPage(0))
output.addPage(page)
outputStream = file("join.pdf", "wb")
output.write(outputStream)
outputStream.close()

它生成一个文件和一个页面,其中包含文件 1 中第 1 页的内容,但我没有从 file2 的第 1 页中找到任何数据。好像没合并。

在使用您完全相同的代码时,我能够在一页中合并 PDF 两个 PDF,其中第二个与第一个重叠,我引用了这个 link获取详细信息。

而且,根据这个 Python Documentation,最好使用 open() 而不是 file(),所以我这样做了。

此外,我对您的代码进行了细微的更改,但在我的机器上仍然可以正常工作。我正在使用 Ubuntu 16.04python 2.7.

代码如下:

from PyPDF2 import PdfFileReader,PdfFileWriter
import sys

f = sys.argv[1]
k = sys.argv[2]
print f, k
file1 = PdfFileReader(open(f, "rb"))
file2 = PdfFileReader(open(k, "rb"))
output = PdfFileWriter()
page = file1.getPage(0)
page.mergePage(file2.getPage(0))
output.addPage(page)

with open("join.pdf", "wb") as outputStream:
    output.write(outputStream)

希望对您有所帮助。


更新:

这是对我有用的代码,它将两个 pdf 页面合并为一个页面。

from pyPdf import PdfFileWriter, PdfFileReader
from pdfnup import generateNup

initial_output = PdfFileWriter()
input1 = PdfFileReader(open("landscape1.pdf", "rb"))
input2 = PdfFileReader(open("landscape2.pdf", "rb"))

initial_output.addPage(input1.getPage(0))
initial_output.addPage(input2.getPage(0))

# creates a new pdf file with required pages as separate pages.
initial_output.write(file("final.pdf", "wb"))

# merges newly created pdf file pages as one.
generateNup("final.pdf", 2, "intermediate.pdf")

# overwrite and rotates the final.pdf
final_output = PdfFileWriter()
final_output.addPage(PdfFileReader(open("intermediate.pdf", "rb")).getPage(0).rotateClockwise(90)) 
final_output.write(open("final.pdf", "wb"))

我添加了一个新代码,现在它也在旋转最终的 pdf。您需要的输出 PDF 是 final.pdf

这里是 Google Drive link 到我的 PDF 文件的驱动器。此外,我对 pdfnup.py 进行了细微改动,以便与我的 Immutableset 系统兼容,如果你想使用相同的文件,你也可以在上面的驱动器 link 中找到它。

def merge_page(self, output_pdf,*input_pdfs):
    a=len(input_pdfs)
    print (a)
    merge = PyPDF2.PdfFileMerger()
    outputStream = open(output_pdf, "wb")
    if a<2:
        raise Exception ("Need Atleast Two Pdf for Merging")

    else:
        for x in input_pdfs:
            merge.append(open(x,"rb"))
        merge.write(outputStream)
    outputStream.close()

对我来说,这段代码在 PyCharm 中有效,它可以将 n 个 pdf 文件合并到单个 pdf 文件中,但 no 应该小于 2 个或更多,否则会出错。