如何基于pdf2image实现pdf批量转换为图片
最近为了将pdf报告解析成为文本和图片,需要将大量多页的pdf文件拆分下单独的一页一页的图像,以便后续进行OCR和图像处理,因此就需要实现将pdf2image,本文主要结合开源的pdf2image和poppler,实现了pdf转换为png格式图片的简单转换工具,供大家参考,具体步骤和应用测试示例如下。
1.安装pdf2image包
需要先安装pdf2image包,安装命令:pip3 install pdf2image
2.安装poppler用于实现pdf2image
安装poppler-windows,下载地址:https://github.com/oschwartz10612/poppler-windows/releases/tag/v23.11.0-0
3.配置环境变量
将上述压缩包解压缩之后,将路径配置到环境变量path中,如path=:D:\tools\poppler-24.08.0\Library\bin
4.修改poppler_path指向的路径
修改pdf2image包的pdf2image.py文件,将poppler路径为上述路径,具体如下。
# pdf2image.py文件修改
def convert_from_path(pdf_path: Union[str, PurePath],output_file: Any = uuid_generator(),poppler_path=r'D:\tools\poppler-24.08.0\Library\bin', # 需要修改为path中配置的poppler路径。grayscale: bool = False
) -> List[Image.Image]:...
5.测试示例代码
import fitz # PyMuPDF
from pdf2image import convert_from_path
import os,sys
def extract_fullpage_images(filename,pdf_path,output_folder): # 打开PDF文件 doc = fitz.open(pdf_path) # output_folder = "extracted_content_pdf" os.makedirs(output_folder, exist_ok=True) os.makedirs(output_folder + "/png-full/", exist_ok=True) # 遍历每一页 for page_num in range(len(doc)): page = doc.load_page(page_num) # 使用pdf2image将整个页面转换为图像 images = convert_from_path(pdf_path, first_page=page_num + 1, last_page=page_num + 1) for img_index, img in enumerate(images): img.save(f"{output_folder}/png-full/page_{page_num + 1}_full_img_{img_index + 1}.png", 'PNG') print(f"Processed page {page_num + 1}================================") doc.close()# 示例: python pdfSplitAdapterPMI.py D:\xxx\report.pdf
if __name__ == '__main__': # 检查参数个数 argc = len(sys.argv) if (argc <= 1): print('missing Parameter' % locals()) sys.exit() filepath = sys.argv[1] pdf_path = filepathfilename=filepath.split('\\')[-1][:-4] output_folder = filepath[:filepath.rfind('\\')]+"\extracted_content2_"+filename extract_fullpage_images(filename,pdf_path,output_folder)
6.转换结果对比
1.原始pdf文件

2.转换后每一页的图片文件列表

相关文章:
如何基于pdf2image实现pdf批量转换为图片
最近为了将pdf报告解析成为文本和图片,需要将大量多页的pdf文件拆分下单独的一页一页的图像,以便后续进行OCR和图像处理,因此就需要实现将pdf2image,本文主要结合开源的pdf2image和poppler,实现了pdf转换为png格式图片…...
Tomcat(1) 什么是Tomcat?
Tomcat是一个开源的Web服务器和Servlet容器,它实现了Java Servlet、JavaServer Pages (JSP)、WebSocket和Java EL等Java EE规范。Tomcat由Apache软件基金会维护,是Java应用程序的常用部署平台。 深入理解Tomcat 1. 架构 Tomcat的核心组件包括…...
商务礼仪与职场沟通
知人者智,自知者明。胜人者有力,自胜者强。知足者富,强行者有志,不失其所者久,死而不亡者寿。 ——《道德经(第三十三章)》 认知先行——意识塑造 职业化——标准化,规范化&#…...
C语言必做30道练习题
C语言练习30题(分支循环,数组,函数,递归,操作符) 目录 分支循环1.闰年的判断2.阅读代码,计算代码输出的结果3.输入一个1~7的数字,打印对应的星期几4.输入任意一个整数值,…...
Linux信号_信号的产生
信号概念 信号是进程之间事件异步通知的一种方式,属于软中断。 异步:在异步操作中,任务可以独立执行。一个任务的开始或完成不依赖于其他任务的状态。 同步:在同步操作中,任务之间的执行是相互依赖的。一个任务必须等待…...
数据库基础(7) . DML-基本操作
3.3.DML DML 是 “Data Manipulation Language”(数据操作语言)的缩写,在数据库管理系统(DBMS)中用来处理已存在的数据库中的数据。 它主要包含用于插入(INSERT)、更新(UPDATE&…...
windows运行ffmpeg的脚本报错:av_ts2str、av_ts2timestr、av_err2str => E0029 C4576
问题描述 我目前的环境是: 编辑器: Microsoft Visual Studio Community 2022 (64 位) 运行的脚本是ffmpeg自带的remux样例,只不过我想用c语言执行这个样例。在执行的过程中报错如下图: C4576 后跟初始值设定项列表的带圆括…...
[mysql]mysql的DML数据操作语言增删改,以及新特性计算列,阿里巴巴开发手册mysql相关
1DML数据操作语言,增加删除改数据 插入数据INSERT 插入添加数据,两种方法 方式1:VALUES添加数据 #准备工作 USE atguigudb; CREATE TABLE IF NOT EXISTS emp1( id INT, name VARCHAR(15), hire_data DATE, salary DOUBLE(10,2)); SELECT * FROM emp1 INSERT INTO em…...
Github 2024-11-07 Go开源项目日报 Top10
根据Github Trendings的统计,今日(2024-11-07统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10HTML项目1Kubernetes: 容器化应用程序管理系统 创建周期:3618 天开发语言:Go协议类型:Apache License 2.0Star数量:106913 个Fork数…...
【黑盒测试】等价类划分法及实例
本文主要介绍黑盒测试之等价类划分法,如什么是等价类划分法,以及如何划分,设计等价类表。以及关于三角形案例的等价类划分法。 文章目录 一、什么是等价类划分法 二、划分等价类和列出等价类表 三、确定等价类的原则 四、建立等价类表 …...
LeetCode17. 电话号码的字母组合(2024秋季每日一题 59)
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits “23” 输出:[“…...
SQLite数据库是什么?DB Browser for SQLite是什么?
SQLite是一个轻量级的嵌入式数据库,它是一个遵守ACID原则的关系型数据库管理系统。SQLite的主要特点是占用资源少、无需配置、支持多种操作系统和编程语言,并且具有高性能和跨平台特性。 SQLite的基本概念和特性 轻量级:SQLite的数据…...
核心概念解析Caffeine 缓存模型与策略
1. 简介 什么是 Caffeine Caffeine 是一个高性能的 Java 缓存库,专为提高内存缓存的效率和灵活性而设计。它由 Google 的 Guava Cache 项目启发,并提供了更高的性能和更丰富的功能集。Caffeine 以其卓越的缓存命中率和内存管理能力而广受欢迎ÿ…...
ubuntu 22.04 防火墙
Ubuntu(22.04)云主机SSH安全加固 https://blog.csdn.net/qq_44846097/article/details/141098092 ubuntu22.04防火墙策略 https://blog.csdn.net/sunyuhua_keyboard/article/details/139493464 Ubuntu 22.04 防火墙设置和开放端口命令 https://blog.c…...
【数据结构-合法括号字符串】力扣678. 有效的括号字符串
给你一个只包含三种字符的字符串,支持的字符类型分别是 ‘(’、‘)’ 和 ‘*’。请你检验这个字符串是否为有效字符串,如果是 有效 字符串返回 true 。 有效 字符串符合如下规则: 任何左括号 ‘(’ 必须有相应的右括号 ‘)’。 任何右括号 …...
ThreadX在STM32上的移植:F1,F4通用启动文件tx_initialize_low_level.s
在嵌入式系统开发中,实时操作系统(RTOS)的选择对于系统性能和稳定性至关重要。ThreadX是一种广泛使用的RTOS,它以其小巧、快速和可靠而闻名。在本文中,我们将探讨如何将ThreadX移植到STM32微控制器上,特别是…...
【算法】递归+深搜:814.二叉树剪枝
目录 1、题目链接 2、题目 3、解法(后序遍历) 4、代码 1、题目链接 814.二叉树剪枝(LeetCode) 2、题目 3、解法(后序遍历) 我们这次不使用宏观的观察法,而是从具体实现开始。 题目要求我们,去掉不含1的子树。 对于子树这个…...
spring Framework 特定条件下目录遍历漏洞(CVE-2024-38816)修复
spring Framework 特定条件下目录遍历漏洞(CVE-2024-38816)修复 漏洞描述 CVE-2024-38816: Path traversal vulnerability in functional web frameworks 通过功能性 Web 框架 WebMvc.fn 或 WebFlux.fn 提供静态资源的应用程序容易受到路径遍历攻击。攻…...
ESP32-C3 入门笔记03:VScode + flash_download_tool 下载烧录程序(ESP-IDF + PlatformIO)
ESP32-C3 支持多种烧录方式,主要包括以下几种: VS Code 串口烧录:使用 VS Code 配合 PlatformIO 或 ESP-IDF 插件进行串口烧录。串口连接通常使用 UART 接口,通过 USB 转串口芯片与电脑连接。步骤大致如下: 配置 VS Co…...
Node.js——fs模块-文件重命名和移动
1、在Node.js中,我们可以使用 rename 或 renameSync 来移动或重命名文件或文件夹 2、语法: fs.rename(oldPath,newPath,callback) fs.renameSync(oldPath,newPath) 参数说明: oldPath 文件当前的路径 newPath 文件新的路径 callback 操…...
使用VMware虚拟机搭建Nanobot开发环境
使用VMware虚拟机搭建Nanobot开发环境 1. 引言 你是不是遇到过这样的情况:想尝试最新的AI开发工具,但又担心搞乱自己的主力开发环境?或者团队需要统一开发环境,但每个人的电脑配置都不一样? 使用虚拟机搭建开发环境…...
nlp_gte_sentence-embedding_chinese-large长文本处理技巧:分段与聚合策略
nlp_gte_sentence-embedding_chinese-large长文本处理技巧:分段与聚合策略 1. 引言 你是不是也遇到过这样的问题:手头有一篇几十页的技术报告或者学术论文,想要用nlp_gte_sentence-embedding_chinese-large模型来提取文本向量,却…...
Lychee Rerank MM惊艳效果:工业图纸图像与技术文档段落的跨模态重排序
Lychee Rerank MM惊艳效果:工业图纸图像与技术文档段落的跨模态重排序 1. 引言:当图纸遇见文字的多模态匹配革命 想象一下这样的场景:你手头有一张复杂的工业设备图纸,需要从海量技术文档中找到与之最匹配的说明段落。传统的关键…...
提升工作效率的利器:哦我的Claude代码(Oh-My-ClaudeCode)
轻松掌握Claude Code的多代理 orchestration——oh-my-claudecode 在我们的工程师和开发者面前,常常会遇到复杂的任务调度和多代理协作的问题。如何有效地利用可用的AI助手并提高工作效率,成为了一个不容忽视的挑战。oh-my-claudecode正是为了解决这些问…...
嵌入式系统内存管理技术与实践
嵌入式系统内存管理的工程实践1. 嵌入式内存管理概述嵌入式系统的内存管理直接决定了系统的三个关键特性:稳定性、实时性和功耗表现。与通用计算系统不同,嵌入式环境对内存使用有着更严格的约束条件,这要求工程师必须掌握专业的内存管理技术。…...
告别信号盲猜!手把手教你用ESP32的Scan和iperf给家里WiFi做个‘体检’
用ESP32打造家庭WiFi信号检测仪:从扫描到吞吐测试全攻略 你是否遇到过在家追剧时视频卡顿、智能设备频繁掉线的困扰?墙角的摄像头总是连接不稳定,书房里的温湿度传感器数据时有时无——这些问题很可能与WiFi信号覆盖不均有关。今天我们将利用…...
什么是JVM——餐厅类比
目录 一、核心前提 二、JVM 整体定位(餐厅类比总纲) 三、JVM 核心模块拆解(餐厅类比 1:1 对应) 模块 1:类加载器子系统 → 餐厅 “收单 归档员” 核心动作: 关键补充(对应你的内存疑问&a…...
STM32嵌入式系统分层架构与设备驱动实现
嵌入式系统中应用层与硬件层的分层管理实现1. 项目概述在嵌入式系统开发中,传统的开发方式往往将硬件操作直接嵌入到应用层代码中,导致代码耦合度高、可维护性差。本文介绍一种基于STM32平台的硬件抽象层实现方案,通过设备驱动模型实现应用层…...
别再死磕Open SQL了!用ABAP CDS View在SAP S/4HANA里榨干数据库性能
别再死磕Open SQL了!用ABAP CDS View在SAP S/4HANA里榨干数据库性能 每次看到那些运行了20分钟还没出结果的报表程序,我就忍不住想问问开发者:2023年了,为什么还在用Open SQL写这种性能灾难?上周我接手了一个供应商账龄…...
2021 年 3 月青少年软编等考 C 语言四级真题解析
目录 T1. 酒鬼 思路分析 T2. 重启系统 思路分析 T3. 鸣人的影分身 思路分析 T4. 宠物小精灵之收服 思路分析 T1. 酒鬼 题目链接:SOJ D1053 Santo 刚刚与房东打赌赢得了一间在 New Clondike 的大客厅。今天,他来到这个大客厅欣赏他的奖品。房东摆出了一行瓶子在酒吧上。瓶子…...
