Python-pdfplumber读取PDF内容

这篇具有很好参考价值的文章主要介绍了Python-pdfplumber读取PDF内容。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

PDF是一种编写文档格式,便于跨操作系统传播文档。Python的开源库 pdfplumber,可以较为方便地获取pdf的各种信息,包含pdf的基本信息(作者、创建时间、修改时间…)及表格、文本、图片等信息,基本可以满足较为简单的格式转换功能。

一、pdfplumber模块

1.1 pdfplumber的特点

  • 1、可以轻松访问有关每个PDF对象的详细信息。
  • 2、可以提取文本和表格的更高级别,可以自定义的方法。
  • 3、支持紧密集成的可视化调试。
  • 4、有通过裁剪框过滤对象等实用功能。
pdfplumber,职场高手:自动化办公,python,pdf

pdfplumber中有两个基础类,PDF和Page。PDF用来处理整个文档,Page用来处理整个页面。

1.2 pdfplumber.PDF类

  • .metadata: 获取pdf基础信息,返回字典
  • pages 一个包含pdfplumber.Page实例的列表,每一个实例代表pdf每一页的信息。

1.3pdfplumber.Page类

pdfplumber核心功能,对PDF的大部分操作都是基于这个类,包括提取文本、表格、尺寸等。

二 pdfplumber的使用

2.1 加载PDF

调用pdfplumber.open(x)加载PDF, 其中x可以有以下几种格式:

a、PDF文件路径。

b、文件对象, 以字节流形式加载。

c、类文件对象, 以字节流形式加载。

读取 PDF代码:pdfplumber.open("路径/文件名.pdf",password="test",laparams={"line_overlap":0.7})
解读:
passworf:加载受密码保护的PDF要传递password关键字参数。
laparams:将布局分析参数设置为pdfminer.six的布局引擎,传递laparams关键字参数。

2.2 pdfplumber.PDF 类

pdfplumber.PDF 类代表一个PDF文件,主要有两个属性。

属性 说明
.metadata 元数据键值对字典,摘自PDF的“信息”。通常包括“CreationDate"(创建日期)、“ModDate"(修改日期)、Producer"(创建者)等。
.pages 包含pdfplumber . Page(页实例)的列表。

2.3 pdfplumber.Page 类

pdfplumber.Page是pdfplumber核心,大部分的操作都是围绕此类进行。

属性
.page_number 页码
.width 页面宽
.height 页面长
.objects/ .chars /.lines /. rects /. curves / . images 属性中的每一个都是一个列表,每个列表都是嵌入在页面上的每个此类对象包含一个字典。

2.4 读取PDF

import pdfplumber
import pandas as pd

with pdfplumber.open("ag-energy-round-up-2017-02-24.pdf") as pdf:

2.5 读取PDF文档信息

with pdfplumber.open("ag-energy-round-up-2017-02-24.pdf") as pdf:
    print(pdf.metadata)

结果

{‘Title’: ‘National Ag Energy’, ‘Author’: ‘LGMN, Des Moines, IA’, ‘Keywords’: ‘National Ag Energy ethanol biodiesel bioenergy’, ‘CreationDate’: “D:20170224133144-06’00’”, ‘ModDate’: “D:20170224133144-06’00’”, ‘Producer’: ‘Microsoft® Excel® 2013’, ‘Creator’: ‘Microsoft® Excel® 2013’}

2.6 查看总页数

len(pdf.pages)

2.7 查看总页数读取第一页的宽度,页高等信息

first_page = pdf.pages[0]
# 查看页码
print('页码:', first_page.page_number)
 # 查看页宽
 print('页宽:', first_page.width)
# 查看页高
print('页高:', first_page.height)

2.8 读取文本

with pdfplumber.open("继(吊岩坪)110-2018-05(都吊东线2区).pdf") as pdf:
    # 第一页pdfplumber.Page实例
    first_page = pdf.pages[0]
    text = first_page.extract_text()
    print(text)

2.9 读取表格

import pdfplumber
import pandas as pd

with pdfplumber.open("继(吊岩坪)110-2018-05(都吊东线2区).pdf") as pdf:
    page_third = pdf.pages[0]
    table_1 = page_third.extract_table()
    #table_df = pd.DataFrame(table_1[1:], columns=table_1[0])
    print(table_1)

##三 、示例

3.1 pdfplumber提取表格数据

提取表格数据主要用到extract_tables()和extract_table()两种方法,这两种提取方式各有不同。
extract_tables()方法——输出文档所有表格,返回一个嵌套列表。

with pdfplumber.open(r'继(吊岩坪)110-2018-05(都吊东线2区).pdf') as pdf_info:  # 打开pdf
    page_one = pdf_info.pages[0]
    page_one_table = page_one.extract_tables()  # 获取pdf第一页的所有表格数据
    for row in page_one_table:
        print('第一页的表格数据:', row)

extact_table()方法——不会返回文档的所有表格,仅返回行数最多的表格数据。如存在多个行数相等的表格,则默认输出顶部表格数据。表格的每一行都为一个单独的列表,列表中的元素即为原表格的各个单元格的数据。文章来源地址https://www.toymoban.com/news/detail-859041.html

示例

# 提取pdf表格数据并保存到excel中
import pdfplumber
from openpyxl import Workbook


class PDF(object):
    def __init__(self, file_path):
        self.pdf_path = file_path
        # 读取pdf
        try:
            self.pdf_info = pdfplumber.open(self.pdf_path)
            print('读取文件完成!')
        except Exception as e:
            print('读取文件失败:', e)

    # 打印pdf的基本信息、返回字典,作者、创建时间、修改时间/总页数
    def get_pdf(self):
        pdf_info = self.pdf_info.metadata
        pdf_page = len(self.pdf_info.pages)
        print('pdf共%s页' % pdf_page)
        print("pdf文件基本信息:\n", pdf_info)
        self.close_pdf()

    # 提取表格数据,并保存到excel中
    def get_table(self):
        wb = Workbook()  # 实例化一个工作簿对象
        ws = wb.active  # 获取第一个sheet
        con = 0
        try:
            # 获取每一页的表格中的文字,返回table、row、cell格式:[[[row1],[row2]]]
            for page in self.pdf_info.pages:
                for table in page.extract_tables():
                    for row in table:
                        # 对每个单元格的字符进行简单清洗处理
                        row_list = [cell.replace('\n', ' ') if cell else '' for cell in row]
                        ws.append(row_list)  # 写入数据
                con += 1
                print('---------------分割线,第%s页---------------' % con)
        except Exception as e:
            print('报错:', e)
        finally:
            wb.save('\\'.join(self.pdf_path.split('\\')[:-1]) + '\pdf_excel.xlsx')
            print('写入完成!')
            self.close_pdf()

    # 关闭文件
    def close_pdf(self):
        self.pdf_info.close()


if __name__ == "__main__":
    file_path = input('请输入pdf文件路径:')
    pdf_info = PDF(file_path)
    pdf_info.get_pdf() # 打印pdf基础信息
    # 提取pdf表格数据并保存到excel中,文件保存到跟pdf同一文件路径下
    pdf_info.get_table()
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)

读取文字

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])

到了这里,关于Python-pdfplumber读取PDF内容的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 通过Python的pdfplumber库提取pdf中的文字

    大家好,我是空空star,本篇给大家分享一下 《通过Python的pdfplumber库提取pdf中的文字》 。 之前给大家分享了 《通过Python的PyPDF2库提取pdf中的文字》 ,感兴趣的同学可以阅读下。 本篇演示所用python版本: Python 3.8.9 通过Python的PyPDF2库提取pdf中的文字 pdfplumber是一个用于从PDF文

    2024年02月06日
    浏览(32)
  • python读取pdf、doc、docx、ppt、pptx文件内容

    使用python读取文件,其中pdf、docx、pptx可以直接读,.ppt和.doc文件不能直接读,需要转换成.pptx和.docx文件,并且需要区分系统 如果是linux系统,请先安装组件 python代码如下:

    2024年02月11日
    浏览(36)
  • python使用第三方库PyPDF2、PDFMiner或pdfplumber来解析PDF文件

    使用第三方库PyPDF2、PDFMiner或pdfplumber来解析PDF文件可以实现PDF文件的内容提取、搜索和修改等功能。下面是使用PDFMiner来解析PDF文件的安装说明和代码示例: PDFMiner 下面是一些PDFMiner的常见操作: 1.安装PDFMiner库:在Python环境中,可以使用pip命令安装PDFMiner库。 2.导入PDFMiner库

    2024年02月09日
    浏览(43)
  • 【PDFBox】PDFBox操作PDF文档之读取指定页面文本内容、读取所有页面文本内容、根据模板文件生成PDF文档

    这篇文章,主要介绍PDFBox操作PDF文档之读取指定页面文本内容、读取所有页面文本内容、根据模板文件生成PDF文档。 目录 一、PDFBox操作文本 1.1、读取所有页面文本内容 1.2、读取指定页面文本内容 1.3、写入文本内容 1.4、替换文本内容 (1)自定义PDTextStripper类 (2)创建Key

    2024年02月16日
    浏览(49)
  • java 读取pdf文件内容

    https://blog.csdn.net/ThinkPet/article/details/131256428

    2024年02月08日
    浏览(39)
  • PDF加粗内容重复读取解决方案

    在使用 pdfplumber 读取 PDF 的过程中,由于加黑的内容会被莫名其妙的读取两次,带来了很大的困扰。这篇文章将给出解决方案。 在在使用 pdfplumber 读取 PDF 的过程中,读取普通内容是完全没有问题的。但是该公司早期 PDF 并未完全规范的过程中,有些标题加粗了,而有些却没有

    2024年02月22日
    浏览(31)
  • phtyon读取pdf的远程地址解析内容

    import xlwt,pymysql,requests,json,datetime,PyPDF2,urllib.request,io,ssl   #  添加context 解决读取pdf时SSL报错问题 context = ssl._create_unverified_context() # 读取pdf地址 获取pdf内容 req = urllib.request.urlopen(contract_download_url,context=context) remote_file=req.read() memory_file = io.BytesIO(remote_file) read_pdf = PyPDF2.PdfReader

    2024年02月16日
    浏览(37)
  • JAVA读取(DOC、DOCX、PDF、PPT、PPTX)文件文本内容及图片

    温馨提示:有很多方法均可以解析这些常见的文件,以下内容使用的是apache-poi + apache-pdfbox实现的。         关于文档解析,在网上搜索了很久,无奈内容太过繁杂,找不到合适的代码,一大半都是只支持文本。没办法,只能自己在网上一点一点CV了,最终提取了这些代码

    2024年02月03日
    浏览(41)
  • python读取pdf文件

    使用python读取pdf文件的内容 读取第1页的内容: 输出该pdf文件共有多少页,并输出该pdf的第1页的内容。 读取第1-100页的内容: 输出该pdf文件共有多少页,并输出该pdf的第1-100页的内容。 注意:将a.pdf与python文件放在同一目录下。    

    2024年02月16日
    浏览(30)
  • python批量处理修改pdf内容

      将PDF转换为Word: 使用pdf2docx库中的Converter类来进行PDF转换。 convert_pdf_to_docx 函数接受PDF文件路径和输出的Word文档路径作为参数。 通过调用Converter对象的 convert 方法将PDF转换为Docx格式。 最后调用 close 方法关闭Converter对象并保存转换后的文档。 将Word转换为Excel: 使用docx库

    2024年01月25日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包