4 votes

Automatisez la suppression de la première page d'un groupe de PDF.

J'ai le cpff J'aimerais que mon Mac puisse automatiser la suppression de la première page de nombreux PDF. J'ai déjà un script pour supprimer la dernière page de ma question précédente, Automatisez la suppression de la dernière page d'un groupe de PDF. .

Comment puis-je modifier le code dans la réponse à cette question pour supprimer la première page au lieu de la dernière ?

3voto

user3439894 Points 52496

Je l'ai fait en utilisant le Coherent PDF Command Line Tools Community Release .

Vous pouvez télécharger soit les outils préconstruits, soit le logiciel code source pour compiler le dernier par vous-même, cependant ce dernier nécessite qu'OCaml soit installé lors de la compilation. Les outils préconstruits sont donc le moyen le plus simple de procéder. Le fichier de distribution téléchargé, par exemple cpdf-binaries-master.zip contient des binaires pour Linux, OS X/MacOS et Windows. Sa taille est de ~5 MB.

Une fois téléchargée et extraite (double-cliquer sur le fichier .zip) vous copieriez le, par ex. ~/Downloads/cpdf-binaries-master/OSX-Intel/cpdf dans un emplacement défini dans le fichier PATH variable d'environnement par exemple /usr/local/bin/ pour le faire à l'échelle mondiale disponible sur la ligne de commande dans Terminal. S'il n'est pas dans le PATH alors vous devrez utiliser l'option nom de chemin entièrement qualifié au cpdf exécutable ou ./cpdf s'il se trouve dans le répertoire de travail actuel ( pwd ). Dans le Terminal, tapez echo $PATH alors montrez le PATH .

El syntaxe pour supprimer la première page lorsque le fichier PDF comporte 2 pages ou plus :

cpdf in.pdf 2-end -o out.pdf

Parce que cpdf lit le fichier original ( en.pdf ) et écrit dans un nouveau fichier ( out.pdf ) le out.pdf doit être différent s'il est sauvegardé au même endroit que le fichier d'enregistrement. en.pdf ou l'enregistrer à un autre endroit avec le même nom de fichier. en.pdf comme le nom de fichier out.pdf nom de fichier, ou autre out.pdf nom de fichier que vous voulez.

Ci-dessous, je vais vous montrer deux exemples d'automatisation à l'aide de cpdf pour supprimer la première page d'un fichier PDF, en supposant qu'il comporte deux pages ou plus. L'une d'entre elles utilise un Automator flux de travail en tant que Service disponible en Finder sur le Menu contextuel des services et l'autre comme un bash script à utiliser dans le terminal.

Comme un flux de travail de service Automator disponible dans le Finder sur le menu contextuel des services :


Dans Automator, créez un nouveau flux de services en utilisant les paramètres comme indiqué dans l'image ci-dessous et copier et coller l'adresse de l'utilisateur. code en dessous de l'image dans le Exécuter le Shell script action et sauvegarder comme par exemple : Supprimer la première page d'un PDF

Pour utiliser Supprimer la première page d'un PDF en Finder sélectionnez les fichiers PDF dont vous souhaitez supprimer la première page, puis sélectionnez Supprimer la première page d'un PDF de la Menu contextuel via Cliquez à droite sur o contrôle-clic ou de Finder > Services > Supprimer la première page d'un PDF

Automator Service Workflow Image


for f in "$@"; do
            # Get Page Count.
        p="$(/usr/local/bin/cpdf -info "$f" | awk '/Pages:/{print $2}')"
            # Get file extension.
        ext="${f##*.}"
            # Get filename without extension.
        fn="${f%.*}"
            # Rename original file to "filename (original).pdf".
            # Use '-n' to not overwrite an existing file.
        mv -n "$f" "${fn} (original).${ext}"
        case "$p" in
            1)
                    # PDF file has 1 page. Make a copy to the
                    # original name for consistency of output.
                    # Use '-n' to not overwrite an existing file.
                cp -n "${fn} (original).${ext}" "$f"
                ;;
            *)
                    # PDF file has 2 or more pages.
                    # Remove the first page.
                /usr/local/bin/cpdf "${fn} (original).${ext}" 2-end -o "$f" 
                ;;      
        esac
            # If you don't want to keep the original
            #  file, remove '#' from the next line.
        # rm "${fn} (original).${ext}"
done

Notez que le PATH a adopté un Exécuter le Shell script action sur Automator est, /usr/bin:/bin:/usr/sbin:/sbin . Ainsi, le code ci-dessus utilise le nom de chemin entièrement qualifié au cpdf exécutable , /usr/local/bin/cpdf car c'est là que je l'ai placé afin d'être disponible en Terminal en utilisant son nom cpdf seulement.

Notez également que si vous ne souhaitez pas conserver les fichiers d'origine, décommentez (supprimez l'attribut # de devant) le # rm "${fn} (original).${ext}" commande juste au-dessus de la dernière ligne de code done .


En tant que bash script à utiliser dans le terminal :


Créer le bash script de la manière suivante :

Dans le terminal :

touch rfpfpdf
open rfpfpdf

Copiez le bloc de code en commençant par #!/bin/bash en bas, dans l'ouverture rfpfpdf puis l'enregistrer.

Retour au terminal :

Faites le script exécutable :

chmod u+x rfpfpdf

Maintenant, déplacez le rfpfpdf script à, par exemple : /usr/local/bin/

sudo mv rfpfpdf /usr/local/bin/

Vous pouvez alors changer de répertoire cd ... dans un répertoire qui contient les fichiers PDF dont vous voulez supprimer la première page, puis tapez simplement rfpfpdf et appuyez sur enter .

Les fichiers originaux seront déplacés vers " nom de fichier (original).pdf "et le fichier PDF nouvellement créé sans la première page, s'il s'agit de 2 pages ou plus, aura l'adresse d'origine. filename.pdf nom.


#!/bin/bash

for f in *.pdf *.PDF; do
    if [[ -f $f ]]; then
            # Get Page Count.
        p="$(cpdf -info "$f" | awk '/Pages:/{print $2}')"
            # Get file extension.
        ext="${f##*.}"
            # Get filename without extension.
        fn="${f%.*}"
            # Rename original file to "filename (original).pdf".
            # Use '-n' to not overwrite an existing file.
        mv -n "$f" "${fn} (original).${ext}"
        case "$p" in
            1)
                    # PDF file has 1 page. Make a copy to the
                    # original name for consistency of output.
                    # Use '-n' to not overwrite an existing file.
                cp -n "${fn} (original).${ext}" "$f"
                ;;
            *)
                    # PDF file has 2 or more pages.
                    # Remove the first page.
                cpdf "${fn} (original).${ext}" 2-end -o "$f" 
                ;;      
        esac
            # If you don't want to keep the original
            #  file, remove '#' from the next line.
        # rm "${fn} (original).${ext}"
    fi
done

Notez que le code ci-dessus suppose que le cpdf exécutable est dans un répertoire qui se trouve dans le PATH variable d'environnement par exemple : /usr/local/bin/

Notez également que si vous ne souhaitez pas conserver les fichiers d'origine, décommentez (supprimez l'attribut # de devant) le # rm "${fn} (original).${ext}" commande juste au-dessus de la dernière ligne de code done .

3voto

benwiggy Points 21125

Pour une solution qui fonctionnera sous MacOS sans outils tiers supplémentaires, le script Python suivant supprimera la première page d'un PDF. Il traitera les noms de fichiers PDF envoyés comme arguments, ou il peut être utilisé dans une action rapide Automator.

#!/usr/bin/python
# coding=utf-8

from Quartz import PDFDocument
import sys
from Foundation import NSURL

def removePage(filename):
    filename = filename.decode('utf-8')
    pdfURL = NSURL.fileURLWithPath_(filename)
    pdfDoc = PDFDocument.alloc().initWithURL_(pdfURL)
    if pdfDoc:
        pageNum = pdfDoc.pageCount()
        if pageNum > 1:
            pdfDoc.removePageAtIndex_(0)
            pdfDoc.writeToFile_(filename)
    return

if __name__ == '__main__':
    for filename in sys.argv[1:]:
        removePage(filename)

1voto

Joe Li Points 1

J'ai modifié le script de @user3439894 pour qu'il fonctionne avec Hazel. Cette version a les changements suivants pour fonctionner avec Hazel :

  1. Comme Hazel traite chaque fichier individuellement, il n'y a pas besoin de boucle.
  2. Référencez le fichier individuel en utilisant $1 au lieu de $f selon les instructions d'Hazel
  3. Suppression du code qui crée une copie originale de sauvegarde. Sinon, Hazel continue à traiter le fichier original nouvellement créé lorsqu'il est sauvegardé et cela se répète dans une boucle infinie.

Dans Hazel, sélectionnez le Run Shell Script dans la zone d'action. Utilisez un script intégré et collez le code ci-dessous dans le champ de texte.

Je suggère de créer un dossier désigné dans lequel appliquer cette règle, sinon vous risquez que cette règle supprime la première page des PDF lorsque vous ne le souhaitez pas. Ceci est particulièrement important maintenant qu'un original de sauvegarde n'est plus créé.

# Get Page Count.
p="$(/usr/local/bin/cpdf -info "$1" | awk '/Pages:/{print $2}')"

# Get file extension.
ext="${1##*.}"

# Get filename without extension.
fn="${1%.*}"

# Remove page 1 of PDF if there is more than one page.
case "$p" in
    1)
        # PDF file has 1 page. Do nothing.
        ;;
    *)
        # PDF file has 2 or more pages - Remove the first page.
/usr/local/bin/cpdf "${fn}.${ext}" 2-end -o "$1" 
;;      
esac

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X