Automatizza la rimozione della prima pagina di un gruppo di PDF

2

Ho il cpff e vorrei che il mio Mac automatizzasse la rimozione della prima pagina di molti PDF. Ho già uno script per rimuovere l'ultima pagina dalla mia domanda precedente, Automatizza la rimozione dell'ultima pagina di un gruppo di PDF .

Come posso cambiare il codice nella risposta a quella domanda per rimuovere la prima pagina invece dell'ultima?

    
posta InterestedLearner 24.02.2017 - 15:37
fonte

1 risposta

2

L'ho fatto utilizzando la versione coerente della community di strumenti da riga di comando PDF .

Puoi scaricare sia gli strumenti predefiniti che il codice sorgente per compilare il successivo da solo, tuttavia quest'ultimo richiede l'installazione di OCaml durante la compilazione. Quindi gli strumenti predefiniti sono la via più facile da percorrere. Il file di distribuzione scaricato, ad es. cpdf-binaries-master.zip , contiene i binari per Linux, OS X / macOS e Windows ed ha una dimensione ~ 5 MB.

Una volta scaricato ed estratto (facendo doppio clic sul file .zip) copierai, ad es. ~ / Downloads / cpdf-binaries-master / OSX-Intel / cpdf , file in una posizione definita nella variabile di ambiente PATH , ad es. /usr/local/bin/ per renderlo globalmente disponibile nella riga di comando di Terminal. Se non è in PATH , dovrai utilizzare il nome di percorso completo nell'eseguibile cpdf o ./cpdf se si trova nella presente directory di lavoro ( pwd ). In Terminale, digita echo $PATH , quindi mostra PATH .

La sintassi per la rimozione della prima pagina quando il file PDF ha 2 o più pagine è:

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

Poiché cpdf legge il file originale ( in.pdf ) e scrive in un nuovo file ( out.pdf ) out.pdf nomefile deve essere diverso se salvato nella stessa posizione del file in.pdf , o salvarlo in un'altra posizione con lo stesso in.pdf nomefile come out.pdf nomefile o qualsiasi out.pdf nome file desiderato.

Di seguito, mostrerò due esempi di automazione usando cpdf per rimuovere la prima pagina di un file PDF, supponendo che abbia due o più pagine. Uno che utilizza un Automator come servizio disponibile in Finder nel menu di scelta rapida > e l'altro come bash script , da utilizzare in Terminale.

Come flusso di lavoro del servizio di automazione disponibile nel Finder nel menu di scelta rapida dei servizi:

In Automator crea un nuovo flusso di lavoro del servizio usando le impostazioni come mostrato nell'immagine sottostante e copia e incolla il codice sotto l'immagine in Esegui script di shell azione e salva come ad es .: Rimuovi prima pagina da PDF

Per utilizzare Rimuovi prima pagina da PDF , in Finder seleziona i file PDF da cui desideri rimuovere la prima pagina, quindi seleziona Rimuovi prima pagina da PDF dal Menu di scelta rapida tramite tasto destro del mouse o control-click o da Finder > Servizi > Rimuovi prima pagina da PDF

forfin"$@"; 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

Tieni presente che PATH ha passato un Esegui script shell azione in Automator , /usr/bin:/bin:/usr/sbin:/sbin . Quindi il codice sopra sta usando il nome completo del percorso al cpdf eseguibile , /usr/local/bin/cpdf poiché è lì che l'ho inserito così come essere disponibile in Terminale utilizzando il suo nome cpdf , solo.

Si noti inoltre che se non si desidera conservare i file originali, rimuovere il commento (rimuovere # di fronte a) il comando # rm "${fn} (original).${ext}" comando , appena sopra l'ultima riga di < em> codice done .

Come bash script da utilizzare nel terminale:

Crea lo script bash nel modo seguente:

Nel terminale:

touch rfpfpdf
open rfpfpdf

Copia il blocco di codice , a partire da #!/bin/bash , sotto nel documento aperto rfpfpdf e quindi salvalo.

Indietro nel Terminale:

Crea l'eseguibile script :

chmod u+x rfpfpdf

Ora sposta lo rfpfpdf script in, ad esempio /usr/local/bin/

sudo mv rfpfpdf /usr/local/bin/

Puoi quindi cambiare la directory cd ... in una directory che contiene i file PDF da cui vuoi rimuovere la prima pagina, quindi digita rfpfpdf e premi invio .

I file originali verranno spostati in " nomefile (originale) .pdf " e il nuovo file PDF creato senza la prima pagina, se 2 o più pagine, avrà il nome originale filename.pdf .

#!/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

Si noti che il codice sopra assume che cpdf eseguibile si trovi in una directory che si trova all'interno dell'ambiente PATH variabile , ad es .: /usr/local/bin/

Si noti inoltre che se non si desidera conservare i file originali, rimuovere il commento (rimuovere # di fronte a) il comando # rm "${fn} (original).${ext}" comando , appena sopra l'ultima riga di < em> codice done .

    
risposta data 24.02.2017 - 16:22
fonte

Leggi altre domande sui tag