[python]将多张图片合并为单个pdf文件
前言
最近有个个人需求是要把多个图片文件合并为一个PDF文件,这样方便用PDF阅读器连续看,避免界面点一下,只会图片放大。(比如看漫画)
主要思路是先把单张图片转换成单个PDF文件,然后把PDF文件进行合并。原先是用WPS的转换工具做的,但WPS每次只能批量转换30张,如果有大量图片文件,用WPS就不太方便了。
现成的工具找不到,索性自己整一个。python的pillow库和pypdf2库就可以实现这样的需求。
安装依赖库
本地的python版本为3.11。注意pypdf2升级到3.0版本后,一些类和方法和版本2有些区别。
python -m pip install PyPDF2==3.0.1 pillow==10.2.0
示例代码
目录结构示例
├── images
│ ├── 00001.jpg
│ ├── 00002.jpg
│ ├── 00003.jpg
│ ├── 00004.jpg
│ ├── 00005.jpg
│ ├── 00006.jpg
│ ├── 00007.jpg
│ ├── 00008.jpg
│ ├── 00009.jpg
│ └── 00010.jpg
├── main.py
└── temp
其中main.py内容如下
from PIL import Image
import os
import re
from PyPDF2 import PdfMerger
images_dir = "images"
tmpdir = "temp"
def trans_jpg2pdf(jpg_list: list) -> list:
"""jpg图片转换成pdf
Args:
jpg_list (list): 图片文件列表
Returns:
list: 图片转换后的pdf文件列表
"""
pdf_list = []
for jpg in jpg_list:
jpg_path = os.path.join(images_dir, jpg)
pdf_file = jpg.replace('.jpg', '.pdf')
pdf_path = os.path.join(tmpdir, pdf_file)
if os.path.exists(pdf_path):
os.remove(pdf_path)
pdf_list.append(pdf_path)
im = Image.open(jpg_path)
im.save(pdf_path, 'PDF', resolution=100.0)
return pdf_list
def merge_pdf(pdf_list: list, result_pdf: str = "result.pdf"):
""" 合并pdf文件
Args:
pdf_list (list): pdf文件列表
result_pdf (str): 合并后的pdf文件名称
"""
sorted_list = sorted(pdf_list, key=lambda x: int(re.search(r'\d+', x).group()))
f_merger = PdfMerger()
for pdf in sorted_list:
f_merger.append(pdf)
if os.path.exists(result_pdf):
os.remove(result_pdf)
f_merger.write(result_pdf)
if __name__ == '__main__':
jpg_list = [f for f in os.listdir(images_dir) if f.endswith(".jpg")]
pdf_list = trans_jpg2pdf(jpg_list)
merge_pdf(pdf_list, "result.pdf")
补充
- webp格式文件转PDF示例
from PIL import Image
im = Image.open("00033.webp")
rgb_im = im.convert("RGB")
rgb_im.save("00033.pdf", 'PDF', resolution=100.0)
[python]将多张图片合并为单个pdf文件的更多相关文章
- C# 合并及拆分PDF文件
C# 合并及拆分PDF文件 有时我们可能会遇到下图这样一种情况 — 我们需要的资料或教程被分成了几部分存放在多个PDF文件中,不管是阅读还是保存都不是很方便,这时我们肯定想要把这些PDF文件合并为一个 ...
- C# 将多个office文件转换及合并为一个PDF文件
PDF文件介绍 PDF(Portable Document Format )文件源于20世纪90年代初期,如今早已成为了一种最流行的的文件格式之一.因为PDF文件有很多优点: 支持跨平台和跨设备共享 ...
- 如何用Latex合并多个pdf文件?
如何用Latex合并多个pdf文件? 用TeX合并pdf, 用LaTeX合并pdf 代码: \documentclass[a4paper]{article} \usepackage{pdfpage ...
- C# 合并和拆分PDF文件
一.合并和拆分PDF文件的方式 PDF文件使用了工业标准的压缩算法,易于传输与储存.它还是页独立的,一个PDF文件包含一个或多个"页",可以单独处理各页,特别适合多处理器系统的工作 ...
- 用itext合并多个pdf文件【转】【补】
java代码 package c; import java.io.FileOutputStream; import java.io.IOException; import java.util.Arra ...
- Aspose.Pdf合并图片到PDF文件
将图片和PDF文件合成为新的PDF文件,可以先将图片转换为PDF文件, 然后合成PDF即可, 将图片转换成PDF文件有如下方法: Aspose.Pdf.Document Aspose.Pdf.Gene ...
- python数据处理(三)之处理pdf文件
代码以及资料 https://github.com/jackiekazil/data-wrangling 1.前言 尽可能地寻找可以替代pdf格式的数据 2.解析pdf的编程方法 安装slate pi ...
- 如何将多个网页合并成一个PDF文件
pdfFactory是一款PDF虚拟打印软件,但与其他虚拟打印机软件不同的是,它使用起来更加简单高效.由于无需Acrobat就能生成Adobe PDF文件,它可以帮助用户在系统没有连接打印机的情况下, ...
- Python将word文档转换成PDF文件
如题. 代码: ''' #將word文档转换为pdf文件 #用到的库是pywin32 #思路上是调用了windows和office功能 ''' #导入所需库 from win32com.client ...
- Merging a WPF application into a single EXE(WPF应用程序合并成单个Exe文件)
I always dislike handing off little applications to people. Not because I can’t, but because of the ...
随机推荐
- 你还在“垃圾”调优?快来看看JDK17的ZGC如何解放双手 | 京东云技术团队
1.前言 不要犹豫了,GC最大停顿时间小于1ms,支持16TB内存,这么高的性能提升,也不需要复杂的调优,节省了这个时间,你去陪对象不香嘛. 上篇文章给大家带来了JDK11升级JDK17的最全实践,相 ...
- echarts饼图中央自定义文字
var option = { tooltip: { trigger: 'item' }, legend: { top: '5%', left: 'center' }, //中央自定义文字 title: ...
- 【验证码逆向专栏】数美验证码全家桶逆向分析以及 AST 获取动态参数
声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容.敏感网址.数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经许 ...
- 2023年第七届蓝帽杯初赛wp
取证检材容器密码:Hpp^V@FQ6bdWYKMjX=gUPG#hHxw!j@M9 案情介绍 2021年5月,公安机关侦破了一起投资理财诈骗类案件,受害人陈昊民向公安机关报案称其在微信上认识一名昵称为 ...
- 大语言模型的预训练[2]:GPT、GPT2、GPT3、GPT3.5、GPT4相关理论知识和模型实现、模型应用以及各个版本之间的区别详解
大语言模型的预训练[2]:GPT.GPT2.GPT3.GPT3.5.GPT4相关理论知识和模型实现.模型应用以及各个版本之间的区别详解 1.GPT 模型 1.1 GPT 模型简介 在自然语言处理问题中 ...
- 大语言模型的预训练[1]:基本概念原理、神经网络的语言模型、Transformer模型原理详解、Bert模型原理介绍
大语言模型的预训练[1]:基本概念原理.神经网络的语言模型.Transformer模型原理详解.Bert模型原理介绍 1.大语言模型的预训练 1.LLM预训练的基本概念 预训练属于迁移学习的范畴.现有 ...
- CE修改器入门:寻找指针基址
上一步阐述了如何使用代码替换功能对付变化位置的数据地址,但这种方法往往不能达到预期的效果,所以我们需要学习如何利用指针,在本关的 Tutorial.exe 窗口下面有两个按钮,一个会改变数值,另一个不 ...
- 微服务保护-Sentinel
1.初识Sentinel 1.1.雪崩问题及解决方案 1.1.1.雪崩问题 微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务. 如图,如果服务提供者I发生了故障,当前的应用的部分业 ...
- CF1764H Doremy's Paint 2 题解
题目链接:CF 或者 洛谷 高分题,感觉挺有意思的题,值得一提的是这个题的 \(1\) 和 \(3\) 版本却是两个基础题. 一开始以为跟这道差不多:P8512 [Ynoi Easy Round 20 ...
- 下载Apache软件基金的软件和项目(Hadoop相关组件)
一.下载Hadoop相关组件,可以到Apache软件基金的资源目录: Apache 分发目录地址:https://dlcdn.apache.org/ 二.下载软件 方法一:在页面中找到需要下载的软件目 ...