如何以随机顺序打乱 pdf 文件中的页面?

如何以随机顺序打乱 pdf 文件中的页面?

我想以随机顺序打乱 pdf 文档的页面。

如何才能做到这一点?

答案1

pdftk和 GNU coreutils

确定PDF文件的页数,然后调用shuf生成随机页码列表,并pdftk再次调用以提取给定的页面序列。

pdftk original.pdf cat $(shuf 1-$(pdftk original.pdf dump_data | awk '$1=="NumberOfPages:" {print $2}')) output randomized.pdf

使用Python和pypdf

#!/usr/bin/env python2
import random, sys
from pyPdf import PdfFileWriter, PdfFileReader
input = PdfFileReader(sys.stdin)
output = PdfFileWriter()
pages = range(input.getNumPages())
random.shuffle(pages)
for i in pages:
     output.addPage(input.getPage(i))
output.write(sys.stdout)'

用法:/path/to/script <original.pdf >randomized.pdf

答案2

我们将使用pdftk它来对pdf文档执行操作。

  1. 创建临时工作目录:

    mkdir tmp
    
  2. 将 pdf 文档拆分为多个一页文档:

    pdftk original.pdf burst output tmp/pg_%02d.pdf
    
  3. 使用随机名称重命名一页文档:

    for name in tmp/*.pdf; do
       mv "tmp/$name" tmp/$(echo "$name" | sha1sum | cut -f1 -d' ').pdf
    done
    
  4. 合并所有一页文档:

    pdftk tmp/*.pdf cat output random.pdf
    
  5. 清理临时工作目录:

    rm -r tmp
    

答案3

对吉尔斯的回答做了一点改进:

pdftk original.pdf cat $(shuf --input-range=1-$(pdftk original.pdf dump_data | awk '$1=="NumberOfPages:" {print $2}')) output randomized.pdf

答案4

这是一个老问题,可能不会经常出现,但这里的答案已经过时,并且软件包已略有更改。使用 python3 安装新包:pip3 install PyPDF2

这是我对第一个答案的快速而肮脏的重写,但它适用于新包:

import random, sys
import PyPDF2 
#import PdfReader, PdfWriter
path = sys.argv[1]
out = sys.argv[2]
inp = PyPDF2.PdfReader(open(path, 'rb'))
output = PyPDF2.PdfWriter()




pages = len(inp.pages)
page_list = []
for i in range(pages):
     page_list.append(i)
random.shuffle(page_list)

for i in page_list:
     output.add_page(inp.pages[i])
output.write(out)

要使用此脚本,arg 1 是源脚本,arg 2 是输出位置: python3 shuffle.py normal.pdf randomized.pdf

相关内容