在处理数字化文档或报告时,我们经常需要将扫描的图片或图表批量合并为单一的PDF文件。Python提供了一种简便的方法来自动化这个过程,并且可以确保图片按照数字顺序(如1, 2, 10而不是1, 10, 2)正确排序。本文将介绍如何使用Python和Pillow库来实现这一功能。
安装Pillow库
Pillow是Python Imaging Library (PIL) 的一个分支,提供了广泛的文件格式支持、有效的内部表示和强大的图像处理能力。首先确保已安装Pillow库:
pip install Pillow
解析
extract_number
函数使用正则表达式re.findall
从文件名中提取数字,然后基于这些数字对文件名进行排序。这确保了像page_10.png
这样的文件会被正确地排序在page_2.png
之后。- 使用
Image.open(img_path).convert("RGB")
加载图片并确保图片是RGB模式,因为PDF不支持Alpha通道。 images[0].save(output_pdf_path, save_all=True, append_images=images[1:])
将第一张图片作为PDF的第一页,并将剩余图片作为后续页附加到PDF中。
from PIL import Image
import os
import re
# 指定包含图片的文件夹路径
images_folder_path = r'你的图片文件夹路径'
# 指定输出PDF文件的路径
output_pdf_path = r'你的PDF输出路径'
# 使用正则表达式提取文件名中的数字,并按这些数字进行排序
def extract_number(file_name):
numbers = re.findall(r'\d+', file_name) # 提取数字
return int(numbers[0]) if numbers else 0 # 转换为整数
# 列出文件夹中的所有图片文件,并按数字排序
image_files = [f for f in os.listdir(images_folder_path) if f.endswith(('jpg', 'jpeg', 'png'))]
image_files.sort(key=extract_number)
# 初始化图片列表
images = []
# 加载图片并转换为RGB
for image_file in image_files:
img_path = os.path.join(images_folder_path, image_file)
img = Image.open(img_path).convert("RGB")
images.append(img)
# 合并图片为PDF
if images:
images[0].save(output_pdf_path, save_all=True, append_images=images[1:])
print(f'图片合并为PDF完成:{output_pdf_path}')
结论
使用Python和Pillow库批量将图片合并为PDF文件不仅简化了文档处理流程,而且通过正确的排序方法,可以确保文档的页码顺序与原始文件相符。这对于自动化报告生成、数字档案创建等场景特别有用。
希望这篇文章能帮助你更高效地处理你的文档和图像!