PyPDF2合并PDF时页面2-9乱序问题求助
解决PDF合并时页面顺序混乱的问题
你的问题出在glob("*.pdf")的排序逻辑上——它默认按字符串字典序返回文件,而不是数字顺序。比如"page_10.pdf"会排在"page_2.pdf"前面,因为字符串比较时"1"的ASCII码小于"2",导致page_2到page_9的位置错乱。
解决方案
需要对获取到的PDF文件列表按页码数字排序,而不是字符串排序。具体做法是提取每个文件名中的页码数字,转换成整数后进行排序。
修正后的代码
from glob import glob from PyPDF2 import PdfMerger def pdf_merge(): """Merges individual .pdfs into one large .pdf""" merger = PdfMerger() allpdfs = glob("*.pdf") # 按文件名中的页码数字排序 allpdfs.sort(key=lambda x: int(x.split("_")[1].split(".")[0])) for pdf in allpdfs: merger.append(pdf) with open("book.pdf", "wb") as new_file: merger.write(new_file) if __name__ == "__main__": pdf_merge()
排序逻辑说明
x.split("_")[1]从"page_X.pdf"中提取出"X.pdf".split(".")[0]去掉后缀,得到纯页码字符串"X"int(...)转换成整数,确保列表按数字大小而非字符串顺序排列
如果后续文件名格式调整为带前导零的形式(比如page_001.pdf),这个排序逻辑依然有效,因为整数转换会自动忽略前导零的影响。
内容的提问来源于stack exchange,提问作者mirandabohm
相关产品推荐
相关产品推荐

