web-dev-qa-db-ja.com

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

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

プレビューは驚くほど機能しません(私が何かを見落としている場合を除きます)。

コマンドラインからこの簡単なタスクを実行できるようにしたいのですが、この時点で、(スケッチャーソフトウェアをダウンロードせずに)仕事を完了するために何でも取ります。

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

28
user391339

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

24
eleethesontai

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

pdfseparate document.pdf %d.pdf
44
ttq

コマンドラインからこれを行うことに興味がある場合は、 Benjamin HanのsplitPDF python script を見てジョブを実行できます。たとえば、次のようになります。

splitPDF.py in.pdf 3 5

ファイルを分割しますin.pdf 3つのファイルに分割し、3ページと5ページで分割します。

ページの範囲を抽出したい場合は、次のスクリプトを使用してこのように呼び出すことができます(システムの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()
1
Konstantin

別の代替案については、この answer を参照してください。 ImageMagick コマンドラインツールを使用します。

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

ただし、品質には注意する必要があります。

1
pheon