Python 图片合并 pdf

本文介绍了如何使用Python的img2pdf库将拍摄的图片合并成一个PDF文件。作者详细阐述了从拍照注意事项、遍历文件夹获取图片、处理图片方向和压缩、编写合并脚本到将脚本打包成exe的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.缘起

最近需要将记的笔记整理成一个 pdf 进行保存,所以就研究了一下如何利用 Python 代码将拍下来的照片整个合并成一个 pdf。

2.过程

拿到一个需求最重要的就是将大块任务拆分成一个个小模块,逐个击破。

2.1拍照

这一步首先是将所有的书页拍好,需要注意的是要按照书的页码来拍,因为后面的排序是按照文件名进行排序的,拍照的文件名基本上是按照时间生成的,如果拍的时候乱了,到时候生成的 pdf 里面的页码也会乱掉。

2.2 Python 操作库

Python 最好的地方就是有大量的第三方库能帮我们快速实现我们想要的方法,搜索到了两个库,

PyFPDF 和img2pdf,我们这里选择img2pdf来完成我们的需求

 

pip install img2pdf

 

2.3 Python遍历文件夹获取图片

 

    dirname = "f:/wlzcool"
    imgs = []
    for fname in os.listdir(dirname):
        if not fname.endswith(".jpg"):
            continue
        path = os.path.join(dirname, fname)
        if os.path.isdir(path):
            continue
        imgs.append(path)

需要注意图片的文件名如果是纯数字且位数不一样,排序会为1之后是10而不是2,需要对数字进行一个额外的排序,如果是手机拍的文件就没有这个问题。

files.sort(key=lambda x: int(x[:-4])
### 使用Python将多个图像文件合并成一个PDF文档 为了满足需求,可以采用两种主要方式之一:使用`PIL`库或是`FPDF`库。 #### 方法一:基于PIL库的方式 这种方法适用于那些希望通过简单的脚本快速实现目标的人群。通过遍历指定路径下的所有JPEG格式图片,并依次将其添加至同一个PDF文件中[^1]。 ```python from PIL import Image import os images = [] for filename in sorted(os.listdir('path_to_jpgs')): if not filename.endswith('.jpg'): continue with Image.open(f'path_to_jpgs/{filename}') as im: images.append(im.convert('RGB')) if images: first_image, *rest_images = images first_image.save( 'output.pdf', save_all=True, append_images=rest_images ) ``` 此段代码首先创建了一个列表用于存储转换后的图像对象;接着利用`os.listdir()`获取给定目录内的所有文件名并按字母表顺序排列;随后循环读取每张`.jpg`结尾的图片,打开它们并将颜色模式统一调整为适合打印的颜色空间(即RGB),再加入到之前准备好的列表里;最后选取第一个元素作为封面页码,调用其内置方法`save()`输出最终形成的单个PDF文档的同时也将剩余部分附加进去[^3]。 #### 方法二:基于FPDF库的方式 如果偏好更灵活的操作选项,则可以选择安装第三方扩展包——`fpdf2`。它允许开发者更加精细地控制页面布局以及样式设置等方面的内容[^2]。 ```python from fpdf import FPDF from PIL import Image import glob class PDF(FPDF): def add_page_from_image(self, image_path): self.add_page() img = Image.open(image_path) width, height = img.size # Adjust the size of page to fit the image self.set_auto_page_break(False) self.image(image_path, w=self.w*(width/height), h=self.h) def create_pdf(images_folder='.', output_filename='merged_output.pdf'): pdf = PDF(unit="pt", format=[792, 612]) # A4 paper dimensions in points (portrait orientation) for img_file in sorted(glob.glob(f"{images_folder}/*.jpg")): pdf.add_page_from_image(img_file) pdf.output(output_filename) create_pdf('./your_image_directory') ``` 上述实例定义了一个继承自`FPDF`类的新类`PDF`,其中包含了专门用来向PDF中插入新一页的方法`add_page_from_image()`。该函数接收一张图片的位置参数,负责计算合适的尺寸比例后加载进来显示于当前空白处。之后,在主程序逻辑里面按照一定规则筛选符合条件的目标素材集合,逐一执行新增动作直至全部处理完毕为止,最终导出完整的电子档成果物。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值