PDF,全称是Portable Document Format,意为“可携带文档格式”。作为一种文件格式,它操作系统平台无关,支持Windows,Unix/Linux,Mac...等几乎所有的主流操作系统。而且,无论在哪种打印机上都可保证精确的颜色和准确的打印效果,即PDF会忠实地再现原稿的每一个字符、颜色以及图象。
当然,它也不同于普通的可以直接读取内容的文本文件,它需要专门的软件来打开,就如同word文档,需要Office软件打开一样。
本篇博文中,主要介绍如何使用python语言提取PDF文件中的文字。
在python中,提供了PyPDF2库可以进行PDF文件的各种操作。例如:
提取PDF文件文字
按页拆分文档
逐页合并文档
裁剪页面
合并多个页面到一个页
对pdf文档进行加密解密
可以参考如下网址:
https://pypi.org/project/PyPDF2/
PyPDF2的安装:
pip install PyPDF2
(1)核心代码:
# 读取pdf
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
#获取第N页
pageObj = pdfReader.getPage(页索引id)
# 获取内容
dataStr = pageObj.extractText()
(2)全部代码如下:
# -*- coding: utf-8 -*-
import PyPDF2
import chardet
from chardet import detect as char_detect
def read_pdf(filename):
''' 读取pdf文件的内容'''
pdfFileObj = open(filename, 'rb') #rw,r+都会出错
# pdfFileObj = open(filename, 'r+',encoding="utf-8")
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
print("pages cnt:",pdfReader.numPages)
for i in range(pdfReader.numPages):
pageObj = pdfReader.getPage(i)
dataStr = pageObj.extractText()
print("current page index:", i)
print("============text===============");
print(dataStr) #ok
if i ==0:
# 仅仅为了测试,只输出第一页
break;
#必须close
pdfFileObj.close()
if __name__ == '__main__':
# test_chardet()
filename = 'Effective C++ 英文版.pdf'
read_pdf(filename)
运行结果:
% python3 pdf1.py
pages cnt: 251
current page index: 0
============text===============
E ffe c tiv eC + +byScottMeyers
Back
to
Dedication
Continue
。。。省略若干字符
截图如下:
说明:
(1)pdfFileObj = open(filename, 'rb') #rw,r+都会出错
打开文件,必须用rb,即可读,二进制方式打开。如果用rw,则错误信息如下:
“ValueError: must have exactly one of create/read/write/append mode”
(2)pdfReader = PyPDF2.PdfFileReader(pdfFileObj):创建PdfFileReader对象,用于读取数据;
(3)pdfReader.numPages:pdf的页数;
(4)pageObj = pdfReader.getPage(i):获取第i页page对象;
(5)dataStr = pageObj.extractText():读取该页的数据;
(6)pdfFileObj.close(): 操作完成后,一定要关闭文件。