用途
将一系列散装的图片(如1.webp、2.webp、3.webp……)处理成 “骑马订”打印格式的 PDF 文件。
核心功能
骑马订排版的核心逻辑:举个例子,对于8页小册子的第一张纸,正面:第8页和第1页,反面:第2页和第7页,而非简单的按顺序堆叠图片。
- 主要功能:自动计算页码顺序,把零散的图片根据骑马订的逻辑拼接(根据图片名的数字作为索引),打印出来后只需对折装订,就能做成一本小册子。
- 自动补齐页数:由于骑马订要求总页数必须是 4 的倍数,程序会自动添加空白页。
- 画布拼接与装订缝:为了后续的装订方便,在中间画布拼接时加了一小段空白装订线。
食用示例

实现代码
注意
1.脚本使用
2.脚本会一次性将所有图片加载到内存中。如果处理几百张高清大图,可能会导致内存不足。
3.建议所有的图片尺寸一致。
sorted(os.listdir),所以请确保你的图片命名是按顺序的(如 01.jpg, 02.jpg,中间可以跳数字,但必须有顺序),否则页码会乱序。2.脚本会一次性将所有图片加载到内存中。如果处理几百张高清大图,可能会导致内存不足。
3.建议所有的图片尺寸一致。
pip install Pillow
import os
from PIL import Image
from math import ceil
# 装订缝宽度(像素)
gutter = 35
# 原图文件夹
folder = "images"
files = sorted(os.listdir(folder))
images = [Image.open(os.path.join(folder,f)).convert("RGB") for f in files]
n = len(images)
target = ceil(n/4)*4
blank = Image.new("RGB", images[0].size, "white")
while len(images) < target:
images.append(blank)
pages = len(images)
sheets = pages // 4
order = []
for i in range(sheets):
order += [
pages - 2*i,
1 + 2*i,
2 + 2*i,
pages - (2*i +1)
]
ordered = [images[i-1] for i in order]
pdf_pages = []
for i in range(0,len(ordered),2):
w,h = ordered[i].size
canvas = Image.new("RGB",(w*2+gutter,h),"white")
canvas.paste(ordered[i],(0,0))
canvas.paste(ordered[i+1],(w+gutter,0))
pdf_pages.append(canvas)
pdf_pages[0].save(
folder + ".pdf",
save_all=True,
append_images=pdf_pages[1:]
)
其实不用非得写代码的……
在Adobe Acrobat软件的打印选项卡中,可以设置「小册子」的打印模式,实现的效果和上面的程序差不多……啊哈哈










