如何用PyPDF2随机打乱PDF页面并输出新PDF?编程新手求助
嘿,作为刚接触编程不久的同学,你找的这个方案其实已经很实用了!我来给你把这个方法拆解清楚,再补充一个更适合新手的Python 3版本方案,帮你轻松实现PDF页面随机打乱的需求~
方案一:基于Python 2的PyPDF2脚本
你找到的这段代码逻辑非常清晰,是专门针对Python 2环境写的:
- 先导入所需工具模块:
random负责生成随机打乱的页面顺序,sys处理命令行的输入输出,PyPDF2的两个类用来读写PDF文件 - 从标准输入读取要处理的PDF:
input = PdfFileReader(sys.stdin) - 获取所有页面的索引列表,然后随机打乱顺序:
pages = range(input.getNumPages())+random.shuffle(pages) - 遍历打乱后的索引,把对应页面添加到输出对象中
- 最后把打乱后的PDF内容输出到标准输出
运行方式
- 先安装依赖:在Python 2环境下执行
pip install PyPDF2 - 把代码保存成
shuffle_pdf.py,然后在命令行执行:
python shuffle_pdf.py < input.pdf > shuffled_output.pdf
这样就能把input.pdf的页面随机打乱后,生成shuffled_output.pdf文件。
方案二:更友好的Python 3版本
因为Python 2已经停止维护了,更推荐你用Python 3的版本。这个版本封装成了函数,还加了参数检查,新手更好上手:
#!/usr/bin/env python3 import random import sys from PyPDF2 import PdfWriter, PdfReader def shuffle_pdf(input_path, output_path): # 读取输入PDF reader = PdfReader(input_path) # 创建输出PDF对象 writer = PdfWriter() # 获取所有页面的索引并打乱 page_indices = list(range(len(reader.pages))) random.shuffle(page_indices) # 把打乱后的页面添加到输出对象 for idx in page_indices: writer.add_page(reader.pages[idx]) # 写入输出文件 with open(output_path, "wb") as out_file: writer.write(out_file) if __name__ == "__main__": # 检查命令行参数是否正确 if len(sys.argv) != 3: print("用法:python shuffle_pdf.py <输入PDF路径> <输出PDF路径>") sys.exit(1) # 执行打乱操作 shuffle_pdf(sys.argv[1], sys.argv[2])
运行方式
- 先安装Python 3版本的PyPDF2:
pip3 install PyPDF2 - 保存代码后,直接在命令行传入文件路径即可:
python shuffle_pdf.py input.pdf shuffled_output.pdf
一些小提示
- 如果遇到加密的PDF,可以在读取后添加一行
reader.decrypt("你的密码")(如果没有密码,传空字符串""试试) - 要是处理复杂PDF(比如带表单、特殊格式)出现兼容性问题,可以试试
PyMuPDF(fitz)库,它的兼容性更强,写法和这个方案类似哦~
内容的提问来源于stack exchange,提问作者Fabian
相关产品推荐
相关产品推荐

