[python]将多张图片合并为单个pdf文件

简介: [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)
相关文章
|
2天前
|
安全 Python
Python 高级编程:高效读取 txt 文件的技巧与实践
在 Python 中,读取 txt 文件是常见操作。本文介绍了使用 `with` 语句自动管理文件资源、逐行读取文件、读取特定字节范围内容、处理编码问题以及使用缓冲读取提高性能等高级方法,确保代码高效且安全。通过这些技巧,你可以更灵活地处理文件内容,并避免资源泄漏等问题。原文链接:https://www.wodianping.com/app/2024-10/44183.html
32 18
|
3天前
|
数据处理 Python
Python 高级技巧:深入解析读取 Excel 文件的多种方法
在数据分析中,从 Excel 文件读取数据是常见需求。本文介绍了使用 Python 的三个库:`pandas`、`openpyxl` 和 `xlrd` 来高效处理 Excel 文件的方法。`pandas` 提供了简洁的接口,而 `openpyxl` 和 `xlrd` 则针对不同版本的 Excel 文件格式提供了详细的数据读取和处理功能。此外,还介绍了如何处理复杂格式(如合并单元格)和进行性能优化(如分块读取)。通过这些技巧,可以轻松应对各种 Excel 数据处理任务。
31 16
|
8天前
|
存储 Python
一文让你搞懂 Python 的 pyc 文件
一文让你搞懂 Python 的 pyc 文件
29 15
|
16小时前
|
存储 索引 Python
一文让你搞懂 Python 的 pyc 文件
一文让你搞懂 Python 的 pyc 文件
29 3
|
17小时前
|
数据采集 自然语言处理 Python
用 Python 生成并识别图片验证码
用 Python 生成并识别图片验证码
7 1
|
10天前
|
人工智能 IDE 开发工具
Python实行任意文件的加密—解密
Python实行任意文件的加密—解密
21 2
|
10天前
|
人工智能 IDE 开发工具
Python实行任意文件的加密—解密
Python实行任意文件的加密—解密
21 1
|
20小时前
|
存储 JSON 数据格式
解密 parquet 文件,以及如何用 Python 去处理它(一)
解密 parquet 文件,以及如何用 Python 去处理它
12 0
|
20小时前
|
存储 API Apache
解密 parquet 文件,以及如何用 Python 去处理它(二)
解密 parquet 文件,以及如何用 Python 去处理它(二)
15 0
|
10天前
|
UED Python
Python requests库下载文件时展示进度条的实现方法
以上就是使用Python `requests`库下载文件时展示进度条的一种实现方法,它不仅简洁易懂,而且在实际应用中非常实用。
25 0