Python 从PDF中提取图片和图片信息(坐标、宽度和高度等)

目录

使用工具

Python从PDF的特定页面中提取图片

Python从PDF文档中提取图片

Python从PDF中提取图片的坐标、宽度和高度等信息


PDF文件作为一种广泛使用的电子文档格式,不仅包含文字信息,还可能包含各种图片、图表等视觉元素。在某些场景下,我们可能需要从PDF文件中提取这些图片,用于其他用途,比如插入到演示文稿中,或者进行进一步的编辑和处理。手动从PDF中提取图片是一项耗时的工作,尤其是当需要处理大量PDF文档时。而使用Python自动化这一过程,可以大幅节省时间和精力。这篇博客将探讨如何使用Python从PDF中提取图片以及图片的相关信息如坐标、宽度和高度等

使用工具

本文使用的是Spire.PDF for Python库来实现从PDF中提取图片和图片信息。

你可以通过在终端运行以下命令来从PyPI安装Spire.PDF for Python:

pip install Spire.PDF

Python从PDF的特定页面中提取图片

要从PDF的特定页面中提取图片,首先需要使用PdfDocument.Pages[page_index]属性访问目标页面。之后,使用PdfImageHelper.GetImagesInfo(page) 方法获取该页面上的图片信息。最后使用PdfImageInfo.Image.Save() 方法将每个图片保存为独立的图片文件。具体步骤如下:

  • 创建 PdfDocument 类的实例并使用 PdfDocument.LoadFromFile() 方法加载 PDF 文档。
  • 使用PdfDocument.Pages[page_index]属性访问目标页面,这里的page_index表示页面的索引,从0开始计数。
  • 创建 PdfImageHelper 实例。
  • 使用 PdfImageHelper.GetImagesInfo(page) 方法获取目标页面中的图片信息。
  • 循环遍历获取结果,使用 PdfImageInfo.Image.Save() 方法将每张图片保存为独立的图片文件。
from spire.pdf.common import *
from spire.pdf import *
import osdef extract_images_from_pdf_page(pdf_path, page_index, output_dir):"""从 PDF 文件的指定页面中提取图片,并将其保存到指定的输出目录中。参数:pdf_path (str): PDF 文件的路径。page_index (int): 要提取图片的页面的索引值。output_dir (str): 输出图片文件的目录。"""# 创建 PdfDocument 实例并加载 PDF 文件doc = PdfDocument()doc.LoadFromFile(pdf_path)# 获取需要提取图片的目标页面page = doc.Pages[page_index]# 创建 PdfImageHelper 实例image_helper = PdfImageHelper()# 获取目标页面的图片信息image_infos = image_helper.GetImagesInfo(page)image_count = 1# 提取并保存图片for image_index in range(len(image_infos)):# 指定输出文件名output_file = os.path.join(output_dir, f"Image-{image_count}.png")# 将图片保存为图片文件image_infos[image_index].Image.Save(output_file)image_count += 1doc.Close()# 使用示例
extract_images_from_pdf_page("示例.pdf", 1, "C:/Users/Administrator/Desktop/图片")

Python从PDF文档中提取图片

要从整个PDF文档中提取图片,只需要循环遍历文档中的页面,然后重复上面的步骤,从每个页面上提取图片信息,最后将图片保存为独立的图片文件即可。具体步骤如下:

  • 创建 PdfDocument 实例并使用 PdfDocument.LoadFromFile() 方法加载 PDF 文档。
  • 创建 PdfImageHelper 实例。
  • 循环遍历文档中的页面。
  • 使用 PdfImageHelper.GetImagesInfo(page) 方法获取每个页面中的图片信息。
  • 遍历获取结果,使用 PdfImageInfo.Image.Save() 方法将每张图片保存为图片文件。
from spire.pdf.common import *
from spire.pdf import *def extract_images_from_pdf(pdf_path, output_dir):"""从 PDF 文件中提取所有图片,并将其保存到指定的输出目录中。参数:pdf_path (str): 输入 PDF 文件的路径。output_dir (str): 输出图片文件的目录。"""# 创建 PdfDocument 实例并加载 PDF 文件doc = PdfDocument()doc.LoadFromFile(pdf_path)# 创建 PdfImageHelper 实例image_helper = PdfImageHelper()image_count = 1# 循环遍历每个页面for page_index in range(doc.Pages.Count):page = doc.Pages[page_index]# 获取页面的图片信息image_infos = image_helper.GetImagesInfo(page)# 提取并保存图片for image_index in range(len(image_infos)):# 指定输出文件名output_file = os.path.join(output_dir, f"Image-{image_count}.png")# 将图片保存为图片文件image_infos[image_index].Image.Save(output_file)image_count += 1doc.Close()# 使用示例
extract_images_from_pdf("示例.pdf", "C:/Users/Administrator/Desktop/图片")

Python从PDF中提取图片的坐标、宽度和高度等信息

要提取 PDF 文件中图片的信息,例如位置(X和Y坐标)、宽度和高度,可以使用 PdfImageInfo.Bounds.XPdfImageInfo.Bounds.YPdfImageInfo.Bounds.WidthPdfImageInfo.Bounds.Height 属性。具体步骤如下:

  • 创建 PdfDocument 实例并使用 PdfDocument.LoadFromFile() 方法加载 PDF 文档。
  • 创建 PdfImageHelper 实例。
  • 循环遍历文档中的页面。
  • 使用 PdfImageHelper.GetImagesInfo(page) 方法获取每个页面中的图片信息。
  • 遍历获取结果,使用 PdfImageInfo.Bounds.XPdfImageInfo.Bounds.YPdfImageInfo.Bounds.WidthPdfImageInfo.Bounds.Height 属性获取图片的坐标、宽度和高度。
from spire.pdf.common import *
from spire.pdf import *def print_pdf_image_info(pdf_path):"""打印 PDF 文件中图片的坐标、宽度和高度。参数:pdf_path (str): 输入 PDF 文件的路径。"""# 创建 PdfDocument 实例并加载 PDF 文件doc = PdfDocument()doc.LoadFromFile(pdf_path)# 创建 PdfImageHelper 实例image_helper = PdfImageHelper()# 循环遍历每个页面for page_index in range(doc.Pages.Count):page = doc.Pages[page_index]# 获取页面的图片信息image_infos = image_helper.GetImagesInfo(page)# 打印图片的坐标位置、宽度和高度for image_index, image_info in enumerate(image_infos):print(f"第 {page_index + 1} 页, 第 {image_index + 1} 个图片:")print(f"  图片位置: ({image_info.Bounds.X}, {image_info.Bounds.Y})")print(f"  图片大小: {image_info.Bounds.Width} x {image_info.Bounds.Height}")doc.Close()# 使用示例
print_pdf_image_info("示例.pdf")

Python 提取PDF图片信息

以上就是使用Python从PDF中提取图片和图片坐标、宽度和高度等信息的全部内容。本文完。

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

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

相关文章

【Linux】安装PHP扩展-Swoole

说明 本文档是在centos7.6的环境下,安装PHP7.4之后,安装对应的PHP扩展Swoole。 一、swoole简述 Swoole 是一个为 PHP 设计的高性能的异步并行网络通信引擎,它以扩展(extension)的形式存在,极大地提升了 …

zephyr设置BLE广播数据实例

目录 实例1:静态开启广播数据实例2:动态更改广播数据实例3:创建可连接的广播 实例1:静态开启广播数据 新建一个hello world的工程模板。 在prj.conf中开启蓝牙 CONFIG_BTy这个宏,默认会开启广播支持 ( BT_BROADCAS…

Spring Boot项目的404是如何发生的

问题 在日常开发中,假如我们访问一个Sping容器中并不存在的路径,通常会返回404的报错,具体原因是什么呢? 结论 错误的访问会调用两次DispatcherServlet:第一次调用无法找到对应路径时,会给Response设置一个…

TCP与UDP的理解

文章目录 UDP协议UDP协议的特点UDP的应用以及杂项 TCP协议TCP协议段格式解释和TCP过程详解确认应答机制 -- 序号和确认序号以及6位标志位中的ACK超时重传机制连接管理机制 与标志位SYN,FIN,ACK滑动窗口流量控制拥塞控制延迟应答捎带应答和面向字节流粘包问题TCP异常情况TCP特点…

5.4 软件工程-系统设计

系统设计 - 概述 设计软件系统总体结构 数据结构及数据库设计 编写概要设计文档、评审 详细设计的基本任务 真题

anaconda常用指令学习

在win系统下安装完成后,需要进行环境变量的配置 配置环境变量,把下面的4个目录全部加到PATH变量里面。 Anaconda安装目录的根目录\ Anaconda安装目录的根目录\Scripts Anaconda安装目录的根目录\Library\bin Anaconda安装目录的根目录\Library\mingw-w6…

[米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-15 SPI接收程序设计

软件版本:Anlogic -TD5.9.1-DR1_ES1.1 操作系统:WIN10 64bit 硬件平台:适用安路(Anlogic)FPGA 实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台:https://milianke.tmall.com/ 登录“米联客”FPGA社区 ht…

Michael.W基于Foundry精读Openzeppelin第64期——UUPSUpgradeable.sol

Michael.W基于Foundry精读Openzeppelin第64期——UUPSUpgradeable.sol 0. 版本0.1 UUPSUpgradeable.sol 1. 目标合约2. 代码精读2.1 modifier onlyProxy()2.2 modifier notDelegated()2.3 proxiableUUID()2.4 upgradeTo(address newImplementation) && _authorizeUpgra…

linux服务器登录mysql无异常,本地登录报1045 -Access denied for user

1、本地登录linux服务器报“1045 -Access denied for user (用户访问被拒绝)” 造成上面链接问题的原因是,用户权限不足,需要在linux服务器上执行如下2条命令即可 CREATE USER root127.0.0.1 IDENTIFIED BY root123; GRANT ALL P…

新美业和传统美业的区别在哪些方面?连锁美业SaaS收银系统源码

新美业和传统美业在很多方面存在着显著的区别。传统美业通常指的是传统的美容美发行业,而新美业则更多地与科技、数字化和创新相关。随着科技的不断发展和消费者需求的变化,新美业将继续引领美容行业的发展趋势。 以下是传统美业和新美业之间的一些区别…

用 AI 写歌词,让音乐表达与众不同

在音乐的广袤天地中,我们都渴望通过独特的表达来触动人心,展现自我。而如今,AI 技术的崛起为音乐创作带来了全新的突破,让我们能够以一种前所未有的方式赋予音乐独特的灵魂。 “妙笔生词智能写歌词软件(veve522&#…

Docker缩小镜像体积与搭建LNMP架构

镜像加速地址 {"registry-mirrors": ["https://docker.m.daocloud.io","https://docker.1panel.live"] } daemon.json 配置文件里面 bip 配置项中可以配置docker 的网段 {"graph": "/data/docker", #数据目录&#xff0…

领航Linux UDP:构建高效网络新纪元

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 引言Udp和Tcp的异同相同点不同点总结 1.1、socket1.2、bind1.3、recvfrom1.4、sendto2.1、代码2.1、说明3.1、代码3.2、说明 引言 在前几篇博客中,我们学习了Linux网络编程中的一些概念。…

【数据结构(邓俊辉)学习笔记】高级搜索树02——B树

文章目录 1. 大数据1.1 640 KB1.2 越来越大的数据1.3 越来越小的内存1.4 一秒与一天1.5 分级I/O1.6 1B 1KB 2. 结构2.1 观察体验2.2 多路平衡2.3 还是I/O2.4 深度统一2.5 阶次含义2.6 紧凑表示2.7 BTNode2.8 BTree 3. 查找3.1 算法过程3.2 操作实例3.3 算法实现3.4 主次成本3.…

JAVASE——图书管理系统

JAVASE图书管理系统 主要业务有:管理员(增删改查),会员(借书还书查看记录) 管理员主要有:查看图书,增加图书,修改图书,会员管理,删除图书, 会员主要有&#x…

昇思25天学习打卡营第22天|GAN图像生成

今天是参加昇思25天学习打卡营的第22天,今天打卡的课程是“GAN图像生成”,这里做一个简单的分享。 1.简介 今天来学习“GAN图像生成”,这是一个基础的生成式模型。 生成式对抗网络(Generative Adversarial Networks,GAN)是一种…

Bug:时间字段显示有问题

Bug:时间字段显示有问题 文章目录 Bug:时间字段显示有问题1、问题2、解决方法一:添加注解3、解决方法二:消息转换器自定义对象映射器配置消息转换器 1、问题 ​ 在后端传输时间给前端的时候,发现前端的时间显示有问题…

[Spring] Spring Web MVC案例实战

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

AV1技术学习:Translational Motion Compensation

编码块根据运动矢量在参考帧中找到相应的预测块,如下图所示,当前块的左上角的位置为(x0, y0),在参考帧中找到同样位置(x0, y0)的块,根据运动矢量移动到目标参考块(左上角位置为:(x1, y1))。 AV1…

前端a-tree遇到的问题

在使用a-tree时候,给虚拟滚动的高度,然后展开a-tree滑动一段距离 比如这样 随后你切换页面,在返回这个页面的时候 就会出现这样的bug 解决方法: onBeforeRouteLeave((to, from, next) > {// 可以在路由参数变化时执行的逻辑ke…