0

我只是尝试使用 python 合并一些 PDF 文件,更具体地说是 PyPDF2。很容易,但由于某种原因我得到一个错误,这根本不明白。

在寻找解决方案时,我发现其他人也有这个问题。但是,没有发布对我来说令人满意的解决方案。

我用于合并文件的代码:

from PyPDF2 import PdfFileMerger

def merge(self, work_files, destination_file):
    pdf_merger = PdfFileMerger()

    for pdf in work_files:
        pdf_merger.append(pdf)
        #also tried the following with the same results:
        #with open(pdf, 'wb') as fileobj:
            #merger.append(fileobj)

    with open(destination_file, 'wb') as fileobj:
      pdf_merger.write(fileobj)

而是work_files要合并的pdf的路径列表,并且destination_file是合并的pdf应该保存的文件。

这会产生以下错误(根据要求提供完整的堆栈跟踪):

Traceback (most recent call last):
      File "main.py", line 9, in <module>
         merger.append(fileobj)
      File "/home/user/.local/lib/python3.8/sitepackages/PyPDF2/merger.py",line 203, 
      in append
         self.merge(len(self.pages), fileobj, bookmark, pages, 
      import_bookmarks)
      File "/home/user/.local/lib/python3.8/site- 
      packages/PyPDF2/merger.py",
      line 133, in merge
         pdfr = PdfFileReader(fileobj, strict=self.strict)
      File "/home/user/.local/lib/python3.8/site- 
      packages/PyPDF2/pdf.py", line 1084, 
      in __init__
         self.read(stream)
      File "/home/user/.local/lib/python3.8/site 
      packages/PyPDF2/pdf.py", line 1689, 
      in read
         stream.seek(-1, 2)
    OSError: [Errno 22] Invalid argument

我尝试了不同的输入路径的方法,我尝试了相对路径、绝对路径以及将它们解析到另一个文件中,但没有任何成功。

我正在使用 python 3.8 并使用 Linux Ubuntu 20.04。

如果有任何帮助,我将不胜感激。

4

2 回答 2

0

如果 work_files 只是路径列表,则意味着您只是将字符串作为输入传递给 append 方法,一次一个。根据PdfFileMerger文档,您需要将文件对象作为输入传递给 append 方法。

fileobj – 一个文件对象或支持类似于文件对象的标准读取和查找方法的对象。也可以是表示 PDF 文件路径的字符串

抱歉,我忽略了文档的最后一部分,但您实际上是否尝试过传递文件对象?也可以尝试使用 glob.glob(*.pdf) 方法获取文件名。如果您可以发布错误的完整堆栈跟踪,那也会很有帮助。

于 2020-05-27T22:19:59.517 回答
0

在尝试了其他合并PDF文件的方法后,我尴尬地意识到,我的测试文件实际上是损坏的文件,系统甚至无法读取 - 问题解决了。

于 2020-05-28T13:06:40.580 回答