当我使用下面的代码时
from PyPDF2 import PdfFileMerger
merge = PdfFileMerger()
for newFile in nlst:
merge.append(newFile)
merge.write("newFile.pdf")
发生了以下情况:
raise utils.PdfReadError("EOF marker not found")
PyPDF2.utils.PdfReadError: EOF marker not found
有人能告诉我发生了什么吗?
6条答案
按热度按时间ztmd8pv51#
在使用
camelot
和PyPDF2
遇到这个问题后,我做了一些挖掘,已经解决了这个问题。文件结束标记
'%%EOF'
应该是最后一行,但是一些PDF文件在这一行之后放了一大块javascript,读者找不到EOF。如果您打开EOF plus javascript,它的外观将是什么样的:
所以你只需要在javascript开始之前截断文件。
溶液:
uxh89sit2#
PDF是一种文件格式,其中PDF解析器通常通过读取位于文件末尾的一些全局信息来开始读取文件。在文档的最末尾需要有一行内容为
%%EOF
这是一个标记,pdf解析器知道PDF文档在此结束,它需要的全局信息应该在此之前(startxref部分)。
我猜想,您看到的错误消息意味着其中一个输入文档被截断,并且缺少%%EOF标记。
2g32fytz3#
这个问题的一个简单的解决方案(EOF标记找不到)。打开您的**.pdf文件在其他应用程序(我用Libre办公室绘制在Ubuntu 18.04)。然后导出文件为.pdf**。使用这个导出的**.pdf**文件的问题将不会持续。
webghufk4#
我也有这个问题,也有解决办法。
首先,python以
'rb'
或'wb'
的二进制读写格式读取PDF。文件结束
当一行的某处有一个左括号,但没有一个匹配的右括号时发生。Python在寻找右括号时到达了文件的末尾。
以下是1个解决方案:
1.使用以下命令关闭之前打开的文件
newfile.close()
1.检查是否使用其他变量打开该pdf,然后再次关闭它
Same_file_with_another_variable.close()
现在只打开一次,使用它,你就可以走了。
webghufk5#
我想在这个问题上加上我的hacky解决方案。
我在python请求(application/pdf)时也遇到了同样的错误。在我的例子中,提供商(一个运输标签服务)确实给予了一个200和一个代表PDF的b '字符串,但在一些随机的情况下,它错过了EOF标记。
因为它是随机的,所以我想出了下面的解决方案:
在几次尝试中,它给出了带有EOF的b字符串,我们可以继续了。
6ovsh4lw6#
PyPDF2无法在加密的PDF中找到EOF标记。
我遇到了同样的错误,而我正在通过(优秀)自动化无聊的东西。第15章,第2版,第355页,项目组合选择页面从许多pdf。
我选择将我在本章中制作的所有PDF文件合并到一个文档中,其中一个是加密的PDF文件,当项目到达加密文档的末尾时失败,并显示错误消息:
PyPDF2.utils.PdfReadError:未找到EOF标记
我将加密文件移到了另一个文件夹(这样它就不会与其他PDF合并,项目运行良好。
因此,似乎PyPDF2无法在加密的PDF中找到EOF标记。