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

python:reportlab 将多个图片合并成一个PDF文件

承上一篇:java:pdfbox 3.0 去除扫描版PDF中文本水印

# 导出扫描版PDF文件中每页的图片文件

java -jar pdfbox-app-3.0.3.jar export:images -prefix=test -i your_book.pdf
导出
Writing image: test-1.jpg
Writing image: test-2.jpg
Writing image: test-3.png
……

在日常工作中,我们经常需要将多张图片合并成一个PDF文件,以便于分享或打印。Python作为一种强大的编程语言,提供了丰富的库和工具,使得这一任务变得非常简单。在本文中,我们将介绍如何使用Python合并多张图片并生成一个PDF文件的方法。我们需要安装两个库:Pillow 和ReportLab。Pillow 用于处理图片,ReportLab 用于生成PDF文件。
pip install Pillow
pip install reportlab
  reportlab-4.2.2-py3-none-any.whl (1.9 MB)

编写 merge_pdf1.py  如下

# -*- coding: utf-8 -*-
""" PyMuPDF 将多个图片合并成一个PDF文件 """
import os
from PIL import Image
from reportlab.pdfgen import canvasimages_dir = "." # imgs
tmpdir = r"\tmp" # Win 10def revise(s):""" 修正图片文件名中的数字,假设0<页数<=999 """prefix = s[0:5]d = s.split('-')[1].split('.')[0]ext = s.split('.')[1]# 数字前补零if len(d) ==1:d = '00'+delif len(d) ==2:d = '0' +delse:passfilename = prefix + d +'.'+extos.rename(s, filename)return filenamedef merge_images_to_pdf(image_list, output_pdf):""" 使用画布 """c = canvas.Canvas(output_pdf)for image in image_list:print(image)img = Image.open(image)c.setPageSize((img.width, img.height))c.drawInlineImage(image, 0, 0)c.showPage()c.save()# main()
# 图片路径列表
img_list = [f for f in os.listdir(images_dir) if f.endswith(".jpg") or f.endswith(".png")]
imgs_list = []
for img in img_list:imgs_list.append(revise(img))
# 修正img文件名后排序
imgs_list = sorted(imgs_list)
# 输出PDF文件路径
output_path = os.path.join(tmpdir, 'result.pdf')
merge_images_to_pdf(imgs_list, output_path)

运行 python merge_pdf1.py 
生成 \tmp\result.pdf 

在这段代码中,我们首先导入了必要的库。然后定义了一个名为 merge_images_to_pdf 的函数,该函数将接受一个图片列表和输出PDF文件的路径作为参数。在函数中,我们使用 Pillow库打开每张图片,并将其逐一添加到PDF中。最后,我们保存生成的PDF文件。

相关文章:

python:reportlab 将多个图片合并成一个PDF文件

承上一篇&#xff1a;java&#xff1a;pdfbox 3.0 去除扫描版PDF中文本水印 # 导出扫描版PDF文件中每页的图片文件 java -jar pdfbox-app-3.0.3.jar export:images -prefixtest -i your_book.pdf 导出 Writing image: test-1.jpg Writing image: test-2.jpg Writing image: t…...

决策树:机器学习中的强大工具

什么是决策树&#xff1f; 决策树是一种通过树状结构进行决策的模型。它的每个节点代表一个特征&#xff08;或属性&#xff09;&#xff0c;每个分支代表特征的可能值&#xff0c;而每个叶子节点则代表最终的决策结果或分类。想象一下&#xff0c;在选择晚餐时&#xff0c;你…...

平面电磁波(解麦克斯韦方程)电场相位是复数的积分常数,电场矢量每个分量都有一个相位。磁场相位和电场一样,这是因为无损介质中实数的波阻抗

注意无源代表你立方程那个点xyzt处没有源&#xff0c;电场磁场也是这个点的。 j电流面密度&#xff0c;电流除以单位面积&#xff0c;ρ电荷体密度&#xff0c;电荷除以单位体积。 j方程组有16个未知数&#xff0c;每个矢量有三个xyz分量&#xff0c;即三个未知数&#xff0c;…...

复习HTML(进阶)

前言 上一篇的最后我介绍了在表单中&#xff0c;上传文件需要使用到 method属性 和enctype属性。本篇博客主要是详细的介绍这些知识 <form action"http://localhost:8080/test" method"post" enctype"multipart/form-data"> method属性…...

Qt 每日面试题 -7

61、如何安全的在另外一个线程中调用QObject对象的接口 QObject被设计成在一个单线程中创建与使用&#xff0c;因此&#xff0c;在一个线程中创建一个对象&#xff0c;而在另外的线程中调用它的函数&#xff0c;这样的行为不能保证工作良好。使用信号槽的队列连接或者QT的反射…...

《计算机原理与系统结构》学习系列——计算机的算数运算(下)

系列文章目录 目录 浮点数的表示和运算浮点数的表示浮点数的规格化浮点数标准IEEE754浮点数表示范围浮点数的转换浮点数的运算浮点数加法浮点数加法的硬件实现 精度浮点乘法浮点运算硬件 MIPS中的浮点指令 浮点数的表示和运算 浮点数的表示 表达非整型的数 可以表达很小和很大…...

二叉树进阶学习——从前序和中序遍历序列构造二叉树

1.题目解析 题目来源&#xff1a;105.从前序与中序遍历序列构造二叉树——力扣 测试用例 2.算法原理 首先要了解一个概念 前序遍历&#xff1a;按照 根节点->左子树->右子树的顺序遍历二叉树 中序遍历&#xff1a;按照 左子树->根节点->右子树的顺序遍历二叉树 题目…...

【数据分享】2000—2023年我国省市县三级逐年植被覆盖度(FVC)数据(Shp/Excel格式)

之前我们分享过2000—2023年逐月植被覆盖度&#xff08;FVC&#xff09;栅格数据&#xff08;可查看之前的文章获悉详情&#xff09;和Excel和Shp格式的省市县三级逐月FVC数据&#xff08;可查看之前的文章获悉详情&#xff09;&#xff0c;原始的逐月栅格数据来源于高吉喜学者…...

【Python】Streamlit:为数据科学与机器学习打造的简易应用框架

Streamlit 是一个开源的 Python 库&#xff0c;专为数据科学家和机器学习开发者设计&#xff0c;旨在快速构建数据应用。通过简单的 Python 脚本&#xff0c;开发者无需掌握前端技术&#xff0c;即可将数据分析和模型结果转化为直观、交互式的 Web 应用。其简洁的 API 设计使得…...

OpenJudge | 置换选择排序

总时间限制: 1000ms 内存限制: 65536kB 描述 给定初始整数顺串&#xff0c;以及大小固定并且初始元素已知的二叉最小堆&#xff08;为完全二叉树或类似完全二叉树&#xff0c;且父元素键值总小于等于任何一个子结点的键值&#xff09;&#xff0c;要求利用堆实现置换选择排序&a…...

如何提取b站的视频字幕,下载视频

打开视频地址 按F12打开—开发者工具 在开发者工具打开Network 过滤器关键字&#xff1a; 自动生成字幕&#xff1a;ai_subtitle 自制&#xff1a;json 打开/关闭字幕 刷新页面 找到字幕 点选字幕的respond 将方框中的内容复制&#xff1b; 复制到&#xff1a;https://www.drea…...

Vue中使用ECharts实现热力图的详细教程

在数据可视化领域&#xff0c;热力图是一种非常直观的表现形式&#xff0c;它通过颜色深浅来展示数据分布情况。在Vue项目中&#xff0c;我们可以使用ECharts这一强大的图表库来实现热力图。下面我将详细介绍如何在Vue中使用ECharts实现热力图。效果如下图&#xff1a; 一、准备…...

Arduino UNO R3自学笔记13 之 Arduino使用LM35如何测量温度?

注意&#xff1a;学习和写作过程中&#xff0c;部分资料搜集于互联网&#xff0c;如有侵权请联系删除。 前言&#xff1a;学习使用传感器测温。 1.LM35介绍 一般来讲当知道需求&#xff0c;就可以 通过既定要求的条件来筛选需要的器件&#xff0c;多方面的因素最终选定了器件…...

蓝桥杯【物联网】零基础到国奖之路:十六. 扩展模块之矩阵按键

蓝桥杯【物联网】零基础到国奖之路:十六. 扩展模块之矩阵按键 第一节 硬件解读第二节 CubeMX配置第三节 MDK代码 第一节 硬件解读 扩展模块和ADC模块是一摸一样的&#xff0c;插在主板上。 引脚对应关系&#xff1a; PB6-ROW1 PB7-ROW2 PB1-COLUMN1 PB0-COLUMN2 PA8-COLUMN3 …...

Apollo9.0 Planning2.0决策规划算法代码详细解析 (4): PlanningComponent::Proc()

&#x1f31f; 面向自动驾驶规划算法工程师的专属指南 &#x1f31f; 欢迎来到《Apollo9.0 Planning2.0决策规划算法代码详细解析》专栏&#xff01;本专栏专为自动驾驶规划算法工程师量身打造&#xff0c;旨在通过深入剖析Apollo9.0开源自动驾驶软件栈中的Planning2.0模块&am…...

AAA Redis的过期删除策略+缓存雪崩+缓存一致性问题

目录 一、三种删除策略比较 二、缓存雪崩缓存击穿缓存穿透 三、缓存一致性 Redis学习笔记 一、三种删除策略比较 内存占用CPU占用特征定时删除节约内存&#xff0c;无占用不分时段占用CPU资源&#xff0c;频度高时间换空间惰性删除内存占用严重延时执行&#xff0c;CPU利用…...

成都跃享未来教育咨询有限公司抖音小店:引领教育咨询新风尚

在数字化浪潮席卷全球的今天&#xff0c;教育咨询行业正经历着前所未有的变革。成都跃享未来教育咨询有限公司&#xff0c;作为教育行业的一颗璀璨新星&#xff0c;凭借其前瞻性的教育理念与创新的运营模式&#xff0c;在抖音平台上开设了小店&#xff0c;不仅为广大学子及家长…...

【堆排】为何使用向下调整法建堆比向上调整法建堆更好呢?

文章目录 前言一、堆排代码一、计算使用向上调整法建堆的时间复杂度二、计算使用向下调整法插入的时间复杂度总结 前言 在博主的上一篇博客堆排(链接在这里点击即可)的总结中提出啦使用向下调整法建堆比使用向上调整法建堆更好&#xff0c;是因为使用向上调整法建堆的时间复杂…...

在Stable Diffusion WebUI中安装SadTalker插件时几种错误提示的处理方法

SD中的插件一般安装比较简单&#xff0c;但也有一些插件安装会比较难。比如我在安装SadTalker时&#xff0c;就遇到很多问题&#xff0c;一度放弃了&#xff0c;后来查了一些网上攻略&#xff0c;自己也反复查看日志&#xff0c;终于解决&#xff0c;不吐不快。 一、在Stable …...

使用ffmpeg合并视频和音频

使用ffmpeg合并视频和音频 - 哔哩哔哩 简介 FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec&#xff0…...

FFCreator 10个实用技巧:轻松掌握视频制作的核心功能

FFCreator 10个实用技巧&#xff1a;轻松掌握视频制作的核心功能 【免费下载链接】FFCreator 一个基于node.js的高速视频制作库 A fast video processing library based on node.js 项目地址: https://gitcode.com/gh_mirrors/ff/FFCreator FFCreator是一个基于Node.js的…...

非原生微信小程序逆向:H5页面调试与授权劫持技巧

非原生微信小程序逆向工程实战&#xff1a;H5调试与授权机制深度解析 微信生态中存在着大量采用H5页面套壳实现的"伪原生"小程序&#xff0c;这类应用往往隐藏着更灵活的技术实现和潜在的安全风险。本文将深入探讨这类特殊小程序的逆向分析方法&#xff0c;从技术原理…...

如何3步上手语音转换:Retrieval-based Voice-Conversion-WebUI完整实战指南

如何3步上手语音转换&#xff1a;Retrieval-based Voice-Conversion-WebUI完整实战指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI 语音数据小于等于10分钟也可以用来训练一个优秀的变声模型&#xff01; 项目地址: https://gitcode.com/GitHub_Trending/re/R…...

告别纯理论:用OAI 5G开源平台+USRP B210硬件,实测端到端5G SA数据业务

从零构建5G SA实验环境&#xff1a;OAI开源平台与USRP B210实战指南 当5G技术从实验室走向商业化应用时&#xff0c;许多开发者面临一个尴尬的现实&#xff1a;理论知识与实际操作之间存在巨大鸿沟。本文将带你跨越这道鸿沟&#xff0c;使用OAI开源平台和USRP B210软件定义无线…...

SAR ADC 比较器Latch的时序优化与噪声抑制设计

1. SAR ADC比较器Latch基础原理 SAR ADC&#xff08;逐次逼近型模数转换器&#xff09;中的比较器Latch电路&#xff0c;本质上是一个高速正反馈放大器。它由两个交叉耦合的反相器构成&#xff0c;就像两个背靠背站立的短跑运动员&#xff0c;只要一方稍有领先&#xff0c;就会…...

SQL Server数据库标记为SUSPECT的紧急修复指南:从单用户到多用户模式的完整恢复流程

1. 数据库被标记为SUSPECT的常见原因 数据库突然变成SUSPECT状态&#xff0c;就像电脑突然蓝屏一样让人措手不及。我遇到过最典型的情况是机房突然断电&#xff0c;导致SQL Server没来得及完成所有事务就强制关闭了。这种情况下&#xff0c;数据库引擎为了保护数据完整性&#…...

G-Helper:华硕笔记本色彩配置一键恢复指南

G-Helper&#xff1a;华硕笔记本色彩配置一键恢复指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址: https://…...

从报文周期到安全状态:ISO26262通信故障诊断的5个关键时间参数详解

从报文周期到安全状态&#xff1a;ISO26262通信故障诊断的5个关键时间参数详解 在智能驾驶系统快速发展的今天&#xff0c;确保车辆电子系统的功能安全已成为行业共识。ISO26262作为汽车功能安全的黄金标准&#xff0c;其核心在于建立一套完整的故障诊断与处理机制。本文将深入…...

别再手动发卡了!2025新版ZFAKA搭配宝塔面板,30分钟搞定你的专属自动售卡站

2025年ZFAKA自动售卡系统&#xff1a;零基础30分钟搭建全攻略 在数字商品交易日益火爆的今天&#xff0c;手动处理订单不仅效率低下&#xff0c;还容易出错。想象一下凌晨三点被订单提醒吵醒&#xff0c;手忙脚乱地复制卡密发给买家——这种场景对于个体创业者来说再熟悉不过了…...

从F1 90到62 F1 90:用Wireshark和CANoe‘解剖’一次完整的UDS 0x22数据读取会话

从F190到62F190&#xff1a;用Wireshark和CANoe解剖UDS 0x22数据读取会话 当你第一次在Wireshark中看到22服务请求和62响应报文时&#xff0c;那些十六进制字节可能就像天书一样难以理解。但正是这些看似杂乱的数据流&#xff0c;承载着现代汽车电子系统最核心的诊断信息交换。…...