6

我正在使用 Python 3.8.5。我正在尝试编写一个连接 PDF 文件的简短脚本,并从这个 Stack Overflow 问题中学习,我正在尝试使用PyPDF2。不幸的是,我似乎无法在PyPDF2.PdfFileReader不崩溃的情况下创建实例。

我的代码如下所示:

import pathlib
import PyPDF2

pdf_path = pathlib.Path('1.pdf')
with pdf_path.open('rb') as pdf_file:
    reader = PyPDF2.PdfFileReader(pdf_file, strict=False)

当我尝试运行它时,我得到以下回溯:

Traceback (most recent call last):
  File "C:\...\pdf\open_pdf.py", line 6, in <module>
    reader = PyPDF2.PdfFileReader(pdf_file, strict=False)
  File "C:\...\.virtualenvs\pdf-j0HnXL2B\lib\site-packages\PyPDF2\pdf.py", line 1084, in __init__
    self.read(stream)
  File "C:\...\.virtualenvs\pdf-j0HnXL2B\lib\site-packages\PyPDF2\pdf.py", line 1883, in read
    stream.seek(-11, 1)
OSError: [Errno 22] Invalid argument

为了帮助重现该问题,我使用上述代码和示例 PDF 文件创建了这个 GitHub存储库。

我究竟做错了什么?

4

3 回答 3

2

您的文件似乎1.pdf无法通过验证,请在此处检查:https ://www.pdf-online.com/osa/validate.aspx

我尝试使用另一个 1.7 版的 pdf 文件并且它有效,所以它不是关于 pdf 版本,你只是有一个糟糕的 1.pdf 文件

于 2020-09-26T14:37:11.603 回答
2

您可以使用PyMuPDF完成此操作(安装 - 至少在 Windows 上 - 使用pip install pymupdf)。连接文件的基本模式是:

import fitz

doc1 = fitz.Document('filename1.pdf')
doc2 = fitz.Document('filename2.pdf')

combined = fitz.Document()  # empty document
combined.insertPDF(doc1)
combined.insertPDF(doc2)
combined.save('combinedfile.pdf')

我用你的文件进行了测试,它确实发出了关于 PDF 中无效交叉引用结构的警告,但会起作用。(它创建的文件是有效的 PDF-1.4)

于 2020-10-11T00:28:29.303 回答
-1

代码很好,但是您需要减小 pdf 大小,因为它太大而无法处理,一种虚拟的方法是打开 pdf 文件并按打印,在打印机选择中使用 Microsoft print pdf 并使用此文件,它不应该影响文件质量

于 2020-09-26T14:37:06.747 回答