Wie kann ich eine PDF-Datei schnell in einzelne Seiten aufteilen (z. B. über die Terminal-Befehlszeile)?

23

Ich habe eine PDF-Datei mit 6 Seiten, die ich in 1.pdf, 2.pdf, 3.pdf usw. aufteilen möchte.

Die Vorschau funktioniert überraschenderweise nicht (es sei denn, mir fehlt etwas).

Ich würde gerne in der Lage sein, diese einfache Aufgabe von der Kommandozeile aus zu erledigen, aber an diesem Punkt werde ich alles übernehmen, was die Arbeit erledigt (ohne skizzenhafte Software herunterzuladen).

Zu Ihrer Information: http://users.skynet.be/tools/ funktioniert nicht wie angegeben.

user391339
quelle
2
Eine gute Befehlszeilenlösung ergibt sich aus dieser SE-Antwort . Sie können Ghostscript mit Homebrew installieren .
Fideli

Antworten:

21

Öffnen Sie das PDF in der Vorschau und wählen Sie dann im Ansichtsmenü Miniaturansichten aus. Wählen Sie bei gedrückter Strg-Taste die Seiten aus, die Sie jetzt per Drag & Drop auf den Desktop ziehen möchten.

eleethesontai
quelle
1
Das hat gut funktioniert. Ich brauchte ungefähr 30 Sekunden, um dies zu tun, nachdem ich ungefähr 30 Minuten lang herumgeschleudert hatte. Einige Leute verwenden diese Technik zusammen mit Automator, aber ich habe sie noch nicht ausprobiert.
User391339
35

Dies kann durch Verwendung von erreicht werden pdfseparate. Sie können Poppler mit Homebrew installieren, indem Sie brew install poppler. Dies wird auch installiert pdfseparate. So teilen Sie das PDF document.pdfin in einzelne Seiten 1.pdf, 2.pdfusw. Verwendung:

pdfseparate document.pdf %d.pdf
ttq
quelle
1
Gerade vor popplereinem Tag installiert , um PDF-Dokumente mit in SVG konvertieren zu können pdf2svg. Ich habe nicht bemerkt, dass popplerdas pdfseparateKommando dazu gehört. Da die oben akzeptierte Antwort (Ziehen und Ablegen aller PDF-Seiten mit Vorschau auf den Desktop) ein "Herumklicken" erfordert und ich Lösungen auf dem Terminal mag, die automatisch über nur eine einzige Befehlszeile funktionieren, pdfseparateist genau das, was ich brauche. Vielen Dank für diesen Hinweis!
Arvid
Interessanterweise erzeugt pdfseparate PDFs, deren Gesamtgröße viel größer ist als die Größe des Original-PDFs. Ich hatte ein 400-seitiges Dokument mit 1,9 MB. Nach dem Aufteilen habe ich etwas um die 60 MB.
Konstantin
5

Wenn Sie dies über die Befehlszeile tun möchten , können Sie sich das splitPDF-Python-Skript von Benjamin Han ansehen , um die Aufgabe zu erledigen. Zum Beispiel:

splitPDF.py in.pdf 3 5

würde die Datei in.pdfin 3 Dateien aufteilen und auf die Seiten 3 und 5 aufteilen .

Jean-Philippe Pellet
quelle
Dies ist gut und etwas flexibler in der Ausgabe als pdfseparate oben. Obwohl es hauptsächlich zum Teilen eines PDFs in Seitenfutter gedacht ist, können Sie, wenn Sie jede Seite teilen möchten, problemlos seqeine Reihe von Zahlen in Ihrem Befehl erzeugen. Vielen Dank!
dgig
1
so etwas python splitPDF.py MyPDF.pdf $(seq -s ' ' 1 10 411)hat bei mir
funktioniert
1
Worte großartig. Ich bestätige, dass dies direkt unter MacOS 10.13.3
MichaelCodes
1

Eine andere Alternative finden Sie in dieser Antwort . Hierfür werden die ImageMagick- Befehlszeilentools verwendet.

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

Sie müssen jedoch mit der Qualität vorsichtig sein.

Pheon
quelle
1

Wenn Sie einen Bereich von Seiten extrahieren möchten, können Sie das folgende Skript verwenden, das Sie folgendermaßen aufrufen (vorausgesetzt, Sie speichern es in der Datei pdfextract.py irgendwo auf dem PFAD Ihres Systems, z. B. / usr / local / bin, und weisen es der Ausführung zu Erlaubnis mit 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()
Konstantin
quelle