You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用img2pdf生成PDF时图片顺序错乱问题求助

解决img2pdf生成PDF时图片顺序错乱的问题

嘿,这个问题我之前也踩过坑!核心原因是文件名的字符串排序逻辑——当你直接用默认的文件名列表传给img2pdf时,它会按字符串的字典序排序,而不是我们期望的数字顺序。比如img1.jpg和img10.jpg,字符串比较时"10"会排在"2"前面,就出现了1、10、11…这种混乱的顺序。

问题分析

看你的代码,你是按数字顺序下载了img1.jpg到img50.jpg,但如果后续生成PDF时是直接读取文件夹里的文件(比如用os.listdir()),或者没有手动指定有序的文件列表,就会触发字符串排序的问题。

解决方案

最稳妥的方式是手动生成按数字顺序排列的文件列表,完全绕开文件系统的排序逻辑:

import urllib.request
import os
import img2pdf

n = 50
all = 0
# 先下载图片
for counter in range(1, n+1):
    all = all + 1
    urllib.request.urlretrieve(f"https://website/images/{all}.jpg", f"img{all}.jpg")

# 生成严格按数字顺序的文件名列表
image_files = [f"img{i}.jpg" for i in range(1, n+1)]

# 用有序列表生成PDF
with open("output.pdf", "wb") as f:
    f.write(img2pdf.convert(image_files))

如果是需要从文件夹读取已有的图片文件,也可以通过提取文件名中的数字来排序:

import os
import img2pdf

# 获取所有符合命名规则的图片文件
files = [f for f in os.listdir() if f.startswith("img") and f.endswith(".jpg")]

# 按文件名中的数字进行排序
files.sort(key=lambda x: int(x.replace("img", "").replace(".jpg", "")))

# 生成PDF
with open("output.pdf", "wb") as f:
    f.write(img2pdf.convert(files))

这样就能保证PDF里的图片严格按照1、2、3…50的顺序排列啦!

内容的提问来源于stack exchange,提问作者Nik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:33:41