PDFファイルを単一のページにすばやく(つまり、ターミナルコマンドラインから)分割するにはどうすればよいですか?


23

1.pdf、2.pdf、3.pdfなどに分割したい6ページのPDFファイルがあります。

プレビューは驚くほどうまくいきません(何かが足りない限り)。

コマンドラインからこの簡単なタスクを実行できるようになりたいと思いますが、この時点で(大ざっぱなソフトウェアをダウンロードせずに)仕事を終わらせるものなら何でも使用します

参考までにhttp://users.skynet.be/tools/は宣伝どおりに機能しません。


2
良いコマンドラインソリューションは、このSE answerからです。Homebrewを使用してghostscriptをインストールできます。
フィデリ14年

回答:


21

プレビューでPDFを開き、表示メニューでサムネイルを選択します。Ctrlキーを押しながら、デスクトップにドラッグアンドドロップするページを選択します。


1
これはうまくいきました。約30分間動揺した後、これを行うために約30秒かかりました。Automatorと組み合わせてこの手法を使用している人もいますが、私はまだ試していません。
user391339 14年

35

これはを使用して実現できますpdfseparate。homebrewを使用して、popplerをインストールできbrew install popplerます。これもインストールされpdfseparateます。PDF document.pdfを単一のページ1.pdfに分割するには2.pdf、などを使用します。

pdfseparate document.pdf %d.pdf

1
popplerを使用してPDFドキュメントをSVGに変換できるように1日前にインストールしましたpdf2svg。コマンドにpoppler付属していることに気づかなかったpdfseparate。上記の受け入れられた回答(プレビュー付きのすべてのPDFページをデスクトップにドラッグアンドドロップ)するには「クリックして」クリックpdfseparateする必要があります。そのヒントをありがとう!
Arvid

興味深いことに、pdfseparateは、合計サイズが元のpdfのサイズよりもはるかに大きいpdfを生成します。1.9 MBの400ページのドキュメントがありました。分割した後、約60 MBを得ました。
コンスタンティン

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.