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

PDF转图片的思路思考

记录时间:2022年9月1日

PDF转图片库的使用和扩展

python有几个开源的免费的处理Pdf的库,甚至有的已经有很完善的功能了。我发挥一下自己的所学,看看能不能把它变为可用的一程序。

首先是了解PDF处理库PyMupdf,这个库得到路径之后普就可以对pdf文件进行处理,那么我要做的就是提供这一个文件的路径和输出的位置以及输出的一些设置,命名之类的。这个库安装可以使用pip也可以在pycharm的插件里找。

plaintext

1
pip install PyMuPDF

读取路径

那么首先就让用户输入路径,我们使用os.listdir(path)来获取文件和文件夹的列表,这是不包括子文件夹内的,咱们暂时不考虑子文件夹内的,毕竟写完一个文件夹只要来一个递归内部文件夹也就是小菜一碟。当然在这一切之前要准备好我们要调用的库:

plaintext

1
2
import os
import fitz

判断文件或文件夹

我们只对文件做处理,使用os.path.isdir(path)或者os.path.isfile(path)就可以判断文件或者文件夹了。注意这里的path参数要嘛是相对于py文件的相对路径,要么就是绝对路径,仅给出文件名或者文件夹名称是无法得到正确结果的,会全部返回false;

读取文件

读取pdf文件的流程和方法,首先找到pdf文件,读取PDF文件的元数据乃至于页面,对每个页面进行操作,再进行保存。

找到pdf很简单,之前已经用os.listdir方法获得了文件列表并判断哪些是文件,那么对属于文件的那些加入一个列表,再进行后缀名的判断即可。这里使用:

plaintext

1
os.path.splitext(filename)[1]

这个方法会将filename分成两个部分,使用下标读取属于后缀名那一部分。判断这一部分是否为.pdf就号,这里记录文件原本的文件名,在后续输出结果重命名时会起作用。

那么判断为pdf文件之后就要进行操作。

打开文档是进行一切操作的基础:这里我们使用fitz.open(filename)方法来打开一个文档,同样必须是一个路径,能让程序找到的路径。将打开文档返回值赋予一个变量,即得到文档对象。

plaintext

1
doc=fitz.open(filename)

这时的文档对象具有一系列方法与属性:

plaintext

1
2
3
4
5
doc.page_count #页数
doc.metadata #元数据
doc.get_toc() # 获取目录
doc.load_page(pno) #读取指定页面
#doc[pno] #读取页面的另一种方法

元数据为一个充满描述数据的字典也就是键值对集合,和我们的主题关系不大我们暂且不谈。获取目标目录或者说目标大纲也并非必要,让我们进入pdf转图片最重要的一节:页面的处理。

操作页面

必须先从文档对象里提取出页面才能进行操作,提取页面可以用:

plaintext

1
2
doc.load_page(pno) #读取指定页面
#doc[pno] #读取页面的另一种方法

这两个方法是一样的,都是按页码获取页面甚至可以倒序进行。

当然了还有更高级的用法,将文档作为页面的迭代器:

plaintext

1
2
3
4
5
6
7
8
9
10
for page in doc:# do something with 'page'# ... or read backwards
for page in reversed(doc):# do something with 'page'# ... or even use 'slicing'
for page in doc.pages(start, stop, step):# do something with 'page'

那么获取了页面之后具体做什么操作呢?

plaintext

1
2
3
4
5
6
7
8
9
10
links=page.get_links() #获取页面所有链接
for link in page.links(): #do sth
#这里是作为迭代器使用
#注释与表单同理
for annot in page.annots():# do something with 'annot'for field in page.widgets():# do something with 'field'

我们这里要进行的最重要的操作是得到页面的图像

plaintext

1
pix = page.get_pixmap()

这个方法得到页面的RGB图像,还有很多可以设定的参数:

plaintext

1
2
#创建RGBA图像(即,包含alpha通道),也就是包含透明度通道
pix=page.get_pixmap(alpha=True)

关于get_pixmap()方法:

plaintext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
如何提高图像分辨率
文档页面的图像由像素映射表示,创建像素映射的最简单方法是通过方法 Page.get_pixmap()。此方法有许多选项可以影响结果。其中最重要的是矩阵,它可以让你缩放,旋转,扭曲或镜像结果。默认情况下Page.get_pixmap() 将使用单位矩阵,它不执行任何操作。在下文中,我们将缩放系数 2 应用于每个维度,这将生成分辨率高 4 倍(也是大小约 4 倍)的图像:zoom_x = 2.0  # horizontal zoom
zoom_y = 2.0  # vertical zoom
mat = fitz.Matrix(zoom_x, zoom_y)  # zoom factor 2 in each dimension
pix = page.get_pixmap(matrix=mat)  # use 'mat' instead of the identity matrix
从版本 1.19.2 开始,有一种更直接的方法来设置分辨率:可以使用参数(每英寸点数)代替 。要创建页面的 300 dpi 图像,请指定 。除了符号简洁之外,此方法还具有 dpi 值与图像文件一起保存的额外优点 - 这在使用矩阵表示法时不会自动发生。"dpi""matrix"pix = page.get_pixmap(dpi=300)

具体的参数可以查阅官方手册,也可以百度资料。

还可以使用page.get_svg_image()创建页面的矢量图像。

那么得到图像就要保存啊:

plaintext

1
2
pix.save("page-%i.png" % page.number)
#这样就是直接用页面编码命名然后保存在和程序同一个目录下了

其他方法例如获取页面文本图像之类的甚至可以搜索文本!但在这里不是重点就是了。

plaintext

1
2
text = page.get_text(opt) #提取文字(opt为选项)
areas = page.search_for("mupdf") #搜索文字

那么到这整体流程就清楚了让我们开始程序编写吧!

相关文章:

PDF转图片的思路思考

记录时间:2022年9月1日 PDF转图片库的使用和扩展 python有几个开源的免费的处理Pdf的库,甚至有的已经有很完善的功能了。我发挥一下自己的所学,看看能不能把它变为可用的一程序。 首先是了解PDF处理库PyMupdf,这个库得到路径之后普就可以对…...

lnmp - 登录技术方案设计与实现

概述 登录功能是对于每个动态系统来说都是非常基础的功能,用以区别用户身份、和对应的权限和信息,设计出一套安全的登录方案尤为重要,接下来我介绍一下常见的认证机制的登录设计方案。 方案设计 HTTP 是一种无状态的协议,客户端…...

如何在 Qt 的 QListWidget 中逐行添加和显示数据

文章目录 如何在 Qt 的 QListWidget 中逐行添加和显示数据目标实现步骤1. 在 Qt Designer 中添加 QListWidget2. 在代码中逐行添加数据示例代码 代码解析3. 使用自定义项 运行效果总结 如何在 Qt 的 QListWidget 中逐行添加和显示数据 QListWidget 是 Qt 提供的一个非常方便的…...

Java API 之集合框架进阶

前言: 本文主要讲解集合框架中的List、Set、Map接口中的进阶知识,主要是分析其底层原理和优缺点。 1. List 接口 1.1 ArrayList import java.util.ArrayList; import java.util.List;public class ArrayListExample {public static void main(String[] …...

Java String isEmpty()方法

在Java中,String 类的 isEmpty() 方法用来检测一个字符串是否为空。以下是一些关于此方法的关键信息: 方法声明:public boolean isEmpty()功能:通过检查字符串的长度来判断字符串是否为空。返回值:如果字符串为空则返…...

Redisson分布式锁分析,可重入、可续锁(看门狗)

前言 在此说明,本文章不只是讲一些抽象的概念,而是可落地的,在日常工作中基本上进行修改一下便可以使用。书接上回,上篇自研分布式锁的文章使用是一个自己手写的一个分布式锁,按照JUC里面java.util.concurrent.locks.L…...

C++掉血迷宫

目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。 程序 #include <iostream> #include <string> #include <cstring> using namespace std; enum RBYG {R 1,B 2,Y 4,G 7, }; struct heal {int ix…...

Spring Boot- 数据库相关问题

Spring Boot 与数据库相关问题及其解决方案 1. 引言 Spring Boot简化了Java企业级应用的开发&#xff0c;尤其在与数据库交互方面提供了诸多便利。Spring Boot提供了多种数据库集成方案&#xff0c;涵盖关系型数据库&#xff08;如MySQL、PostgreSQL等&#xff09;与非关系型…...

秒懂C++之特殊类设计

目录 设计一个类&#xff0c;不能被拷贝 设计一个类&#xff0c;只能在堆上创建对象 设计一个类&#xff0c;只能在栈上创建对象 设计一个类&#xff0c;无法被继承 设计一个类&#xff0c;只能创建一个对象(单例模式) 饿汉模式 懒汉模式 设计一个类&#xff0c;不能被拷…...

人工智能学习

&#x1f310;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 &#x1f449;【点击跳转到网站&#xff1a;人工智能教程】 什么是人工智能&#xff1f;通俗来讲&#xff0c;就是让机器能像人一样思考。这…...

WINDOWS AGENTARENA:EVALUATING MULTI-MODAL OS AGENTS AT SCALE论文学习

文章开头说现有的agent都是局限于特定领域&#xff08;什么网络问答啊&#xff0c;仅限文字啊&#xff0c;仅限于某一个app啊&#xff09;这样的&#xff0c;本文的工作主打一个贴近用户使用场景&#xff0c;用户用什么软件&#xff0c;看什么网页&#xff0c;本文的模型就用什…...

3步轻松定制报价方案,亿发商城报价神器你用过了吗?

如果您正寻求突破传统业务模式的束缚&#xff0c;希望拥抱数字化转型带来的无限可能&#xff0c;我们诚邀您体验亿发软件。亿发专业团队将为您提供个性化的咨询和定制服务&#xff0c;帮助您的企业快速适应市场变化&#xff0c;实现业务模式和商业模式的创新。...

CISP备考题库(五)

在当今这个飞速发展的数字化时代&#xff0c;信息安全已跃居至前所未有的战略地位&#xff0c;其重要性伴随着技术的日新月异而持续攀升&#xff0c;成为了一个不容小觑的关键领域。为了激发并引领广大青年才俊积极投身于网络安全专家的崇高事业&#xff0c;我们精心策划并编纂…...

【Kubernetes】常见面试题汇总(二十三)

目录 69.考虑一家拥有分布式系统的跨国公司&#xff0c;拥有大量数据中心&#xff0c;虚拟机和许多从事各种任务的员工。您认为这样公司如何以与 Kubernetes 一致的方式管理所有任务&#xff1f; 70.考虑一种情况&#xff0c;即公司希望通过维持最低成本来提高其效率和技术运营…...

linux-Shell 编程-Shell 脚本基础

Linux Shell 编程&#xff1a;Shell 脚本基础 在Linux系统中&#xff0c;Shell脚本是一种强大的自动化工具。通过编写Shell脚本&#xff0c;用户可以自动化重复性任务、系统管理操作和程序控制流程&#xff0c;极大提高工作效率。 1. 什么是Shell脚本&#xff1f; Shell脚本是…...

Linux运维篇-tigervnc工具的使用

目录 简介下载使用clientserver配置文件服务管理 设定密码&#xff08;先切换成对应的用户&#xff09;&#xff1a;配置多用户的VNC tigervnc连接排错一、vnc密码错误二、vncserver端口忘记了三、连接很卡&#xff0c;或者画面没有反应四、服务报错 简介 TigerVNC是VNC的一种…...

基于Spark的电影推荐系统设计与实现(论文+源码)_kaic

摘 要 在云计算、物联网等技术的带动下&#xff0c;我国已步入大数据时代。电影是人们日常生活中重要的一种娱乐方式&#xff0c;身处大数据时代&#xff0c;各种类型、题材的电影层出不穷&#xff0c;面对琳琅满目的影片&#xff0c;人们常感到眼花缭乱。因此&#xff0c;如…...

基于python+django+vue的医院预约挂号系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于协同过滤pythondjangovue…...

镀金引线---

一、沉金和镀金 沉金和镀金都是常见的PCB金手指处理方式&#xff0c;它们各有优劣势&#xff0c;选择哪种方式取决于具体的应用需求和预算。 沉金&#xff08;ENIG&#xff09;是一种常用的金手指处理方式&#xff0c;它通过在金手指表面沉积一层金层来提高接触性能和耐腐蚀性…...

『功能项目』窗口可拖拽脚本【59】

本章项目成果展示 我们打开上一篇58第三职业弓弩的平A的项目&#xff0c; 本章要做的事情是给坐骑界面挂载一个脚本让其显示出来的时候可以进行拖拽 创建脚本&#xff1a;DraggableWindow.cs using UnityEngine; using UnityEngine.EventSystems; public class DraggableWindo…...

FLUX.1-dev零基础入门:5分钟学会用ComfyUI生成高质量AI图片

FLUX.1-dev零基础入门&#xff1a;5分钟学会用ComfyUI生成高质量AI图片 1. 为什么选择FLUX.1-dev FLUX.1-dev是由Black Forest Labs开发的开源AI图像生成模型&#xff0c;以其出色的图像质量和类似照片的真实感而闻名。与其他模型相比&#xff0c;它能够更高效地生成艺术感强…...

多模态扩展:OpenClaw结合Qwen3.5-4B-Claude处理截图信息

多模态扩展&#xff1a;OpenClaw结合Qwen3.5-4B-Claude处理截图信息 1. 为什么需要多模态能力 作为一个长期依赖文本交互的技术爱好者&#xff0c;我最初对OpenClaw的理解停留在"能通过自然语言控制电脑的AI助手"层面。直到上个月需要处理大量产品截图中的文字信息…...

nlp_structbert_sentence-similarity_chinese-large部署教程:NVIDIA Container Toolkit深度配置

nlp_structbert_sentence-similarity_chinese-large部署教程&#xff1a;NVIDIA Container Toolkit深度配置 1. 项目概述 今天要介绍的是一个特别实用的中文语义相似度分析工具——基于StructBERT-Large模型开发的本地化解决方案。这个工具专门解决中文句子对的语义匹配问题&…...

AI驱动的Vue3应用开发平台深入探究(十):物料系统之内置组件库

内置组件库&#xff08;Element Plus、Ant Design Vue、Vant&#xff09; VTJ 通过其统一的物料系统架构&#xff0c;与三个流行的 Vue 组件库提供了全面的集成。这一抽象层使开发者能够利用熟悉的组件模式&#xff0c;同时保持低代码的可扩展性和跨库的可移植性。该系统将组件…...

ComfyUI-Manager终极指南:10个技巧助你快速掌握AI绘图插件管理

ComfyUI-Manager终极指南&#xff1a;10个技巧助你快速掌握AI绘图插件管理 【免费下载链接】ComfyUI-Manager 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Manager ComfyUI-Manager是一款专为AI绘图工具ComfyUI设计的插件管理神器&#xff0c;能够帮助用户轻…...

自媒体人的秘密武器:OpenClaw+Qwen3-32B-Chat全平台内容分发

自媒体人的秘密武器&#xff1a;OpenClawQwen3-32B-Chat全平台内容分发 1. 为什么我需要一个自动化内容分发助手 去年夏天&#xff0c;我同时运营着公众号、微博和短视频三个平台。每次创作完核心内容后&#xff0c;总要花大量时间做格式转换&#xff1a;把长文章拆成微博线程…...

CPO-RBF分类(优化宽度+中心值+连接权值)可用于故障检测等方向 基于冠豪猪优化算法优化径...

CPO-RBF分类(优化宽度中心值连接权值)可用于故障检测等方向 基于冠豪猪优化算法优化径向基神经网络的数据分类预测&#xff0c;Matlab代码&#xff0c;可直接运行&#xff0c;适合小白新手 程序已经调试好&#xff0c;无需更改代码替换数据集即可运行 需要更换其他算法的都可以…...

如何高效管理《神界:原罪2》模组?Divinity Mod Manager终极指南

如何高效管理《神界&#xff1a;原罪2》模组&#xff1f;Divinity Mod Manager终极指南 【免费下载链接】DivinityModManager A mod manager for Divinity: Original Sin - Definitive Edition. 项目地址: https://gitcode.com/gh_mirrors/di/DivinityModManager Divini…...

【限时技术白皮书首发】:《边缘Python量化工具实战手册》V2.1——涵盖TVM 0.14 + MLIR + 自定义OP全流程

第一章&#xff1a;边缘Python量化工具概览与V2.1核心升级边缘Python量化工具是一套面向嵌入式AI场景的轻量级模型压缩与部署框架&#xff0c;专为资源受限设备&#xff08;如RISC-V MCU、Cortex-M7、ESP32-S3等&#xff09;设计&#xff0c;支持从PyTorch/TensorFlow模型无缝转…...

Linux内存管理:malloc与free实现原理详解

Linux内存管理&#xff1a;malloc和free的实现原理深度解析1. 动态内存分配基础1.1 malloc和free函数原型void* malloc(size_t size); void free(void* ptr);malloc函数分配指定字节数的内存空间&#xff0c;返回指向该空间的void指针。由于返回的是通用指针&#xff0c;使用时…...