python | 将pdf文件转换为图片,这一招就够了

news2024/11/26 18:43:51

一、背景

部分情况下,需要将 PDF 页面转换为图片,例如 PNG 或 JPEG 格式。
python 的开源库 pdfplumber,提供了将 pdf 文件转换为图片的方法。
如果之前还没有安装和使用过pdfplumber库,pdfplumber的安装及基础使用,可参考往期文章:
pdfplumber安装、导入及基础使用方法

二、pdfplumber 将 pdf 文件转换为图片详解

pdfplumber 提供的方法:
.to_image(resolution=150),结果返回PageImage类的实例。
参数:resolution={integer},设置分辨率,可省略,默认分辨率:72。
使用方法如下,将下面代码段中路径改为需要转换的pdf文件路径即可。

import pdfplumber

# 需要转换为图片的pdf文件路径
file_path = r'E:\pytest\pdfp\test\test.pdf'
with pdfplumber.open(file_path) as pdf:
    # pdf.pages默认为pdf全部页
    # 可通过切片的方式选择需要转换的1页或几页,如前2页:pdf.pages[:2]
    for i, page in enumerate(pdf.pages[:2]):
        im = page.to_image(resolution=150)
        # 保存
        im.save(r'E:\pytest\pdfp\test\page-{}.png'.format(i + 1))
        print('----分割线,第%d页----' % (int(i) + 1))

上述代码,将 test.pdf 的前2页转换为图片,运行结果如下:
在这里插入图片描述
PageImage类的一些基础方法

方法释义
im.reset()重置,清除已绘制的所有内容。
im.copy()将图像复制到新的“PageImage”实例。
im.save()语法:im.save(path_or_fileobject, format=“”);path_or_fileobject参数:传入保存图片的文件路径及文件名,不可省略,且一定要是路径+文件名+.png或.jpeg结尾。format参数:图片格式,可省略。

三、常见问题及解决方案

直接运行上述代码,使用 pdfplumber 中 to_image() 方法,将 PDF 文件转换为图片时,可能会出现报错,主要报错情况有以下2种。

(一)本地没有安装ImageMagick

重点报错提示:You probably had not installed ImageMagick library。
即报错原因:本地没有安装 ImageMagick。ImageMagick 是一个免费的创建、编辑、合成图片的软件。
解决办法:直接点击报错提示中的链接,下载 ImageMagick 安装包,安装即可。
在这里插入图片描述
本文下载的版本/安装包文件是:ImageMagick-7.1.1-15-Q16-HDRI-x64-dll.exe
ImageMagick简易安装教程
双击下载的 ImageMagick 安装文件,根据提示点击【next】,直接安装即可。
也可根据需要,在安装过程中,修改默认安装路径和配置项,如果觉得麻烦,可根据提示一直【next】安装,默认的安装已经足够使用(已经包括创建桌面快捷方式、配置系统环境变量—这一点非常重要)。
部分重点安装过程,如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
ImageMagick 安装完成后,该报错问题解决。

(二)找不到gswin64c.exe问题

重点报错提示:FailedToExecuteCommand “gswin64c.exe”。
报错原因:安装 ImageMagick 时,没有附带安装 gswin64c.exe。
解决办法:找到一个 gs.exe 文件去替代。
在这里插入图片描述
详细步骤如下:
第一步:下载相关文件。
下载链接,可参考:
https://mirrors.tuna.tsinghua.edu.cn/gnu/octave/windows/
本文下载版本的是:
octave-8.2.0-w64.zip。(推荐直接在上面镜像链接网页去下载,速度更快,文件较大,网盘等资源下载会十分慢。)
对应本文已安装的 ImageMagick 版本,如下图:
在这里插入图片描述
第二步:解压 octave-8.2.0-w64.zip 文件,
并将 \octave-8.2.0-w64\mingw64\bin 路径下,
名为【gs.exe】文件改名为【gswin64c.exe】。
在这里插入图片描述
在这里插入图片描述
第三步:配置环境变量。
打开电脑【设置】-【系统】-【关于】-最右边【高级系统设置】-【环境变量】-找到系统变量中的【Path】变量-点击【编辑】-然后【新建】,将 \octave-8.2.0-w64\mingw64\bin 的完整路径(如本文:E:\soft\ImageMagick\octave-8.2.0-w64\mingw64\bin)添加进去,最后点击确认即可。
在这里插入图片描述
完成以上三步,该报错问题即可解决。如果还是报相同错误,重启一下python环境(如:关掉PyCharm,重新打开 )。

四、总结

pdfplumber 将 pdf 转换为图片的使用方法很简单,代码也不复杂。
可能较为麻烦的就是,对本地环境有一定的要求,需要安装和配置。

-end-

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/938647.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【React学习】—SetState的使用(九)

【React学习】—SetState的使用(九) state的简写方式 state属性总结

PCD格式点云文件结构及在线查看工具

本文档描述了 PCD(点云数据)文件格式及其在点云库(PCL)中的使用方式。可以使用NSDT 3DConvert 在线预览查看PCD格式的点云数据文件。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 1、为何定义新的点云数据文件格式&#…

【问题总结+备忘录】上传一个shp文件能够读取其中的空间矢量字段,代码+采坑总结

需求描述 要求上传一个shp文件能够读取其中的空间矢量字段。 简单分析 SHP上传格式应该有两种(zip格式和.shp的格式文件内部可能存在多个空间矢量,结果以列表形式返回文件不大,使用MultipartFile上传上传即可结合geo-tools读取空间字段&am…

【C++进阶(二)】STL大法--vector的深度剖析以及模拟实现

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C   🔝🔝 vector 1. 前言2. 熟悉vector的接口函数2.1 vec…

无涯教程-Python机器学习 - Reinforcement Learning函数

这些方法不同于以前研究的方法,也很少使用。在这种学习算法中,我们需要在一段时间内训练一个代理,以便它可以与特定环境交互。代理将遵循一系列与环境进行交互的策略,然后在观察环境之后,它将针对环境的当前状态采取措施。以下是强化学习方法的主要步骤。 第1步-首先,我们需要准…

金鸣表格文字识别软件,让你的图片瞬间变成excel

来百度APP畅享高清图片 首先,让我们打开金鸣表格文字识别软件! 然后点击那个“添加文件”的按钮,在弹出的窗口中选择你想要识别的图片,再点击“打开”,就可以把图片添加到待识别的列表中了。 接下来,你只需…

领星ERP和金蝶云星空接口打通对接实战

领星ERP和金蝶云星空接口打通对接实战 对接系统:领星ERP 深圳市领星网络科技有限公司创立于2017年,致力于通过SaaSERP产品为跨境电商行业创造价值,让跨境生意更简单。公司总部位于深圳,在广州、杭州、厦门等设有服务中心。领星现已…

[计算机入门] 账户管理

3.4 账户管理 用户账户是计算机操作系统中用于标识和管理用户身份的概念。 每个用户都拥有一个唯一的用户账户,该账户包含用户的登录名、密码和其他与用户身份相关的信息。 用户账户通常用于验证用户身份,并授权对系统资源的访问权限。在多用户操作系统…

SSL证书申请

DV SSL证书申请需要多久? DV SSL证书无需验证所有者资质资料,审核流程相对简单,因此可快速签发。但部分域名信息可能会触发不同等级的安全审查机制,必要时需要人工介入进行审查签发,因此,SSL证书签发时间可…

【OpenCV • c++】图像对比度调整 | 图像亮度调整

🚀 个人简介:CSDN「博客新星」TOP 10 , C/C 领域新星创作者💟 作 者:锡兰_CC ❣️📝 专 栏:【OpenCV • c】计算机视觉🌈 若有帮助,还请关注➕点赞➕收藏&#xff…

GIS全国技能大赛试题及解题过程

1、提供数据列表如下: 2、试题要求如下: 3、解题步骤如下: (1.1)导入土地利用数据,如下: (1.2)导入土地采集表格,然后右键选择显示XY数据,如下&am…

python二维索引转一维索引 多维索引转一维索引

将二维索引转为1维索引 原博客地址:https://blog.csdn.net/qq_42424677/article/details/123011642 将n维索引映射成1维索引 def ravel_index(x, dims):i 0for dim, j in zip(dims, x):i * dimi jreturn i

Cesium 叠加天地图-中国近海海洋等深面图层服务

Cesium 叠加天地图-中国近海海洋等深面图层服务 核心代码完整代码:在线示例 偶然发现天地图有一个近海海洋图层,觉得不错,于是尝试叠加一下,花费了一些时间,叠加成功,这里分享一下。 本文包括核心代码、完…

Google Zxing依赖在linux服务器上生成二维码图片中带有中文显示不了的问题。

一,问题描述 在二维码中显示的图片中含有中文,不显示而是显示乱码。这是因为linux系统中为安装中文。 二,解决方法 1、查看所有字体:fc-list // 如果提示 fc-list: command not found,则需要安装# yum install font…

智慧排水监测系统:提高城市排水管理效率

随着城市化进程的不断推进,城市排水系统在城市正常运行和居民生活品质方面扮演着至关重要的角色。然而,随着城市化进程的加速和气候变化的加剧,城市排水系统面临前所未有的挑战,城市内涝、雨污分流不到位、河道黑臭杂乱、水体污染…

c语言练习题36:删除指定的数

删除指定的数 题目: 先输⼊5个整数存放在数组中,再输⼊⼀个整数n,删除数组中所有等于n的数字,数组中剩余的数 组保证数组的最前⾯,打印剩余的数字。 思路: 使⽤两个指针 i 和 j 。 1. i 从前往后扫描整…

网络服务第三次作业

正向解析 1.关闭服务端与客户端防火墙和SElinux 2.修改服务端与客户端的IP为静态IP地址 3.安装DNS软件 服务端IP客户端IP 网址 192.168.50.128192.168.50.131www.openlab.com. ##服务端: [rootquantou ~]# setenforce 0 ##关闭SELinux [rootquantou ~]# syste…

苹果通讯录怎么导入新手机?换了新手机的朋友请看这里

通讯录联系人、照片、视频和文件都是苹果手机中非常重要的数据。当人们更换手机时,照片、视频等文件可以通过“微信发送”或者“隔空投送”一键传输到新手机。 那么,苹果通讯录怎么导入新手机呢?小编给大家总结了2个简单转移通讯录的方法&am…

静电接地桩方案设计和施工

静电接地桩是确保设备、建筑物或工业场所与地面之间能够良好地导电的重要措施之一。以下是一般的静电接地桩方案设计和施工步骤: 1. 设计:首先需要确定需要进行静电接地的设备或建筑物的类型、结构和规模。根据相关的标准和规范,计算出所需的…

②matlab桌面和编辑器

目录 matlab编辑器练习 运行脚本 matlab编辑器练习 您可以通过点击灰色代码框在脚本中输入命令。 准备就绪后,您可以通过点击蓝色的提交按钮提交代码。 任务 在脚本中输入命令 r 3。 2.任务 在脚本中添加命令 x pi*r^2。 附加练习 当您在实时编辑器中完成…