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 문서를 여러 개의 한 페이지 문서로 분할:

    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

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

관련 정보