article.txt

这个脚本可以把多个文件夹的图片按顺序转换为一个pdf,但是没有压缩,体积会比较大。需要用到pillow库,假设扫描仪是扫描A4的,则需要对图片进行裁剪,这个脚本会把图片底下30像素的位置裁切掉。
首先创建了一个字典 folder_files_dict,键为文件夹名称,值为该文件夹内所有 jpg 文件的路径列表。这样可以将每个文件夹内的文件路径分别收集起来。
然后通过遍历每个文件夹,将其中的 jpg 文件路径添加到对应的字典值列表中,并对每个文件夹内的文件路径进行排序。
接着按照文件夹列表的顺序,将各个文件夹内排序好的文件路径依次添加到 all_image_paths 总列表中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
from PIL import Image
import os


def process_images_and_create_pdf(folder_list, output_pdf):
all_image_paths = []

# 为每个文件夹创建一个字典,用于存储该文件夹内的文件路径
folder_files_dict = {folder: [] for folder in folder_list}

# 依次访问每个文件夹
for folder in folder_list:
for root, dirs, files in os.walk(folder):
for file in files:
if file.endswith('.jpg'):
file_path = os.path.join(root, file)
folder_files_dict[folder].append(file_path)

# 对每个文件夹内的文件路径进行排序
for folder in folder_files_dict:
folder_files_dict[folder].sort()

# 将所有文件夹内排序好的文件路径按照文件夹顺序添加到总的列表中
for folder in folder_list:
all_image_paths.extend(folder_files_dict[folder])

# 打印序号和文件路径
for i, path in enumerate(all_image_paths):
print(f"{i + 1}: {path}")

images = []

# 打开并处理图片(裁掉底下30像素)
for path in all_image_paths:
img = Image.open(path)
width, height = img.size
cropped_img = img.crop((0, 0, width, height - 30))
cropped_img = cropped_img.convert('RGB')
images.append(cropped_img)

# 保存为PDF文件
images[0].save(output_pdf, save_all=True, append_images=images[1:])


if __name__ == "__main__":
folder_list = ['封面', '上', '下'] # 替换为实际的文件夹名称
output_pdf = 'output.pdf' # 替换为你想要的输出PDF文件名
process_images_and_create_pdf(folder_list, output_pdf)

经过测试这个脚本可以成功运行

    Comments

    2024-12-02

    回到顶部