我正在下载多个PDF。我有一个URL列表,编写的代码用于下载它们,并全部创建一个大pdf。该代码适用于前144个pdf,然后引发此错误:
PdfReadError:找不到EOF标记
我尝试使所有pdf文件都以%% EOF结尾,但这不起作用-仍然达到同一点,然后再次出现错误。
这是我的代码:
with open('minutelinks.txt', 'r') as file:
data = file.read()
links = data.split()
from PyPDF2 import PdfFileMerger
import requests
urls = links
merger = PdfFileMerger()
for url in urls:
response = requests.get(url)
title = url.split("/")[-1]
with open(title, 'wb') as f:
f.write(response.content)
merger.append(title)
merger.write("allminues.pdf")
merger.close()
我希望能够下载所有这些文件并创建一个大pdf文件-似乎会执行该操作直到抛出此错误。我大约有750个pdf文件,但最多只能到144个。
答案 0 :(得分:0)
这就是我更改代码的方式,因此它现在下载所有pdf,并跳过可能被修正的一个(或多个)pdf。我还必须在函数中添加self
参数。
from PyPDF2 import PdfFileMerger
import requests
import sys
urls = links
def download_pdfs(self):
merger = PdfFileMerger()
for url in urls:
try:
response = requests.get(url)
title = url.split("/")[-1]
with open(title, 'wb') as f:
f.write(response.content)
except PdfReadError:
print(title)
sys.exit()
merger.append(title)
merger.write("allminues.pdf")
merger.close()
答案 1 :(得分:0)
我读到 EOF 是一种包含在 PDF 文件中的标签。 link in portuguese
但是,我猜某些类型的 PDF 文件没有“EOF 标记”,而 PyPDF2 无法识别这些文件。
因此,我为修复“PdfReadError:未找到 EOF 标记”所做的工作是使用 Google Chromer 打开我的 PDF 并再次将其打印为 .pdf,以便 Chromer 将文件转换为 .pdf,并希望使用 EOF标记。
我使用 Chromer 转换的新 .pdf 文件运行了我的脚本,并且运行良好。
答案 2 :(得分:0)
文件结束标记 '%%EOF' 应该是最后一行。它是pdf解析器知道的一种标记,即PDF文档到此结束。
我的解决方案是强制这个标记留在最后:
def reset_eof(self, pdf_file):
with open(pdf_file, 'rb') as p:
txt = (p.readlines())
for i, x in enumerate(txt[::-1]):
if b'%%EOF' in x:
actual_line = len(txt)-i-1
break
txtx = txt[:actual_line] + [b'%%EOF']
with open(pdf_file, 'wb') as f:
f.writelines(txtx)
return PyPDF4.PdfFileReader(pdf_file)