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

如何用PyPDF2随机打乱PDF页面并输出新PDF?编程新手求助

嘿,作为刚接触编程不久的同学,你找的这个方案其实已经很实用了!我来给你把这个方法拆解清楚,再补充一个更适合新手的Python 3版本方案,帮你轻松实现PDF页面随机打乱的需求~

方案一:基于Python 2的PyPDF2脚本

你找到的这段代码逻辑非常清晰,是专门针对Python 2环境写的:

  1. 先导入所需工具模块:random负责生成随机打乱的页面顺序,sys处理命令行的输入输出,PyPDF2的两个类用来读写PDF文件
  2. 从标准输入读取要处理的PDF:input = PdfFileReader(sys.stdin)
  3. 获取所有页面的索引列表,然后随机打乱顺序:pages = range(input.getNumPages()) + random.shuffle(pages)
  4. 遍历打乱后的索引,把对应页面添加到输出对象中
  5. 最后把打乱后的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:06:30