PDF를 각 문서에 포함된 페이지 수에 따라 문서로 분할

PDF를 각 문서에 포함된 페이지 수에 따라 문서로 분할

PDF를 여러 파일(각각 한 페이지)로 분할하는 방법을 설명하는 다양한 리소스가 웹에 있습니다.

하지만 어떻게 각각 5페이지의 덩어리로 나눌 수 있을까요? 다음과 같은 표준 도구를 살펴봤지만 pdftk원하는 작업을 수행할 수 있는 옵션을 찾을 수 없습니다.

답변1

pdftk고정된 페이지 세트를 효과적으로 잘라내는 기능. 일부 스크립트 접착제를 사용하면 다음과 같은 작업이 수행됩니다.

number=$(pdfinfo -- "$file" 2> /dev/null | awk '$1 == "Pages:" {print $2}')
count=$((number / pagesper))
filename=${file%.pdf}

counter=0
while [ "$count" -gt "$counter" ]; do 
  start=$((counter*pagesper + 1));
  end=$((start + pagesper - 1));

  counterstring=$(printf %04d "$counter")
  pdftk "$file" cat "${start}-${end}" output "${filename}_${counterstring}.pdf"

  counter=$((counter + 1))
done

이는 각 블록의 페이지 수 $pagesper와 소스 PDF의 파일 이름이 있다고 가정합니다 $file.

이미 acroread설치한 경우에도 사용할 수 있습니다.

acroread -size a4 -start "$start" -end "$end" -pairs "$file" "${filename}_${counterstring}.ps"

acroread-toPostScript유용할 수 있는 옵션을 제공합니다.

답변2

다음 항목 pdfseparate도 참조하세요.pdfunitepoppler-utils. 파일을 페이지당 하나의 파일로 분할하면 나중에 수동으로 또는 (반)자동으로 다시 조립하기 pdfseparate가 상대적으로 쉽습니다 .pdfunite

zsh와 마찬가지로:

autoload zargs

reunite() pdfunite "$@" file-$1-$argv[-1].pdf

pdfseparate file.pdf p%d
zargs -n 5 p<->(n) -- reunite
rm -f p<->

file.pdf로 분할 됩니다 file-p1-p5.pdf...file-p6-p10.pdf

답변3

나는 Python을 찾았습니다.PyPdf 라이브러리pdftk가 수행하기 불편한(또는 전혀 수행하지 않는) 작업에 편리합니다.

#!/usr/bin/env python
import sys
from pyPdf import PdfFileWriter, PdfFileReader

# Command line parsing
if len(sys.argv) < 2 or sys.argv[1][-4:] != '.pdf':
    sys.stderr.writeln('Usage: ' + sys.argv[0] + ''' FILE.pdf N
Split FILE.pdf into chunks of N pages each.''')
    exit(3)
pages_per_file = int(sys.argv[2])

base_name = sys.argv[1][:-4] + '-'
input_pdf = PdfFileReader(open(sys.argv[1]))
output_pdf = PdfFileWriter()
num_pages = input_pdf.getNumPages()
for i in xrange(num_pages):
    output_pdf.addPage(input_pdf.getPage(i))
    if (i + 1) % pages_per_file == 0 or i + 1 == num_pages:
        output_file = open(base_name + str(i / pages_per_file + 1) + '.pdf', "wb")
        output_pdf.write(output_file)
        output_file.close()
        output_pdf = PdfFileWriter()

답변4

Raphael이 게시한 솔루션에는 결함이 있습니다. 페이지 수가 고르지 않으면 마지막 페이지가 무시됩니다. 이는 홀수 페이지에서도 작동하는 향상된 솔루션입니다. 각 블록의 페이지 수 $pagesper와 소스 PDF의 파일 이름이 있다고 다시 가정해 보겠습니다 $file.

number=$(pdfinfo -- "$file" 2> /dev/null | awk '$1 == "Pages:" {print $2}')

count=$((($number+$pagesper-1)/$pagesper))
filename=${file%.pdf}

counter=0
while [ "$count" -gt "$counter" ]; do
  start=$((counter*pagesper + 1));
  end=$((start + pagesper - 1));
  if [ $end -gt $number ]; then
    end=$number
  fi

  counterstring=$(printf %04d "$counter")
  pdftk "$file" cat "${start}-${end}" output "${filename}_${counterstring}.pdf"
  counter=$((counter + 1))
done

관련 정보