不了解此PdfReadError:找不到EOF标记

时间:2019-07-17 08:08:25

标签: python python-3.x pdf web-scraping pypdf2

我正在下载多个PDF。我有一个URL列表,编写的代码用于下载它们,并全部创建一个大pdf。该代码适用于前144个pdf,然后引发此错误:

PdfReadError:找不到EOF标记

我尝试使所有pdf文件都以%% EOF结尾,但这不起作用-仍然达到同一点,然后再次出现错误。

这是我的代码:

我的文件并转换为python列表以分别读取每个文件

with open('minutelinks.txt', 'r') as file:
    data = file.read() 
links = data.split()

下载pdfs

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个。

3 个答案:

答案 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)