automatizar la eliminación de la primera página de un montón de archivos PDF

2

Tengo el cpff , y me gustaría que mi Mac automatice la eliminación de la primera página de muchos PDF. Ya tengo un script para eliminar la última página de mi pregunta anterior, Automatiza la eliminación de la última página de un montón de archivos PDF .

¿Cómo puedo cambiar el código en la respuesta a esa pregunta para eliminar la primera página en lugar de la última?

    
pregunta InterestedLearner 24.02.2017 - 15:37

1 respuesta

2

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 primera página cuando el archivo PDF tiene 2 o más páginas es:

cpdf in.pdf 2-end -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 primera 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 primera página de PDF

Para usar Eliminar primera página de PDF , en Buscador , seleccione los archivos PDF de los que desea eliminar la primera página y luego seleccione Eliminar primera página de 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 primera 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}"
        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

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 rfpfpdf
open rfpfpdf

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

De vuelta en la terminal:

Haga que el script sea ejecutable:

chmod u+x rfpfpdf

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

sudo mv rfpfpdf /usr/local/bin/

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

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

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 24.02.2017 - 16:22

Lea otras preguntas en las etiquetas