当前位置: 首页 > news >正文

通过python提取PDF文件指定页的图片

整体思路

要从 PDF 文件中提取指定页和指定位置的图片,可以分几个步骤来实现:

1.1 准备所需工具与库

在 Python 中处理 PDF 和图像时,需要使用几个库:

  • PyMuPDF (fitz):用于读取和处理 PDF 文件,可以精确获取指定页面内容。
  • Pillow:处理图像,用于裁剪和保存图片。
  • pdf2image:将 PDF 页面转换为图像格式,方便进一步处理。
1.2 基本流程
  1. 读取 PDF 文件:使用 PyMuPDF 读取 PDF 文件,找到指定页。
  2. 获取页面图像:使用 pdf2image 将目标页转换为图像。
  3. 确定图片区域:使用坐标来指定图像中的区域。该区域可以通过手动确定,或者通过图像识别技术(如 OCR)来定位。
  4. 提取并保存图片:使用 Pillow 裁剪出指定区域,并保存图像。
1.3 处理步骤
  • Step 1:使用 PyMuPDF 打开 PDF,找到目标页。
  • Step 2:将该页转换为图像。
  • Step 3:根据坐标裁剪指定位置的图像。
  • Step 4:保存裁剪后的图像。

代码示例:

import fitz  # PyMuPDF
from pdf2image import convert_from_path
from PIL import Image# Step 1: 打开 PDF 文件并定位指定页面
def extract_image_from_pdf(pdf_path, page_number, crop_box, output_image_path):# Step 2: 将目标页转换为图像pages = convert_from_path(pdf_path, dpi=300)target_page = pages[page_number - 1]  # Python的索引从0开始# Step 3: 使用 Pillow 裁剪图像left, top, right, bottom = crop_box  # 指定区域的坐标cropped_image = target_page.crop((left, top, right, bottom))# Step 4: 保存裁剪后的图像cropped_image.save(output_image_path)print(f"图像已保存到: {output_image_path}")# 示例使用
pdf_path = "/Users/linql/Desktop/3.5_python/0001_26110523.pdf"  # PDF 文件路径
page_number = 4  # 要提取的页码
crop_box = (10, 700,2800, 3100)  # 图像的裁剪区域 (left, top, right, bottom)
output_image_path = "output_image.png"  # 输出图像的路径extract_image_from_pdf(pdf_path, page_number, crop_box, output_image_path)

运行后,会提示:

pdf2image.exceptions.PDFInfoNotInstalledError: Unable to get page count. Is poppler installed and in PATH?

是因为:# macOS 需要安装 poppler 用于 pdf2image

brew install poppler

相关文章:

通过python提取PDF文件指定页的图片

整体思路 要从 PDF 文件中提取指定页和指定位置的图片,可以分几个步骤来实现: 1.1 准备所需工具与库 在 Python 中处理 PDF 和图像时,需要使用几个库: PyMuPDF (fitz):用于读取和处理 PDF 文件,可以精确…...

Leetcode Hot 100刷题记录 -Day12(轮转数组)

轮转数组 问题描述: 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4]解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向…...

GitHub每日最火火火项目(9.13)

以下是对这些项目的详细介绍: fishaudio 的 fish-speech: 基本信息:这是一种全新的语音技术解决方案,属于文本到语音(Text-to-Speech,TTS)技术范畴。技术特点: 多语言支持&#xff…...

力扣--649.Dota2参议院

Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中,每一位参…...

vim 安装与配置教程(详细教程)

vim就是一个功能非常强大的文本编辑器,可以自己DIY的那种 ,不但可以写代码 ,还可编译 ,可以让你手不离键盘的完成鼠标的所有操作。 如果想要了解vim的的发展历史和详细解说,可以自行上网搜索,我主要是记录一…...

【WPF】Popup的使用

WPF(Windows Presentation Foundation)中的Popup控件用于创建弹出窗口,如工具提示、上下文菜单等。Popup控件本身并不直接显示任何内容,它需要一个子元素来显示实际的内容。 以下是一个简单的XAML示例,展示如何创建一…...

力扣刷题之2576.求出最多标记下标

题干描述 给你一个下标从 0 开始的整数数组 nums 。 一开始&#xff0c;所有下标都没有被标记。你可以执行以下操作任意次&#xff1a; 选择两个 互不相同且未标记 的下标 i 和 j &#xff0c;满足 2 * nums[i] < nums[j] &#xff0c;标记下标 i 和 j 。 请你执行上述操…...

黑马JavaWeb开发笔记16——请求(postman、简单参数、实体参数、@RequestParam映射)

文章目录 前言一、postman工具1. 引入2. 介绍3. 安装4. 使用 二、简单参数1. 原始方式&#xff08;仅了解&#xff0c;以后的开发不会使用&#xff09;2. SpringBoot方式3. 参数名不一致(RequestParam映射) 三、实体参数1. 简单实体对象2. 复杂实体对象 总结 前言 本篇文章是2…...

Corrupt block relative dba: 0x02c0b382 (file 11, block 45954)

接前面断电故障处理2&#xff1a;oracle数据库断电无法启动恢复-CSDN博客 DM00 started with pid145, OS id16516, job SYS.SYS_IMPORT_TABLE_01 2024-09-13T20:05:22.33130208:00 ADVISORY: Please collect redo for investigation of ORA-8103. Use command: ALTER SYSTE…...

二叉排序树在实际生活应用中作用

二叉排序树&#xff08;Binary Search Tree, BST&#xff09;在实际生活中有多种应用&#xff0c;主要用于需要快速查找、插入和删除操作的场景。以下是一些常见的应用领域和具体示例&#xff1a; 1.数据库索引 数据库系统中经常使用 BST 作为索引结构。例如&#xff0c;B-tr…...

单例模式的学习

示例&#xff1a; #ifndef TEST_H #define TEST_Hclass test { public:static test * GetINSTANCE();void print(); private:test(); };#endif // TEST_H#include "test.h" #include <QMutex> #include <QDebug> test::test() {}test *test::GetINSTANC…...

54 mysql 中各种 timeout - connect/wait/interactive/read/write_timeout

前言 在 mysql 的服务器配置中, 我们经常会使用到几个 timeout 诸如 connect_timeout, wait_timeout, interactive_timeout, read_timeout, write_timeout 等等 我们 这里来看一下 他们的具体的使用场景, 以及具体控制的相关信息 是什么 connect_timeout 这个是 客户端 和…...

实战案例(5)防火墙通过跨三层MAC识别功能控制三层核心下面的终端

如果网关是在核心设备上面&#xff0c;还能用MAC地址进行控制吗&#xff1f; 办公区域的网段都在三层上面&#xff0c;防火墙还能基于MAC来控制吗&#xff1f; 采用正常配置模式的步骤与思路 &#xff08;1&#xff09;配置思路与上面一样 &#xff08;2&#xff09;与上面区…...

【智能流体力学】数值模拟中的稳态和瞬态

在流体力学和数值模拟中, 稳态 (Steady State)意味着流体的物理量(如速度、压力、温度等)不随时间变化。换句话说,在稳态模拟中,系统已经达到了平衡,任何位置上的流场特性都不再随时间发生变化。 其他教程参考:https://doc.cfd.direct/openfoam/user-guide-v12/index…...

Vue-Route4 ts

小满学习视频 Vue-Route 官网 项目的目录结构&#xff1a; 1. Vue-Router的使用 安装Vue-route pnpm add vue-router4创建router文件 /route/index.vue import { createRouter } from "vue-router"; import {createMemoryHistory,createWebHashHistory,create…...

sizeof和strlen的小知识

Hello~,欢迎大家来到我的博客进行学习&#xff01; 目录 1.sizeof和strlen&#x1f63a;1.1 sizeof&#x1f970; 1.2 strlen&#x1f60b;1.3 sizeof和strlen的对比&#x1f47b; 1.sizeof和strlen&#x1f63a; 1.1 sizeof&#x1f970; sizeof是一种单目操作符&#xff0c…...

Java项目: 基于SpringBoot+mybatis+maven宠物咖啡馆平台(含源码+数据库+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismaven宠物咖啡馆平台 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单…...

戴尔14代服务器配置IDRAC9远程配置说明

一、规划管理网段 规划管理网段&#xff0c;要求如下&#xff1a; 管理网段与业务网段不能使用同一网段&#xff1b;管理网段与业务网段不能直接互通&#xff1b;如有条件管理网与业务网使用不同设备接入。 二、配置服务器idrac 2.1、确认idrac口位置 2.2、开机进F2 2.3、 …...

如何让你家里的电脑连接公司的远程桌面

在远程工作日益普遍的今天&#xff0c;能够从家里的电脑连接到公司的远程桌面&#xff0c;不仅可以提高工作效率&#xff0c;还能确保工作的连续性和数据的安全性。本文将详细指导你如何设置并实现从家中电脑连接至公司远程桌面的过程&#xff0c;无论你是使用Windows还是Mac系…...

软件:分享8个常用视频剪辑免费软件,你都用过吗?

随着视频剪辑的需求增多&#xff0c;现在市面上都有很多好用的视频剪辑软件&#xff0c;有的收费有的免费&#xff0c;不同的视频剪辑软件有不同的特点和优势。本文整理了几个简单好用的电脑视频剪辑工具&#xff0c;供大家参考。 不同的剪辑技术对应了不同的视频剪辑软件&…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...