Automatizza la rimozione dell'ultima pagina di un gruppo di PDF

1

Ho una cartella contenente centinaia di PDF e vorrei rimuovere l'ultima pagina di ognuno in modo rapido. Come posso lasciare che il mio Mac automatizzi questa attività? Ho bisogno di software aggiuntivo per fare questo?

    
posta InterestedLearner 21.02.2017 - 15:57
fonte

1 risposta

1

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 rimuovere l'ultima pagina quando il file PDF ha 3 o più pagine è:

cpdf in.pdf 1-~2 -o out.pdf

La sintassi per la rimozione dell'ultima pagina quando il file PDF ha 2 pagine è:

cpdf in.pdf 1 -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 utilizzando cpdf per rimuovere l'ultima 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 ultima pagina da PDF

Per utilizzare Rimuovi ultima pagina da PDF , in Finder seleziona i file PDF da cui desideri rimuovere l'ultima pagina e quindi seleziona Rimuovi ultima pagina da PDF dal Menu di scelta rapida tramite tasto destro del mouse o control-click o da Finder > Servizi > Rimuovi ultima 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}"
        # If page count is greater than 2, set 'p' to '3' as any
        # PDF with more than 2 pages the command will be the same.
    if [[ $p -gt 2 ]]; then
        p="3"
    fi
    case "$p" in
        3)
                # PDF file has 3 or more pages.
            /usr/local/bin/cpdf "${fn} (original).${ext}" 1-~2 -o "$f" 
            ;;
        2)
                # PDF file has 2 pages.
            /usr/local/bin/cpdf "${fn} (original).${ext}" 1 -o "$f"
            ;;
        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"
            ;;      
    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 rlpfpdf
open rlpfpdf

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

Indietro nel Terminale:

Crea l'eseguibile script :

chmod u+x rlpfpdf

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

sudo mv rlpfpdf /usr/local/bin/

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

I file originali verranno spostati in " nomefile (originale) .pdf " e il nuovo file PDF appena creato sans l'ultima pagina, se 2 o più pagine avranno 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}"
            # If page count is greater than 2, set 'p' to '3' as any
            # PDF with more than 2 pages the command will be the same.
        if [[ $p -gt 2 ]]; then
            p="3"
        fi
        case "$p" in
            3)
                    # PDF file has 3 or more pages.
                cpdf "${fn} (original).${ext}" 1-~2 -o "$f" 
                ;;
            2)
                    # PDF file has 2 pages.
                cpdf "${fn} (original).${ext}" 1 -o "$f"
                ;;
            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"
                ;;      
        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 21.02.2017 - 21:21
fonte

Leggi altre domande sui tag