Mac OS X: comment fusionner des fichiers pdf dans un répertoire en fonction de leurs noms

30

Je souhaite fusionner plusieurs centaines de fichiers pdf dans un répertoire automatiquement selon leurs noms de fichiers.

Par exemple.

Les fichiers 1000.1.pdf 1000.2.pdf 1000.3.pdf 1000.x.pdf devrait être fusionné dans 1000.pdf

et

2000.abc.pdf 2000.def.pdf 2000.ghi.pdf 2000.jkl.pdf 2000.5.pdf dans 2000.pdf .

Je ne souhaite pas utiliser de solutions basées sur Preview / Automator (le cas échéant), car comparées à des logiciels tiers tels que Adobe Acrobat ou PDFpen, la fusion de fichiers PDF entraîne souvent (en fonction des documents source) une augmentation significative de la taille du fichier (voir par exemple. Qu'est-ce qui provoque l'augmentation de la taille du fichier PDF lors de l'enregistrement dans Aperçu? )

As-tu des recommandations? Je vous remercie!

lejonet
la source
La combinaison de PDF augmentera toujours la taille du fichier, quel est votre problème avec cela?
nohillside
1
@patrix Je parle de centaines de fichiers à fusionner. Comme indiqué ci-dessus, il peut y avoir un important augmentation de la taille du fichier avec différents outils inclus dans Mac OS X. Pourquoi devrais-je vouloir un fichier texte fusionné avec une augmentation de la taille parfois plusieurs centaines de pour cent ?
lejonet
2
@patrix, lejone8 ​​veut une fusion automatique des fichiers PDF mais au ratio 1 + 1 = 2, pas avec 1 + 1 = 5? ou plus dans la taille du fichier. En outre, lejonet8 indique clairement que l'utilisation de produits Apple n'est pas acceptable en raison de leurs performances médiocres par rapport aux produits tiers! Je ne sais pas pourquoi vous supprimez mes commentaires, mais qu’il en soit ainsi.
Buscar웃
1
Je ne comprends pas la demande d'automatisation. Il est très simple et rapide d’organiser (trier) les fichiers par nom, puis de sélectionner tous les éléments de la catégorie souhaitée et de les fusionner une fois que vous avez cliqué dans l’un des programmes disponibles tels que ceux répondus ici ou d’autres. La taille du fichier résultant dépend du type et du contenu des fichiers PDF. Par conséquent, 1 + 1 = 2 n'est pas possible. Lejonet8 semble avoir du mal à expliquer pourquoi les programmes Apple créent des fichiers PDF plus volumineux que les autres. Bonne chance pour répondre à cela.
Buscar웃
2
Peux-tu s'il te plait éditer la question pour décrire plus en détail ce que "automatisé" signifie pour vous (cela semble signifier différentes choses pour les personnes qui ont pris le temps de proposer des solutions à votre problème)? Qu'est-ce qui devrait déclencher la fusion des documents? Quels modèles faut-il utiliser pour trouver les fichiers correspondants? Surtout, la réponse de D.W. semble être hautement automatisée à première vue, mais il y a peut-être plus derrière votre question que nous ne le savons actuellement.
nohillside

Réponses:

24

Essayer pdftk . C'est un logiciel en ligne de commande qui peut joindre des fichiers PDF (et faire beaucoup d'autres choses, mais ce n'est pas pertinent ici). Vous pouvez le télécharger depuis la page web officielle de pdftk .

Exemple de syntaxe:

pdftk old1.pdf old2.pdf old3.pdf cat output new.pdf

va créer le fichier new.pdf qui contient la concaténation des fichiers old1.pdf, old2.pdf, old3.pdf.

Pour résoudre votre problème, avec votre exemple de noms de fichiers:

pdftk 1000.*.pdf cat 1000.pdf
pdftk 2000.*.pdf cat 2000.pdf

etc. Vous pouvez utiliser des scripts shell pour rendre cela complètement automatique si vous le souhaitez (mais vous devrez passer un peu de temps à apprendre par vous-même comment écrire des scripts shell).


En supposant que tous les fichiers portent les noms 1000.x, 2000.x, etc., un script shell pourrait ressembler

#!/bin/bash

for n in {1..9}; do
    if [[ -r ${n}000.1.pdf ]]; then
        rm -f ${n}000.pdf
        pdftk ${n}000.*.pdf cat ${n}000.pdf && mv ${n}000.*.pdf ~/.Trash/
    fi
done
D.W.
la source
Merci pour votre commentaire, mais je ne vois pas où se trouve un workflow pour mes besoins (des centaines de fichiers portant des noms similaires, fusionnés selon ces noms).
lejonet
1
@ lejonet8, c'est là que brillent les outils de ligne de commande! J'ai modifié ma réponse pour vous donner un exemple de la façon de procéder. L'élaboration de détails supplémentaires dépasse probablement le cadre de cette question et porte davantage sur la manière d'écrire des scripts shell.
D.W.
Merci pour votre réponse. Malheureusement, en l'exécutant sur mes fichiers, le message d'erreur suivant a été généré: Erreur: texte inattendu à la fin de la plage de pages, ici: 1000.pdf
lejonet
1
@ lejonet8 Peut-être pourriez-vous élaborer un peu plus sur vos besoins en automatisation dans la question . Cherchez-vous des choses comme "Actions de dossiers" ou autres? Qu'est-ce qui déclencherait le processus de concaténation en premier lieu?
nohillside
3
@ lejonet8, Vous devrez peut-être expérimenter un peu pour savoir comment faire fonctionner pdftk pour vous. Un message d'erreur, sans contexte, ne me permet malheureusement pas de diagnostiquer le problème. Essayez de concaténer quelques paires de fichiers. Expérience. Voyez si vous pouvez diagnostiquer quand pdftk fonctionne / ne fonctionne pas et la cause. Lire le tutoriel. Ensuite, posez une question sur la façon de faire fonctionner pdftk sur un site Stack Exchange ou un autre site de questions / réponses approprié. FWIW, pdftk a été très fiable pour moi, fonctionnant avec une grande variété de fichiers pdf générés par de nombreux programmes. Bien sûr, votre expérience peut varier.
D.W.
46

Un script Python est caché dans Automator.app qui joint les fichiers .PDF

/System/Library/Automator/Combine\ PDF\ Pages.action/Contents/Resources/join.py --help
Usage: join [--output <file>] [--shuffle] [--verbose]

Exemple d'utilisation:

/System/Library/Automator/Combine\ PDF\ Pages.action/Contents/Resources/join.py --output all.pdf *.pdf
akuhn
la source
2
Merci pour votre réponse. Je ne peux pas commenter le contexte technique (il peut y avoir une différence dans la fusion dans Automator et Preview). En fonction des fichiers source, la taille du fichier peut également augmenter considérablement. Je viens juste de le tester à nouveau et quatre fichiers d’une taille totale de 12 Mo ont été joints à un document de 32 Mo. C'est inacceptable.
lejonet
Désolé, je ne peux pas aider avec ça.
akuhn
4
J'ai ajouté cette commande comme un alias dans mon ~/.bash_profile fichier comme ceci: alias catpdf="/System/Library/Automator/Combine\ PDF\ Pages.action/Contents/Resources/join.py --output all.pdf *.pdf" alors je peux juste cd dans un répertoire contenant des PDF et exécuter catpdf.
smacdonald
1
Upvoting pour l'utilisation ingénieuse du script Python caché dans une application! J'ai cependant décidé d'utiliser pdftk pour une solution plus robuste.
Blairg23
1
@lejonet Le contexte technique est que les deux utilisent les mêmes cadres (Quartz.CoreGraphics sur 10.11), comme vous l'avez deviné. Cela se voit dès les premières lignes du script `join.py '(instructions d'importation).
hans_meine
6

Vous pouvez utiliser pdfunite distribué avec poppler. Vous pouvez installer poppler avec Homebrew:

brew install poppler

Et maintenant, utilisez-le:

pdfunite input1.pdf input2.pdf input3.pdf output.pdf

poppler vient également avec ces autres commandes: pdfdetach, pdffonts, pdfimages, pdfinfo, pdfseparate, pdftocairo, pdftohtml, pdftoppm, pdftops, pdftotext, en plus de pdfunite.

Flimm
la source
0

pdftk ne fonctionne plus sur El Capitan! (OS X 10.10)

Une alternative est pagemaster de PDFTron. La syntaxe serait la suivante:

pagemaster -m *.pdf -o output.pdf

Il n’a pas le problème d’augmentation de la taille du fichier de la solution Automator ci-dessus, car il utilise une bibliothèque PDF personnalisée.

Remarque: ce n'est pas un outil gratuit. La version de démonstration ajoute un filigrane fin sur chaque page.

antoine
la source