PDFファイルのページをランダムな順序で混在させる方法は?

PDFファイルのページをランダムな順序で混在させる方法は?

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

これを使用してpdftkPDF文書を処理します。

  1. 一時作業ディレクトリを作成します。

    mkdir tmp
    
  2. PDF文書を複数の1ページ文書に分割する:

    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. すべての1ページの文書をマージします。

    pdftk tmp/*.pdf cat output random.pdf
    
  5. 一時作業ディレクトリをクリーンアップします。

    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

関連情報