Python:PDF转长图像和分页图像

news2025/1/21 18:37:20

简介:随着电子化文档的普及,PDF文件的使用频率越来越高。有时我们需要将PDF中的内容转化为图片格式进行分享或编辑,那么如何才能轻松地完成此任务呢?本文将为你展示一个Python工具:如何将PDF文件转化为图片,包括将PDF转化为长图像和每页分别转为单独的图像。

历史攻略:

python:pdf 转 word

安装步骤:

# Ubuntu:
sudo apt-get update
sudo apt-get install python3-pip
sudo apt-get install poppler-utils
pip3 install pdf2image
pip3 install Pillow

# CentOS:
yum update
yum install python3-pip
yum install poppler-utils
pip3 install pdf2image
pip3 install Pillow

# Windows 10:
安装Python:访问Python官网下载并安装Python。
安装poppler:下载poppler for Windows并解压。
设置poppler环境变量:将poppler的bin目录路径添加到系统PATH环境变量中。

# 安装库
pip install pdf2image
pip install Pillow

参数说明:

pdf_path: 输入的PDF文件的路径。
output_image_path: 输出的长图像的路径。
output_folder: 输出的单页图像的文件夹路径。
poppler_path: poppler工具的bin目录路径,此路径是在Windows下必要的,因为pdf2image库需要它来进行PDF到图像的转换。

案例源码:

# -*- coding: utf-8 -*-
# time: 2023/10/23 15:53
# file: pdf2picture.py
# 公众号: 玩转测试开发

import os
from pdf2image import convert_from_path
from PIL import Image


def pdf_to_long_image(pdf_path, output_image_path):
    # 从PDF提取每一页为图像
    pages = convert_from_path(pdf_path, poppler_path='C:\\Users\\poppler-23.08.0\\Library\\bin')

    # 获取总的高度
    total_height = sum(page.height for page in pages)

    # 创建一个空白的长图像
    long_image = Image.new('RGB', (pages[0].width, total_height))

    # 将每一页的图像粘贴到长图像上
    y_offset = 0
    for page in pages:
        long_image.paste(page, (0, y_offset))
        y_offset += page.height

    # 保存长图像
    long_image.save(output_image_path)


def pdf_to_images(pdf_path, output_folder):
    # 将PDF转换为PIL图像列表
    pages = convert_from_path(pdf_path, poppler_path='C:\\Users\\poppler-23.08.0\\Library\\bin')

    # 确保输出文件夹存在
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    # 将每页保存为单独的图像
    for i, page in enumerate(pages):
        image_filename = os.path.join(output_folder, f"output_image_page_{i + 1}.png")
        page.save(image_filename, "PNG")


if __name__ == '__main__':
    pdf_path = 'qp_01.pdf'
    output_folder = 'output_images'

    # 使用示例
    pdf_to_long_image('qp_01.pdf', 'output_image.png')
    pdf_to_images(pdf_path, output_folder)

运行结果:

图片

1、使用pdf_to_long_image函数,将得到合并了PDF所有页面长图像。

2、使用pdf_to_images函数,会在指定的输出文件夹中得到每一页PDF的单独图像文件,文件名格式为output_image_page_页码.png。

注意事项:

1、确保已经安装了所有必要的库和工具。

2、输入的PDF文件路径应该是有效的,否则程序会报错。

3、在Windows系统下,确保已经设置了poppler的环境变量或在代码中提供了正确的poppler路径。

4、生成的图像可能会占用较大存储空间,特别是当PDF文件页数较多时。

总结:通过Python可以轻松地实现PDF到图像的转换,不仅可以将整个PDF转为一个长图像,还可以将每一页分别转为单独的图像。这个小工具对于那些经常需要处理PDF的人来说非常有用。

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

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

相关文章

Macroscope安全漏洞检测工具简介

学习目标: 本介绍旨在帮助感兴趣者尽快了解 Macroscope,这是一款用于安全测试自动化和漏洞管理的企业工具。 全覆盖应用程序安全测试: 如下图所示,如果使用多种互补工具(SAST/DAST/SCA 等)来检测应用程序…

redis的两种持久化的方式 RDB AOF

1. RDB持久化 就是将某个时间点的数据快照,全部保存在磁盘的二进制文件中。 可以选择命令手动触发: save命令,阻塞式保存快照数据,会阻塞其它操作 bgsave,开启子线程执行RDB 或者配置文件配置自动触发: 在r…

C#中只能在.NetFramework下使用LINQtoSQL不要在.net 下使用

目录 一、在net7.0下无法实现LINQtoSQL 1.VS上建立数据库连接 2.VS上创建LINQtoSQL 二、在.NetFramework4.8下成功实现LINQtoSQL 1.VS上建立数据库连接 2.VS上创建LINQtoSQL 三、结论 四、理由 本文是个人观点,因为我百般努力在.net7.0下无法实现LINQtoSQL的…

走近Python爬虫(二):常见反爬虫机制的应对措施

文章目录 一、应对—异步加载1.一般措施2.Selenium 二、应对—登录验证1.使用Selenium模拟登录2.使用Cookies登录3.使用Session模拟表单登录 三、应对—验证码 本文是Python爬虫系列博客的第二篇,内容概览如下: 一、应对—异步加载 1.一般措施 AJAX技术…

【操作系统】Cygwin和MinGW的区别与联系是怎样的?

Cygwin和MinGW的区别与联系是怎样的? CygwinMinGW两者的区别和联系参考资料 Cygwin和MinGW都是为Windows系统开发者设计的工具。 Cygwin Cygwin, 原Cygnus出品,目前是RedHat名下的项目。项目的目的是提供运行于Windows平台的类Unix环境&…

Linux - 浅析守护进程的概念

Linux下的守护进程是在后台运行的特殊进程,它不与任何终端关联,通常在系统启动时自动启动,运行在后台并且不受用户登录或注销的影响。Linux 下的守护进程通常是以系统管理员的权限运行,用来执行一些系统任务,例如监控硬…

MATLAB R2023b(编程和数学计算软件)

MATLAB R2023b是一款最新版本的编程和数学计算软件,它包含了大量用于算法开发、数据可视化、数据分析、数据模拟以及交互式环境的功能,使得用户能够更加方便灵活地进行科学研究或者工程应用。 MATLAB R2023b相较于之前的版本,增加了一些新的…

同城售后系统退款业务重构心得 | 京东云技术团队

一、重构背景 1.1、退款 到家、小时购、天选退款有2套结构,代码逻辑混乱; 其中小时购、天选部分售后单是和平生pop交互退款,部分是和售后中台交互退款;并且兼容3套逻辑; 痛点:代码繁重,缺乏…

猫头虎博主:Python数据分析,你掌握了吗?

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

自动驾驶的同学看过来:DriveLM:世界首个语言+自动驾驶全栈开源数据集

DriveLM:世界首个语言自动驾驶全栈开源数据集,旨在借助大语言模型和海量自然语言数据集,构筑复杂场景下安全、精准、可解释的自动驾驶系统,突破现有自动驾驶推理能力上限,数据集已开源! DriveLM提供了量化…

多叉树OJ思路 ,无代码

也是第一次写森林树,确实不是很拿捏,受二叉树的影响太多了;你会发现这个多叉树一般不建链式结构的,都是数组式的比如“双亲表示法”,让子节点可以找到父节点这样。 有疑问欢迎交流,作者我也是蒟蒻&#xff…

精进·第2篇:分享一个3-5年战略规划框架思路

首发:麦子禾咨询 作者:石头 前几天,石头分享过一个简单的战略规划框架思路,本篇,石头打算再分享一个相对复杂的3-5年战略规划框架思路。 每种战略规划框架思路,都有其局限性,有些受限于行业属…

MySQL 外连接和内连接的查询优化怎么做?

目录 1. 表连接方式的分类和需要注意的细节 2. 表连接时底层做了什么事? 3. 左外连接优化方案 4. 内连接优化方案 1. 表连接方式的分类和需要注意的细节 多表连接查询,大体上可以分为内连接与外连接。 内连接的意思就是把两个表有关联的部分都取出…

二叉树进阶 - (C++二叉搜索树的实现)

二叉树进阶 - (二叉搜索树的实现) 二叉搜索树1. 二叉搜索树概念2. 二叉搜索树操作2.1 二叉搜索树的查找2.2 二叉搜索树的插入2.3 二叉搜索树的删除(重点) 3. 二叉搜索树的(代码)实现 二叉搜索树 1. 二叉搜索树概念 二叉搜索树又称二叉排序树&#xff0…

MySQL是如何优化in子查询的?

目录 前言 一、普通in子查询 二、物化表 三、SQL优化 四、IN语句的优化方式 1. 使用子查询代替IN查询 2. 使用JOIN代替IN查询 3. 使用EXISTS代替IN查询 4. 使用索引优化IN查询 5. 优化查询语句 总结 前言 对于很多的开发小伙伴来说,在MySQL中进行in子查…

Antlr4学习笔记

目录 背景 相关概念 流程说明 入门示例 简易计算器 环境准备 开发 java8方法提取 语法规则 常用的语法要点 设计语法 序列模式 选择模式 词法符号依赖 嵌套模式 总结 参考资料 背景 在阅读shardingjdbc-4.1.1代码时,发现一段sql解析的逻辑&#x…

极智开发 | H100服务器的庐山真面目

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文分享一下 H100服务器的庐山真面目。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq H100 是英伟达最强显卡,当然其实也…

stable-diffusion 电商领域prompt测评集合

和GhostReivew一个思路,还是从比较好的图片或者是civitai上找一些热门的prompt,从小红书上也找到了不少的prompt,lexica.art上也有不少,主要是为了电商场景的一些测评: 小红书、civitai、Lexica、Liblib.ai、 depth o…

基于GEE云平台一种快速修复Landsat影像条带色差的方法

这是之前关于去除遥感影像条带的另一篇文章,因为出版商推迟了一年发布,所以让大家久等了。这篇文章的主要目的是对Landsat系列卫星因为条带拼接或者镶嵌产生的条带来进行的一种在线修复方式。 原文连接 一种快速修复Landsat影像条带色差的方法 题目&a…

app开发之后需要做什么

在完成app的开发之后,还有一系列的工作需要进行,以确保app的顺利上线和用户的良好体验。下面将从原理和详细介绍两个方面来介绍app开发之后需要做的工作。 一、原理介绍 1. 测试与调试:在app开发完成后,需要进行全面的测试与调试…