[Python]多个图片自动生成“骑马订”排版的小册子 PDF

用途

将一系列散装的图片(如1.webp、2.webp、3.webp……)处理成 “骑马订”打印格式的 PDF 文件。

核心功能

骑马订排版的核心逻辑:举个例子,对于8页小册子的第一张纸,正面:第8页和第1页,反面:第2页和第7页,而非简单的按顺序堆叠图片。

  • 主要功能:自动计算页码顺序,把零散的图片根据骑马订的逻辑拼接(根据图片名的数字作为索引),打印出来后只需对折装订,就能做成一本小册子。
  • 自动补齐页数:由于骑马订要求总页数必须是 4 的倍数,程序会自动添加空白页。
  • 画布拼接与装订缝:为了后续的装订方便,在中间画布拼接时加了一小段空白装订线。

食用示例

实现代码

注意
1.脚本使用 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软件的打印选项卡中,可以设置「小册子」的打印模式,实现的效果和上面的程序差不多……啊哈哈

系列文章
学习笔记/技术
Contents: 28/28
License
许可协议:CC BY-SA 4.0
原文链接:https://loneapex.cn/archives/5306
暂无评论

发送评论 编辑评论

这里支持部分markdown语法哦!
评论发布后您随时可以修改。

				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯
 ̄﹃ ̄
(/ω\)
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯
φ( ̄∇ ̄o)
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
(´っω・`。)
( ,,´・ω・)ノ)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•)
(ㆆᴗㆆ)
from『不动声色的柏田与喜形于色的太田』
from『邻座的邻座的艾莉同学』 | 最喜欢有希酱啦!(素材来自bilibili@最上川下山)
from『魔女的夜宴』 | Mimosa整理
Source: github.com/k4yt3x/flowerhd
整活by Mimosa233
颜文字
柏田
周防有希
魔女
小恐龙
花!
夸夸我!
上一篇