python - 如何使用 Python 从 pdf 中提取文本?
问题描述
def extract_pdf(pdf_path):
with open(pdf_path, 'rb') as fh:
# iterate over all pages of PDF document
for page in PDFPage.get_pages(fh, caching=True, check_extractable=True):
# creating a resoure manager
resource_manager = PDFResourceManager()
# create a file handle
fake_file_handle = StringIO()
# creating a text converter object
converter = TextConverter(
resource_manager,
fake_file_handle,
codec='utf-8',
laparams=LAParams()
)
# creating a page interpreter
page_interpreter = PDFPageInterpreter(
resource_manager,
converter
)
# process current page
page_interpreter.process_page(page)
# extract text
text = fake_file_handle.getvalue()
yield text
# close open handles
converter.close()
fake_file_handle.close()
text = ''
for page in extract_pdf('Path of the PDF Document'):
text += page
通过这段代码,我能够提取许多 PDF 文档。但是当我在互联网上的其他随机 PDF 上对其进行测试时,它开始波动,然后提取的文本不作为输出存在。当我检查文本的类型时,它显示<class 'str'>
.
有人可以纠正我在编写此代码时忽略的任何此类错误吗?
解决方案
import PyPDF2
o = open('example.pdf', 'rb')
r = PyPDF2.PdfFileReader(o)
for page in range(r.numPages):
Obj = r.getPage(page)
print Obj.extractText()
推荐阅读
- azure - 本地服务器不通过 openVpn ping 客户端
- python - ValueError:注销未返回 HttpResponse 对象。它返回 None 而不是
- bash - 你能枚举一个子串在bash中共现的所有位置吗
- javascript - HTML 语音识别中的 if then 语句
- ios - 对于 iOS 12 或更高版本的显示通知(通过 APNS 发送)
- python - 在我们运行 for 循环时将下一项放在列表中
- c# - EF 6 的 SqlClientFactory 错误-无法确定提供程序工厂的提供程序名称
- rest - 如何为大量用户的交易平台克服 OHCL 数据的 API/Websocket 限制?
- python - 如何在python中像这个图一样在点的边界侧绘制曲线?
- laravel - 如何在子类laravel中从父类设置变量?