我的编程空间,编程开发者的网络收藏夹
学习永远不晚

一文教会你用Python读取PDF文件

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

一文教会你用Python读取PDF文件

实战场景

Python 工程师在日常的工作中,经常会碰到解析和处理PDF文件的情况,实战中需求主要分为如下情况:

  • 提取 PDF 中的文字
  • 将 PDF 中每页转换为图片
  • word 转换为PDF
  • PDF生成,编辑,导入导出
  • PDF在线渲染

除了最后一项需要前端配合以外,其余内容都可以直接在 python 端进行实现。

本次实战选择 pdfplumber 库进行学习,可以提前安装该库,不过有一点需要注意,该库主要用于读取 PDF 进行操作,写入和编辑无法实现,即本文学习一款专注于 PDF 内容提取的库。

> pip install pdfplumber -i https://pypi.tuna.tsinghua.edu.cn/simple

pdfplumber 库具备如下特点:

  • 可以访问PDF对象中的任意元素详细信息;
  • 可以提取文本和表格,而且用法简单;
  • 集成了可视化调试。

Python PDF 实战编码

下面可以编写 PDF 操作的基础代码。

import pdfplumber

with pdfplumber.open('./dddd.pdf') as pdf:
    for page in pdf.pages:
        print(page.extract_text())

        # 每页打印一分页分隔
        print('---------- 分页分隔 ----------')

导入 pdfplumber 模块之后,使用 pdfplumber.open('./dddd.pdf') 打开本地 pdf 文件,然后通过 pdf.pages 遍历所有页,在通过页对象.extract_text() 方法,提取文本信息。

pdfplumber.open() 方法的签名如下所示:

pdfplumber.open("文件名", password = "密码", laparams = { "line_overlap": 0.7 })

其中各参数描述如下:

  • file_name:文件名,必选参数;
  • password:PDF的密码;
  • laparams:布局参数。

除此之外,如果希望读取 PDF,还可以使用 load() 方法,该方法也会返回 pdfplumber.PDF 类的实例。

pdfplumber.PDF 对象实例,主要有两个重要属性:

  • .metadata:从PDF的Info中获取元数据键 /值对字典。 通常包括“ CreationDate”,“ ModDate”,“ Producer”等;
  • .pages:包含 pdfplumber.Page 实例的列表,每一个实例代表PDF每一页的信息。

上文提及的 pdfplumber.Page 实例是 pdfplumber 的核心,后续对 PDF 的操作大量围绕该类的属性和方法实施,其重要属性如下所示:

  • page_number:页码顺序,第一页的序号是 1;
  • witdh:宽度;
  • height:高度;
  • .objects/.chars/.lines/.rects/.curves/.figures/.images:获取PDF页中的重要数据。

核心方法如下所示:

  • extract_text():提取页中的文本;
  • extract_words():提取所有单词及其相关信息;
  • extract_tables(): 提取页面的表格。

extract_text() 呈现结果

extract_words() 呈现结果

extract_tables() 呈现效果,由于 PDF 中无表格,所有每页得到的都是空!

补充

当然Python除了读取PDF文件,还有一些其他功能,例如加密PDF,旋转和叠加页面等,下面是实现的示例代码

旋转和叠加页面

import PyPDF2

from PyPDF2.pdf import PageObject

# 创建一个读PDF文件的Reader对象

reader = PyPDF2.PdfFileReader('resources/XGBoost.pdf')

# 创建一个写PDF文件的Writer对象

writer = PyPDF2.PdfFileWriter()

# 对PDF文件所有页进行循环遍历

for page_num in range(reader.numPages):

      # 获取指定页码的Page对象

      current_page = reader.getPage(page_num) # type: PageObject

      if page_num % 2 == 0:

         # 奇数页顺时针旋转90度

         current_page.rotateClockwise(90)

      else:

# 偶数页反时针旋转90度

             current_page.rotateCounterClockwise(90)

      writer.addPage(current_page)

# 最后添加一个空白页并旋转90度

page = writer.addBlankPage() # type: PageObject

page.rotateClockwise(90)

# 通过Writer对象的write方法将PDF写入文件

with open('resources/XGBoost-modified.pdf', 'wb') as file:

    writer.write(file)

加密PDF文件

import PyPDF2

reader = PyPDF2.PdfFileReader('resources/XGBoost.pdf')
writer = PyPDF2.PdfFileWriter()

for page_num in range(reader.numPages):
     writer.addPage(reader.getPage(page_num))

# 通过encrypt方法加密PDF文件,方法的参数就是rre

#设置的密码
writer.encrypt('foobared')

with open('resources/XGBoost-encrypted.pdf', 'wb') as file:

       writer.write(file)

批量添加水印

import PyPDF2

from PyPDF2.pdf import PageObject

reader1 = PyPDF2.PdfFileReader('resources/XGBoost.pdf') reader2 = PyPDF2.PdfFileReader('resources/watermark.pdf')
writer = PyPDF2.PdfFileWriter()

# 获取水印页
watermark_page = reader2.getPage(0)

for page_num in range(reader1.numPages):

     current_page = reader1.getPage(page_num) # type: PageObject                                           current_page.mergePage(watermark_page)

     # 将原始页和水印页进行合并
     writer.addPage(current_page) 

# 将PDF写入文件
with open('resources/XGBoost-watermarked.pdf', 'wb') as file:

       writer.write(file)

到此这篇关于一文教会你用Python读取PDF文件的文章就介绍到这了,更多相关Python读取PDF文件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

一文教会你用Python读取PDF文件

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

一步步教你如何用Python读取CSV文件

要读取一个csv文件,可以使用python的csv库,具体步骤如下:导入csv库。使用open()函数打开csv文件。使用csv.reader()函数读取文件内容并解析成一个reader对象。遍历reader对象来逐行读取csv数据。一步步
一步步教你如何用Python读取CSV文件
2024-04-04

第一课:Python读取.csv文件

我的是Python3.6版本的,可能有些和Python2.7很多不一样的地方。下面用Python打开一个test1.csv文件,可以看到运行的结果在下面。
2023-01-31

一文教你学会Go中singleflight的使用

Singleflight是一个Go包,可防止并发请求重复执行相同的耗时操作。它通过缓存结果来实现串行执行和性能提升。使用方法:创建Singleflight对象并指定执行的DoFunc执行DoFunc来获取结果获取结果和错误优势:避免重复操作,提高性能简化并发控制缓存结果用例:数据库查询、远程资源加载、复杂计算等。Singleflight还提供了配置选项,如缓存大小、过期时间和缓存未命中时的等待时间。
一文教你学会Go中singleflight的使用
2024-04-02

一文教会你vue中使用async和await

async和await作为异步函数,语法很简单,就是在函数前面加上async关键字,来表示它是异步的,下面这篇文章主要给大家介绍了如何通过一文教会你vue中使用async和await的相关资料,需要的朋友可以参考下
2022-11-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录