Automatizar eliminando la última página de un montón de archivos PDF

1

Tengo una carpeta que contiene cientos de archivos PDF y me gustaría eliminar la última página de cada uno de forma rápida. ¿Cómo puedo dejar que mi Mac automatice esta tarea? ¿Necesito software adicional para hacer esto?

    
pregunta InterestedLearner 21.02.2017 - 15:57

1 respuesta

1

He hecho esto con el versión comunitaria coherente de las herramientas de línea de comandos de PDF .

Puede descargar las herramientas precompiladas o el código fuente para compilar el último por su cuenta, sin embargo, este último requiere la instalación de OCaml al compilar. Así que las herramientas pre-construidas son la manera más fácil de ir. El archivo de distribución descargado, por ejemplo, cpdf-binaries-master.zip , contiene binarios para Linux, OS X / macOS y Windows y tiene un tamaño de ~ 5 MB.

Una vez descargado y extraído (haciendo doble clic en el archivo .zip) , copiaría el archivo, por ejemplo. ~ / Downloads / cpdf-binaries-master / OSX-Intel / cpdf , archivo a una ubicación que se define en la variable de entorno PATH , por ejemplo. /usr/local/bin/ para que esté globalmente disponible en la línea de comandos en la Terminal. Si no está en PATH , deberá usar nombre de ruta completo para el ejecutable cpdf o ./cpdf si está en el directorio de trabajo actual ( pwd ). En la Terminal, escriba echo $PATH para mostrar el PATH .

La sintaxis para eliminar la última página cuando el archivo PDF tiene 3 o más páginas es:

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

La sintaxis para eliminar la última página cuando el archivo PDF tiene 2 páginas es:

cpdf in.pdf 1 -o out.pdf

Porque cpdf lee el archivo original ( in.pdf ) y escribe en un nuevo archivo ( out.pdf ) el out.pdf filename debe ser diferente si se guarda en la misma ubicación que el archivo in.pdf , o guárdelo en una ubicación diferente con el mismo nombre de archivo in.pdf que el archivo out.pdf filename, o el nombre de archivo out.pdf que desee.

A continuación, mostraré dos ejemplos de automatización usando cpdf para eliminar la última página de un archivo PDF, asumiendo que tiene dos o más páginas. Uno utilizando un Automator workflow como Service disponible en Finder en el Menú contextual de servicios y el otro como bash script , para usar en la Terminal.


Como un flujo de trabajo de Automator Service disponible en Finder en el menú contextual de servicios:

En Automator, cree un nuevo flujo de trabajo de servicio usando la configuración que se muestra en la imagen a continuación y copie y pegue el código debajo de la imagen en Ejecutar Shell Script acción y guardar como, por ejemplo: Eliminar la última página de PDF

Para usar Eliminar la última página del PDF , en Buscador seleccione los archivos PDF de los que desea eliminar la última página y luego seleccione Eliminar la última página del PDF desde el Menú contextual a través de hacer clic con el botón derecho o hacer clic con el botón del control , o desde Finder > Servicios > Eliminar la última página del 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

Tenga en cuenta que PATH pasó una Ejecutar script de shell acción en Automator es, /usr/bin:/bin:/usr/sbin:/sbin . Por lo tanto, el código anterior está utilizando el nombre de ruta completo al cpdf ejecutable , /usr/local/bin/cpdf ya que es donde lo coloqué para que estará disponible en Terminal mediante el uso de su nombre cpdf , solo.

También tenga en cuenta que si no desea conservar los archivos originales, descomente (elimine el # de delante) el comando # rm "${fn} (original).${ext}" , justo arriba de la última línea de < em> código done .


Como bash script para usar en la Terminal:

Cree el script bash de la siguiente manera:

En la Terminal:

touch rlpfpdf
open rlpfpdf

Copie el bloque de código , comenzando con #!/bin/bash , a continuación en el documento abierto rlpfpdf y luego guárdelo.

De vuelta en la terminal:

Haga que el script sea ejecutable:

chmod u+x rlpfpdf

Ahora mueva el script rlpfpdf a, por ejemplo, /usr/local/bin/

sudo mv rlpfpdf /usr/local/bin/

Luego puede cambiar el directorio cd ... a un directorio que tenga los archivos PDF de los que desea eliminar la última página y luego simplemente escriba rlpfpdf y presione ingresar .

Los archivos originales se moverán a " filename (original) .pdf " y el nuevo archivo PDF creado sin la última página, si 2 o más páginas, tendrá el nombre original de 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

Tenga en cuenta que el código anterior asume que cpdf ejecutable está en un directorio que está dentro del entorno PATH variable , por ejemplo: /usr/local/bin/

También tenga en cuenta que si no desea conservar los archivos originales, descomente (elimine el # de delante) el comando # rm "${fn} (original).${ext}" , justo arriba de la última línea de < em> código done .

    
respondido por el user3439894 21.02.2017 - 21:21

Lea otras preguntas en las etiquetas