Come posso dividere rapidamente un file PDF in singole pagine (cioè dalla riga di comando Terminale)?


23

Ho un file PDF lungo 6 pagine che voglio dividere in 1.pdf, 2.pdf, 3.pdf, ecc ...

L'anteprima non funziona in modo sorprendente per questo (a meno che non mi manchi qualcosa).

Mi piacerebbe poter fare questo semplice compito dalla riga di comando, ma a questo punto prenderò tutto ciò che fa il lavoro (senza scaricare software impreciso)

FYI http://users.skynet.be/tools/ non funziona come pubblicizzato.


2
Una buona soluzione da riga di comando è da questa risposta SE . Puoi installare ghostscript usando Homebrew .
fideli,

Risposte:


21

Apri il pdf in anteprima e quindi nel menu Visualizza seleziona le miniature. Ctrl selezionare le pagine che si desidera ora trascinarle sul desktop.


1
Questo ha funzionato bene. Mi ci sono voluti circa 30 secondi per farlo dopo aver agitato per circa 30 minuti. Alcune persone usano questa tecnica insieme a Automator ma non l'ho ancora provata.
user391339,

35

Questo può essere ottenuto utilizzando pdfseparate. Puoi installare poppler con homebrew, di brew install poppler. Questo installerà anche pdfseparate. Per dividere il file PDF document.pdfin in pagine singole 1.pdf, 2.pdfecc uso:

pdfseparate document.pdf %d.pdf

1
Appena installato popplerun giorno fa per poter convertire documenti PDF in SVG con pdf2svg. Non ho notato che popplerviene fornito con il pdfseparatecomando. Poiché la risposta accettata sopra (trascinare e rilasciare tutte le pagine PDF con l'anteprima sul desktop) mi richiede di "fare clic" e poiché mi piacciono le soluzioni sul terminale che funzionano automagicamente con una sola riga di comando, pdfseparateè esattamente ciò di cui ho bisogno. Grazie mille per questo suggerimento!
Arvid,

È interessante notare che pdfseparate produce pdf la cui dimensione totale è molto più grande della dimensione del pdf originale. Ho avuto un documento di 400 pagine con 1,9 MB. Dopo la divisione, ho ottenuto qualcosa di circa 60 MB.
Konstantin,

5

Se sei interessato a farlo dalla riga di comando, puoi guardare lo script python splitPDF di Benjamin Han per fare il lavoro. Per esempio:

splitPDF.py in.pdf 3 5

dividerebbe il file in.pdfin 3 file, suddividendolo alle pagine 3 e 5.


Questo è buono, e un po 'più flessibile in ciò che puoi produrre rispetto a pdf separare sopra. Sebbene sia principalmente per suddividere un pdf in blocchi di pagine, se si desidera dividere ciascuna pagina, è possibile utilizzare facilmente seqper produrre un intervallo di numeri nel comando. Grazie!
dgig

1
qualcosa di simile ha python splitPDF.py MyPDF.pdf $(seq -s ' ' 1 10 411)funzionato per me
dgig

1
Parole fantastiche. Confermo questo funziona direttamente su MacOS 10.13.3
MichaelCodes

1

Per un'altra alternativa, vedi questa risposta . Questo utilizza gli strumenti della riga di comando di ImageMagick .

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

Tuttavia, devi stare attento con la qualità.


1

Se vuoi estrarre un intervallo di pagine, puoi usare il seguente script che chiami in questo modo (supponendo che tu lo salvi nel file pdfextract.py da qualche parte sul PERCORSO del tuo sistema, ad esempio / usr / local / bin, e assegnagli l'esecuzione permesso con 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()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.