我想以随机顺序打乱 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文档执行操作。
创建临时工作目录:
mkdir tmp
将 pdf 文档拆分为多个一页文档:
pdftk original.pdf burst output tmp/pg_%02d.pdf
使用随机名称重命名一页文档:
for name in tmp/*.pdf; do mv "tmp/$name" tmp/$(echo "$name" | sha1sum | cut -f1 -d' ').pdf done
合并所有一页文档:
pdftk tmp/*.pdf cat output random.pdf
清理临时工作目录:
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