python - 将 PDF 转换为文本:“不允许提取文本”
问题描述
我正在尝试将 PDF 转换为 Python 中的文本。但这给了我一个错误:
PDFTextExtractionNotAllowed:不允许提取文本:<_io.BufferedReader name='C:\Users\Downloads\Facts_for_2017.pdf'>
我正在使用的代码是:
import sys
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
from pdfminer.converter import XMLConverter, HTMLConverter, TextConverter
from pdfminer.layout import LAParams
import io
def pdfparser(data):
fp = open(data, 'rb')
rsrcmgr = PDFResourceManager()
retstr = io.StringIO()
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)
for page in PDFPage.get_pages(fp):
interpreter.process_page(page)
data = retstr.getvalue()
return data
if __name__ == '__main__':
text = pdfparser(Input_path)
谁能帮我?
文件路径为:
https://drive.google.com/file/d/1RyR-J-EwMywL6BqsYbl4Ocm96VzCYrM7/view?usp=sharing
解决方案
问题是PDFPage.get_pages()
检查文本是否按惯例可提取。您必须设置标志以check_extractable=False
使其工作。此外,如果您尝试转换为 txt 的 PDF 受密码保护,您也可以在此处进行更改。不幸的是,PDFPage
的文档对此不是很清楚。
password = ""
for page in PDFPage.get_pages(fp, check_extractable=False, password=password):
interpreter.process_page(page)
data = retstr.getvalue()
您的整个代码如下所示:
import io
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfinterp import PDFPageInterpreter, PDFResourceManager
from pdfminer.pdfpage import PDFPage
def pdfparser(data):
rsrcmgr = PDFResourceManager()
retstr = io.StringIO()
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)
password = ""
maxpages = 0
caching = True
pagenos = set()
with open(data, 'rb') as fp:
for page in PDFPage.get_pages(fp,
pagenos,
maxpages=maxpages,
password=password,
caching=caching,
check_extractable=False):
interpreter.process_page(page)
# As pointed out in another answer, this goes outside the loop
text = retstr.getvalue()
device.close()
retstr.close()
return text
注意:Python 的with open ...:
模式实现对于正确处理文件对象很有用。
推荐阅读
- ros - 为 gmapping 包订阅新主题时出错
- excel - Excel VBA:复制公式
- grails - Grails No thread-bound request found 错误?
- python - 在 python tkinter 的 GUI 中完成视频后,如何打开另一个 GUI 窗口?
- javascript - 无法在 PHP 中调用 jQuery 类
- firebase - 使用用户 ID Flutter Firestore 获取用户详细信息
- mongodb - MongoDB将过滤器与分组匹配并获取总数
- c++ - 在函数上调用 std::move 时会做什么?
- django - 无法在查询集/下拉列表中更改距离,没有错误
- docker - azure-aks docker 容器 python-django url 不起作用