Comment puis-je diviser un fichier PDF en pages simples rapidement (c'est-à-dire à partir de la ligne de commande du terminal)?

23

J'ai un fichier PDF de 6 pages que je souhaite diviser en 1.pdf, 2.pdf, 3.pdf, etc ...

L'aperçu ne fonctionne pas pour cela de manière surprenante (sauf si je manque quelque chose).

J'aimerais pouvoir faire cette tâche simple à partir de la ligne de commande, mais à ce stade, je prendrai tout ce qui fait le travail (sans télécharger de logiciel sommaire)

Pour info http://users.skynet.be/tools/ ne fonctionne pas comme annoncé.

user391339
la source
2
Une bonne solution en ligne de commande provient de cette réponse SE . Vous pouvez installer ghostscript en utilisant Homebrew .
fideli

Réponses:

21

Ouvrez le pdf en aperçu, puis dans le menu Affichage, sélectionnez les vignettes. Ctrl sélectionnez les pages que vous souhaitez maintenant faire glisser et déposez-les sur le bureau.

eleethesontai
la source
1
Cela a bien fonctionné. Il m'a fallu environ 30 secondes pour le faire après avoir agité environ 30 minutes. Certaines personnes utilisent cette technique conjointement avec Automator mais je ne l'ai pas encore essayée.
user391339
35

Ceci peut être réalisé en utilisant pdfseparate. Vous pouvez installer poppler avec homebrew, par brew install poppler. Cela sera également installé pdfseparate. Pour diviser le PDF document.pdfen en pages simples 1.pdf, 2.pdfetc. utilisation:

pdfseparate document.pdf %d.pdf
ttq
la source
1
Je viens de l'installer il y a popplerun jour pour pouvoir convertir des documents PDF en SVG avec pdf2svg. Je n'ai pas remarqué que cela popplervenait avec la pdfseparatecommande. Étant donné que la réponse acceptée ci-dessus (faire glisser et déposer toutes les pages PDF avec un aperçu sur le bureau) m'oblige à «cliquer» et comme j'aime les solutions sur terminal qui fonctionnent automatiquement par une seule ligne de commande, pdfseparatec'est exactement ce dont j'ai besoin. Merci beaucoup pour cet indice!
Arvid
Fait intéressant, pdfseparate produit des fichiers PDF dont la taille totale est beaucoup plus grande que la taille du pdf d'origine. J'avais un document de 400 pages avec 1,9 Mo. Après le fractionnement, j'ai obtenu quelque chose autour de 60 Mo.
Konstantin
5

Si vous êtes intéressé à le faire à partir de la ligne de commande, vous pouvez consulter le script python splitPDF de Benjamin Han pour faire le travail. Par exemple:

splitPDF.py in.pdf 3 5

diviserait le fichier in.pdfen 3 fichiers, répartis aux pages 3 et 5.

Jean-Philippe Pellet
la source
C'est bien, et un peu plus flexible dans ce que vous pouvez sortir que pdfseparate ci-dessus. Bien que ce soit principalement pour diviser un pdf en mandrins de pages, si vous voulez diviser chaque page, vous pouvez facilement l'utiliser seqpour produire une plage de nombres dans votre commande. Merci!
dgig
1
quelque chose comme ça a python splitPDF.py MyPDF.pdf $(seq -s ' ' 1 10 411)fonctionné pour moi
dgig
1
Grands mots. Je confirme que cela fonctionne directement sur MacOS 10.13.3
MichaelCodes
1

Pour une autre alternative, voir cette réponse . Cela utilise les outils de ligne de commande ImageMagick .

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

Cependant, vous devez faire attention à la qualité.

pheon
la source
1

Si vous voulez extraire une plage de pages, vous pouvez utiliser le script suivant que vous appelez comme ceci (en supposant que vous l'enregistrez dans le fichier pdfextract.py quelque part sur le CHEMIN de votre système, par exemple / usr / local / bin, et lui attribuez l'exécution autorisation avec 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
la source