无法成功执行以下脚本

时间:2018-06-24 13:18:07

标签: python python-3.x pdf python-imaging-library

我使用python结合PyPDF2PILpytesseract编写了一个脚本,以从{{1 }}文件。但是,当我尝试以下脚本从the scanned pages文件中从pdf获取内容时,到达包含first scanned page的行时,它将引发以下错误。

到目前为止我尝试过的脚本:

pdf

我遇到错误:

img = Image.open(pdfReader.getPage(0)).convert('L')

如何使它成功进行?

4 个答案:

答案 0 :(得分:5)

您需要先将pdf转换为图像,然后再执行

Python: Extract a page from a pdf as a jpeg

import PyPDF2
import pytesseract
from PIL import Image
from pdf2image import convert_from_path

pdfFileObj = r'C:\Users\WCS\Desktop\Scan project\Scanned.pdf'
pages = convert_from_path(pdfFileObj, 500)

page = pages[0]
page.save('out.png')

img = Image.open('out.png').convert('L')
imagetext = pytesseract.image_to_string(img)
print(imagetext)
pdfFileObj.close()

答案 1 :(得分:3)

您的问题是,您希望PIL读取由PageObject定义的pypdf,这是错误的方式。 您应该将pdf转换为图像格式,然后使用PIL进行阅读。在这种情况下,wand可能是您所需要的。 See its home page。以下是将所有页面以jpg格式保存为pdf的示例:

from wand.image import Image as WImage
with WImage(filename=your_pdf_path, resolution=(300,300)) as imgs:
    imgs.format = 'jpg'
    page_idx = 0
    for img in imgs.sequence:
        WImage(image=img).save(str(page_idx)+'.jpg')

现在,您可能想检查一下上面提到的api,并解决您的问题。

答案 2 :(得分:3)

您无法阅读():

pdfReader.getPage(0)

因为它不是图像。从文档中我们可以得到:


getPage(pageNumber)

从此PDF文件中按编号检索页面。

参数:pageNumber(int)–要检索的页码(页面从零开始)

返回:一个 PageObject 实例。

返回类型:PageObject


因此,要进行处理,您需要阅读此类文档:

extractText()

按照在内容流中提供的顺序查找所有文本绘制命令,然后提取文本。这对于某些PDF文件效果很好,但对其他PDF文件效果不佳,具体取决于所使用的生成器。将来会对此进行完善。不要依赖此功能产生的文本顺序,因为如果此功能变得更复杂,它将改变。

返回:Unicode字符串对象。

PageObject Doc


总结

pdfFileObj = open(r'C:\Users\WCS\Desktop\Scan project\Scanned.pdf', 'rb')

pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
txt = (pdfReader.getPage(0)).extractText()

pdfFileObj.close()

print(txt)

如果您想要一张照片,那么不正确地看一下@TarunLalwani响应,这会更准确。

答案 3 :(得分:1)

img = Image.open(pdfReader.getPage(0), 'r').convert('L')