PDF文書のページをランダムな順序で混ぜたい。
これはどのように達成できますか?
答え1
そしてpdftkとGNUコアユーティリティ
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文書を複数の1ページ文書に分割する:
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
すべての1ページの文書をマージします。
pdftk tmp/*.pdf cat output random.pdf
一時作業ディレクトリをクリーンアップします。
rm -r tmp
答え3
Gilesの答えは少し改善されました。
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