1

我一直在使用 Python,并且正在导入 PyPDF2 模块。我实际上已经想出了如何解决我的问题,但我想知道为什么我以前的代码不起作用。

这是旧代码:

from PyPDF2 import PdfFileMerger as merger, PdfFileReader 

def MakeOne(filesList):


    for file in filesList:
        merger().append((file))
    merger().write("AllInOne.pdf")

    print("File AllInOne.pdf has been created")

这是现在可以工作的当前代码。

from PyPDF2 import PdfFileMerger, PdfFileReader
def MakeOne(filesList):

    merger = PdfFileMerger()
    for file in filesList:
        merger.append((file))

    merger.write("AllInOne.pdf")

    print("File AllInOne.pdf has been created")

第一段代码没有使控制台崩溃——事实上它确实创建了一个文件。唯一的问题是它创建的文件无法打开,只有 1 KB 大。第二段代码类似于有多少人在 StackOverflow 中使用过这个模块,并且运行良好。我的问题是:为什么第一段代码没有为我提供预期的结果,因为我在导入 PdfFileMerger 作为合并后似乎正确地使用了“合并”?

感谢您提供的任何帮助!

4

1 回答 1

1

正如前面的评论所指出的,每次您调用 时merger(),您都在创建一个新PdfFileMerger对象。因此,当您调用 时merger().write("AllInOne.pdf"),您正在编写一个没有附加文件的 PDF。

当您使用 时import <module> as,您正在为导入的模块“别名化”。因此,您的第一个代码块与以下内容完全相同:

from PyPDF2 import PdfFileMerger, PdfFileReader 

def MakeOne(filesList):


    for file in filesList:
        PdfFileMerger().append((file))
    PdfFileMerger().write("AllInOne.pdf")

    print("File AllInOne.pdf has been created")
于 2017-05-06T00:11:25.763 回答