Python、pyPdf、Adobe PDF OCR错误:不支持filter/lzwdecod

2024-05-16 17:41:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我的资料:Python2.6 64位(安装了pyPdf-1.13.win32.exe)。机翼侧面。Windows 7 64位。在

我得到了以下错误:

NotImplementedError:不支持筛选器/LZWDecode

当我运行以下代码时:

from pyPdf import PdfFileWriter, PdfFileReader
import sys, os, pyPdf, re

path = 'C:\\Users\\Homer\\Documents\\' # This is where I put my pdfs

filelist = os.listdir(path)

has_text_list = []
does_not_have_text_list = []

for pdf_name in filelist:
    pdf_file_with_directory = os.path.join(path, pdf_name)
    pdf = pyPdf.PdfFileReader(open(pdf_file_with_directory, 'rb'))

    for i in range(0, pdf.getNumPages()):
        content = pdf.getPage(i).extractText() #this is the line what done it
        does_it_have_text = re.findall(r'\w{2,}', content) 
        if does_it_have_text == []:
            does_not_have_text_list.append(pdf_name)
            print pdf_name
        else:
            has_text_list.append(pdf_name)

print does_not_have_text_list

这里有一点背景。路径中充满了PDF。有些是用adobepdf打印机从文本文档中保存下来的(至少我认为他们是这样做的)。有些被扫描成图像。我想把它们和OCR分开,它们是图像的(非图像的是完美的,不应该弄乱)。在

几天前我问过你怎么做:

Batch OCR Program for PDFs

我得到的唯一回应是在VB中,我只会说python。所以我想我应该试着给自己的问题写一个答案。我的策略(反映在上面的代码中)是这样的。如果它只是一个图像,那么正则表达式将返回一个空列表。如果它有文本,正则表达式(表示包含2个或更多字母数字字符的任何单词)将返回一个由u'word(在python中,我认为这是一个unicode字符串)填充的列表。在

所以代码应该可以工作了,我们可以采取第一步,用开源软件完成另一个线程(将ocrd和图像pdf分开),但我不知道如何处理这个过滤器错误,google也没有帮助。所以如果有人知道的话,会很有帮助的。在

我真的不知道怎么用这些东西。我不知道过滤器在pyPdf语言中是什么意思。我认为这是说它不能真正地阅读pdf或其他东西,即使它是ocrd。有趣的是,我把一个非ocrd和一个ocrd pdf作为python文件放在同一个文件夹中,这只适用于没有for循环的一个,所以我不知道为什么用for循环来处理它们会产生filter error。我将发布下面的代码。谢谢。在

^{pr2}$

它会打印一些东西,所以我不知道为什么一个过滤器出错,而另一个却没有。当我对目录中的另一个文件(不是ocrd的文件)运行此代码时,输出的一行是空字符串,下一行是空字符串,如下所示:

[]
[]

所以我也不认为这是非ocrd pdf的过滤器问题。这太难了,我需要一些帮助。在

编辑:

谷歌搜索发现了这个,但我不知道该怎么解释:

http://vaitls.com/treas/pdf/pyPdf/filters.py


Tags: path代码textname图像过滤器forpdf
2条回答

LZW是gif中使用的压缩格式,有时也用于pdf。如果您查看pyPdf.filters中可用的过滤器,您会发现LZW不在那里,因此您发布的NotImplementedError.链接指向subversion存储库中的代码,其中有人实现了LZW过滤器。在

替换pyPdf过滤器.py在pyPdf源文件夹中使用http://vaitls.com/treas/pdf/pyPdf/filters.py。这对我有用。在

相关问题 更多 >