python读取pdf文件(pdfplumber)
阅读目录pdfplumber简介pdfplumber安装简单使用常用方法常用参数举例使用1.pdfplumber简介Pdfplumber是一个可以处理pdf格式信息的库。可以查找关于每个文本字符、矩阵、和行的详细信息,也可以对表格进行提取并进行可视化调试。文档参考https://github.com/jsvine/pdfplumber2.pdfplumber安装安装直接采用pip即可。命令行中输入
阅读目录
- pdfplumber简介
- pdfplumber安装
- 简单使用
- 常用方法
- 常用参数
- 举例使用
1.pdfplumber简介
Pdfplumber是一个可以处理pdf格式信息的库。可以查找关于每个文本字符、矩阵、和行的详细信息,也可以对表格进行提取并进行可视化调试。
文档参考https://github.com/jsvine/pdfplumber
2.pdfplumber安装
安装直接采用pip即可。命令行中输入pip install pdfplumber
如果要进行可视化的调试,则需要安装ImageMagick。
Pdfplumber GitHub: https://github.com/jsvine/pdfplumber
ImageMagick地址:
http://docs.wand-py.org/en/latest/guide/install.html#install-imagemagick-windows
(官网地址没有6x, 6x地址:https://imagemagick.org/download/binaries/)
(注意:我在装ImageMagick,使用起来是报错了, 网上参照了这里 了解到应该装6x版,7x版会报错。故找了6x的地址如上。)
在使用to_image函数输出图片时,如果报错DelegateException。则安装GhostScript 32位。(注意,一定要下载32位版本,哪怕Windows和python的版本是64位的。)
GhostScript: https://www.ghostscript.com/download/gsdnld.html
3.简单使用
__author__ = 'Jeff.xie'
# _*_ encoding:utf-8 _*_
import pdfplumber
text_path = r"D:\Project\MyData\Study\GUI\6_GUI编程(第三部分)\第十一章GUI图形用户界面编程.pdf"
with pdfplumber.open(text_path) as pdf:
print(pdf.pages)#获取pdf文档所有的页,类型是dict
total_pages = len(pdf.pages)
print("total_pages: ",total_pages)
page = pdf.pages[0] #获取第一页
print(type(page)) #<class 'pdfplumber.page.Page'>
# print(page.extract_text()) #获取第一页的内容
#fitz读取pdf全文
content=""
for i in range(0,len(pdf.pages)):
# page=
content += pdf.pages[i].extract_text()
# print(page.extract_text())
# print(page.extract_tables())
# print(content)
pdfplumber.pdf中包含了.metadata和.pages两个属性。
metadata是一个包含pdf信息的字典。
pages是一个包含页面信息的列表。
每个pdfplumber.page的类中包含了几个主要的属性。
page_number 页码
width 页面宽度
height 页面高度
objects/.chars/.lines/.rects 这些属性中每一个都是一个列表,每个列表都包含一个字典,每个字典用于说明页面中的对象信息, 包括直线,字符, 方格等位置信息。
4.常用方法
extract_text() 用来提页面中的文本,将页面的所有字符对象整理为的那个字符串
extract_words() 返回的是所有的单词及其相关信息
extract_tables() 提取页面的表格
to_image() 用于可视化调试时,返回PageImage类的一个实例
5.常用参数
table_settings
表提取设置
默认情况下,extract_tables使用页面的垂直和水平线(或矩形边)作为单元格分隔符。但是方法该可以通过table_settings参数高度定制。可能的设置及其默认值:
{
"vertical_strategy": "lines",
"horizontal_strategy": "lines",
"explicit_vertical_lines": [],
"explicit_horizontal_lines": [],
"snap_tolerance": 3,
"join_tolerance": 3,
"edge_min_length": 3,
"min_words_vertical": 3,
"min_words_horizontal": 1,
"keep_blank_chars": False,
"text_tolerance": 3,
"text_x_tolerance": None,
"text_y_tolerance": None,
"intersection_tolerance": 3,
"intersection_x_tolerance": None,
"intersection_y_tolerance": None,
}
表提取策略
vertical_strategy 和 horizontal_strategy 的参数选项
"lines" Use the page's graphical lines — including the sides of rectangle objects — as the borders of potential table-cells.
"lines_strict" Use the page's graphical lines — but not the sides of rectangle objects — as the borders of potential table-cells.
"text" For vertical_strategy: Deduce the (imaginary) lines that connect the left, right, or center of words on the page, and use those lines as the borders of potential table-cells. For horizontal_strategy, the same but using the tops of words.
"explicit" Only use the lines explicitly defined in explicit_vertical_lines / explicit_horizontal_lines.
6.举例使用
读取文字
import pdfplumber
import pandas as pd
with pdfplumber.open("E:\\600aaa_2.pdf") as pdf:
page_count = len(pdf.pages)
print(page_count) # 得到页数
for page in pdf.pages:
print('---------- 第[%d]页 ----------' % page.page_number)
# 获取当前页面的全部文本信息,包括表格中的文字
print(page.extract_text())
读取表格
import pdfplumber
import pandas as pd
import re
with pdfplumber.open("E:\\600aaa_1.pdf") as pdf:
page_count = len(pdf.pages)
print(page_count) # 得到页数
for page in pdf.pages:
print('---------- 第[%d]页 ----------' % page.page_number)
for pdf_table in page.extract_tables(table_settings={"vertical_strategy": "text",
"horizontal_strategy": "lines",
"intersection_tolerance":20}): # 边缘相交合并单元格大小
# print(pdf_table)
for row in pdf_table:
# 去掉回车换行
print([re.sub('\s+', '', cell) if cell is not None else None for cell in row])
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)