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