터미널 명령 줄에서 PDF 파일을 단일 페이지로 빠르게 분할하려면 어떻게해야합니까?


23

6 페이지 길이의 PDF 파일을 1.pdf, 2.pdf, 3.pdf 등으로 나누고 싶습니다.

놀랍게도 미리보기가 작동하지 않습니다 (내가 뭔가 빠진 경우가 아니면).

커맨드 라인에서이 간단한 작업을 수행 할 수 있기를 원하지만이 시점에서 스케치 소프트웨어를 다운로드하지 않고 작업을 수행하는 모든 작업을 수행합니다.

참고로 http://users.skynet.be/tools/ 는 광고 된대로 작동하지 않습니다.


2
이 SE answer의 명령 줄 솔루션이 좋습니다 . Homebrew를 사용하여 고스트 스크립트를 설치할 수 있습니다 .
fideli

답변:


21

미리보기에서 pdf를 연 다음보기 메뉴에서 축소판을 선택하십시오. Ctrl 원하는 페이지를 선택하여 바탕 화면으로 끌어다 놓습니다.


1
이것은 잘 작동했습니다. 약 30 분 동안 타 오르고 나서 이것을하기 위해 약 30 초가 걸렸습니다. 일부 사람들은 Automator와 함께이 기술을 사용하고 있지만 아직 시도하지 않았습니다.
user391339

35

을 사용하여 달성 할 수 있습니다 pdfseparate. 으로 homebrew와 함께 poppler를 설치할 수 있습니다 brew install poppler. 이것도 설치 pdfseparate됩니다. PDF를 분할하려면 document.pdf하나의 페이지로로 1.pdf, 2.pdf등 사용 :

pdfseparate document.pdf %d.pdf

1
를 사용 poppler하여 PDF 문서를 SVG로 변환 할 수 있도록 하루 전에 설치 했습니다 pdf2svg. 명령 poppler과 함께 제공되는 것을 보지 못했습니다 pdfseparate. 위의 승인 된 답변 (모든 PDF 페이지를 끌어서 바탕 화면으로 끌어다 놓기)을 수행하려면 "클릭"해야하며 단일 명령 줄로 자동으로 작동하는 터미널의 솔루션을 좋아하기 때문에 pdfseparate정확히 필요한 것입니다. 그 힌트를 주셔서 감사합니다!
Arvid

흥미롭게도 pdfseparate는 전체 크기가 원본 pdf의 크기보다 훨씬 큰 pdf를 생성합니다. 1.9MB의 400 페이지 문서가 있습니다. 분할 후 약 60MB의 무언가를 얻었습니다.
Konstantin

5

명령 행 에서이 작업을 수행하려는 경우 Benjamin Han의 splitPDF python 스크립트 를보고 작업을 수행 할 수 있습니다 . 예를 들어 :

splitPDF.py in.pdf 3 5

파일 in.pdf을 3 개의 파일로 분할하고 3 및 5 페이지에서 분할합니다.


이것은 좋고, 위의 pdfseparate보다 출력 할 수있는 것에서 약간 더 유연합니다. 주로 pdf를 여러 페이지로 분할하기위한 것이지만 각 페이지를 분할하려면 seq명령에서 다양한 숫자를 쉽게 생성 할 수 있습니다 . 감사!
dgig

1
같은 python splitPDF.py MyPDF.pdf $(seq -s ' ' 1 10 411)나를 위해 일한
dgig

1
좋은 말. 나는 이것이 MacOS 10.13.3에서 직접 작동한다는 것을 확인했다
MichaelCodes

1

다른 대안은이 답변을 참조하십시오 . ImageMagick 명령 줄 도구를 사용합니다 .

convert x.pdf -quality 100 -density 300x300 x-%04d.pdf

그러나 품질에주의해야합니다.


1

페이지 범위를 추출하려면 다음과 같이 호출하는 다음 스크립트를 사용할 수 있습니다 (시스템의 PATH 어딘가에 pdfextract.py 파일 (예 : / usr / local / bin)로 저장하고 실행을 가정 한 경우) chmod 744 pdfextract.py를 통한 권한) :

pdfextract.py --file-in / path / to / large / pdf --file-out / path / to / new / pdf --start --stop

#!/usr/bin/env python
# -*- coding: utf-8 -*-


import argparse
import os
import subprocess as sp


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--file-in', required=True, type=str, dest='file_in')
    parser.add_argument('--file-out', required=True, type=str, dest='file_out')
    parser.add_argument('--start', required=True, type=int, dest='start', default=-1)
    parser.add_argument('--stop', required=True, type=int, dest='stop', default=-1)

    args = parser.parse_args()
    assert os.path.isfile(args.file_in)
    assert not os.path.isfile(args.file_out)

    # remove temporary files
    for el in os.listdir('/tmp'):
        if os.path.isfile(os.path.join('/tmp', el)) and el[:12] == 'pdfseparate-':
            os.remove(os.path.join('/tmp', el))

    sp.check_call('pdfseparate -f {:d} -l {:d} {:s} /tmp/pdfseparate-%d.pdf'.format(args.start, args.stop, args.file_in), shell=True)

    cmd_unite = 'pdfunite '
    for i in range(args.start, args.stop + 1):
        cmd_unite += '/tmp/pdfseparate-{:d}.pdf '.format(i)
    cmd_unite += args.file_out
    sp.check_call(cmd_unite, shell=True)

    # remove temporary files
    for el in os.listdir('/tmp'):
        if os.path.isfile(os.path.join('/tmp', el)) and el[:12] == 'pdfseparate-':
            os.remove(os.path.join('/tmp', el))


if __name__ == "__main__":
    main()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.