Comment combiner plusieurs PDF à l'aide de la ligne de commande?

52

Existe-t-il une solution simple pour combiner plusieurs fichiers PDF en un seul?

Je sais que cela peut être fait en utilisant Preview.app

reacuna
la source

Réponses:

75

Reportez-vous à la section "Combinaison de fichiers PDF sur la ligne de commande sous OSX" dans Jointure de fichiers PDF sous OS X à partir de la ligne de commande .

Il s'avère que depuis Tiger, OSX est livré avec un script Python qui fait exactement ce dont vous avez besoin. Le script est déjà exécutable et Python est pré-installé sur OS X. Il suffit donc de l’exécuter pour ouvrir le terminal et taper

"/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py" -o PATH/TO/YOUR/MERGED/FILE.pdf /PATH/TO/ORIGINAL/1.pdf /PATH/TO/ANOTHER/2.pdf /PATH/TO/A/WHOLE/DIR/*.pdf

Également sur la page liée , il suggère de faire un lien symbolique pour le join.pyfichier pour faciliter la saisie mais ils ont omis l' -sen ln -s ... ..., et sans elle, un lien dur est créé. Cela n'aurait probablement pas d'importance, bien que je le mentionne.

utilisateur3439894
la source
Travaillé pour moi Une bonne chose ici est d’éviter d’installer des paquets supplémentaires que vous ne pourrez plus jamais utiliser. Merci.
Gvrocha
Travaillé pour moi sur El Capitan 10.11.6.
pabuisson
2
Attention : j'avais des fichiers PDF où la rotation de plusieurs pages était
gâchée
28

Installez simplement Ghostscript en utilisant Brew avec la commande:

brew install gs

Puis lancez la commande avec tous les fichiers listés:

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=merged.pdf source1.pdf source2.pdf source3.pdf
Bartosz Petryński
la source
OS X / macOS possède déjà un moyen natif de combiner des fichiers PDF à partir de la ligne de commande. Pourquoi perdre du temps à installer d’abord les outils de ligne de commande pour Xcode, Homebrew, puis Ghostscript, afin de faire quelque chose qui peut déjà être fait en natif sans avoir installer l'un des packages précités?
user3439894
5
@ user3439894 De nombreux utilisateurs ont déjà installé ces packages communs et les utilisent déjà gs. Cette solution serait donc tout aussi pratique pour les futures références.
Htor
1
@ user3439894 je vois la confusion. Je m'adresse à vous parce que vous mettiez en doute la valeur de cette réponse. Utiliser homebrew pour installer des utilitaires de ligne de commande est très courant ces jours-ci, alors je n'appellerais pas cela une perte de temps. pour beaucoup de gens, cette réponse constitue une solution aussi efficace que la vôtre.
htor
7
cela a fonctionné pour moi, mais ma commande n'a pas fonctionné
Thieme Hennis
2
Selon le commentaire de Thieme Hennis, le script join.py se bloque pour moi dans High Sierra avec une erreur de segmentation. Mais gs fonctionne parfaitement.
Arcdale
2

Le script python d’Apple dans l’action Automator est très lent, car il utilise les API CGPDFDocument de CoreGraphics, plutôt que le cadre plus récent de PDFKit. Il importe également toute la bibliothèque CoreGraphics, plutôt que simplement les API requises.

Un autre script python plus rapide peut être trouvé ici:

Ce script ajoute également une table des matières au PDF, répertoriant chaque fichier de composant (et fusionnant les listes de tâches existantes), ce que ne fait pas Apple.

Il peut être utilisé sur la ligne de commande (avec les noms de fichiers PDF comme arguments) ou dans une action de script shell Automator pour créer une action / un service rapide pour le Finder.

Benwiggy
la source
1
En guise de test, en utilisant la time commande en conjonction avec votre joinpdfs.py scénario , le intégré join.py scénario et deux fichiers ~ 200 Mo chacun, votre joinpdfs.py scénario était de 9 secondes plus vite que le intégré join.py scénario , avec bien sûr l'avantage d'avoir la table des matières intacte . Agréable! +1
user3439894
BTW 9 secondes peut ne pas sembler beaucoup, mais il représentait un tiers du temps total du script intégré . Un tiers du temps plus rapide est donc important.
user3439894
1

FWIW, j’ai écrit un petit programme rapide qui te permet de le faire sans avoir à dépendre de dépendances externes comme le système python, etc. Sur github ici: pdfmerge et assez simple à utiliser, vous pouvez lui transmettre une liste de fichiers PDF avec lesquels fusionner pdfmerge in1.pdf in2.pdf ... out.pdf, une liste de fichiers à fusionner dans un fichier texte comme, pdfmerge infileslist.txt out.pdfou tout simplement créer le répertoire actuel dans l’ordre ABC pdfmerge out.pdf. Je l'ai écrit en tant que projet d'apprentissage, donc gratuit et ouvert, et vous pouvez obtenir le dernier binaire à partir de l'onglet des versions de github.

Paul Gowder
la source
Étant donné que Python est installé par défaut dans et sous macOS, je ne le considère pas nécessairement comme une dépendance externe en soi. En d'autres termes, pour utiliser ce qui est déjà prêt à l'emploi dans macOS afin de joindre des fichiers PDF, le join.pyscript de l'action Combiner des pages PDF dans Automator, rien d'autre ne doit être téléchargé ou installé, mais pour utiliser le vôtre, il me faudrait téléchargez et installez-le. Aussi n'a pas vu un binaire sur le lien.
user3439894
1
Au fait, j'ai lu attentivement votre code et il est intéressant de noter que vous utilisez deux des composants principaux (Foundation et Quartz) que le script python utilise déjà. Y a-t-il quelque chose dans votre code qui soit intrinsèquement préférable pour influencer son utilisation par rapport à ce qui est déjà proposé par défaut sans avoir à télécharger quoi que ce soit, alors que chez vous, vous devez prendre des mesures supplémentaires pour l'utiliser?
user3439894
1
Pour les personnes qui n'utilisent pas Python pour autre chose, il est probablement plus logique d'utiliser le script fourni par Apple. Mais pour les utilisateurs de Python, gérer plusieurs versions (le système Python version 2.7, moderne Python version 3.x) peut s'avérer fastidieux, avec différentes installations de modules et autres. Sur ma machine, par exemple, mon $ PATH pointe vers un Python totalement différent. Cela peut être résolu avec une utilisation judicieuse des shebangs et autres, mais je trouve cela agaçant. YMMV, bien sûr. Lien direct vers la page de téléchargement binaire: github.com/paultopia/pdfmerge/releases/latest
Paul Gowder le
1

la construction sur le @Bartosz Petryński de bonne réponse , nous pouvons faire un minimum propre cpdfutilité sur le dessus de Ghostscript:

brew install gs
cpdf () { 
  gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="$1" "${@:2}"
}

puis utilisez-le comme:

cpdf merged.pdf file1.pdf file2.pdf file3.pdf
Micah Stubbs
la source
0

J'ai trouvé l' outil de ligne de commande PDF gratuit Coherent comme étant la meilleure option. Il est très rapide, sans perte et ne gâche pas l’orientation ou les hyperliens comme le faisaient certaines autres solutions. Le format est:

cpdf file1.pdf file2.pdf -o output.pdf
gwint
la source