4 votos

Automatizar la eliminación de la primera página de un grupo de PDFs

Tengo el cpff y me gustaría que mi Mac automatizara 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, Automatizar la eliminación de la última página de un grupo de PDFs .

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

3voto

user3439894 Puntos 5883

He hecho esto usando el Publicación comunitaria de las herramientas de línea de comandos de Coherent PDF .

Puede descargar las herramientas preconstruidas o el código fuente para compilar este último por su cuenta, sin embargo este último requiere que se instale OCaml al compilar. Así que las herramientas preconstruidas son la forma más fácil de hacerlo. 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) se copiaría el, por ejemplo ~/Downloads/cpdf-binaries-master/OSX-Intel/cpdf a una ubicación definida en el archivo PATH variable de entorno Por ejemplo /usr/local/bin/ para hacerlo globalmente disponible en la línea de comandos en Terminal. Si no está en el PATH entonces tendrá que utilizar el nombre de ruta completamente calificado a la cpdf ejecutable o ./cpdf si está en el directorio de trabajo actual ( pwd ). En el Terminal, escriba echo $PATH por lo que mostrar la PATH .

El 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 ( en.pdf ) y escribe en un nuevo archivo ( fuera.pdf ) el fuera.pdf debe ser diferente si se guarda en la misma ubicación que el en.pdf o guardarlo en una ubicación diferente con el mismo en.pdf nombre de archivo como el fuera.pdf nombre de archivo, o lo que sea fuera.pdf nombre de archivo que desee.

A continuación, mostraré dos ejemplos de automatización utilizando cpdf para eliminar la primera página de un archivo PDF, suponiendo que tenga dos o más páginas. Uno usando un Automatizador flujo de trabajo como Servicio disponible en Buscador en el Menú contextual de servicios y el otro como bash script para usar en la Terminal.

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


En Automator cree un nuevo flujo de trabajo del servicio utilizando la configuración como se muestra en la imagen de abajo y copiar y pegar el código debajo de la imagen en el Ejecutar Shell script acción y guardar como por ejemplo Eliminar la primera página del PDF

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

Tenga en cuenta que el PATH pasó a Ejecutar Shell script acción en Automatizador es, /usr/bin:/bin:/usr/sbin:/sbin . Así que el código arriba está usando el nombre de ruta completamente calificado a la cpdf ejecutable , /usr/local/bin/cpdf ya que ahí es donde lo coloqué para que estuviera disponible en Terminal mediante el uso de su nombre cpdf Sólo.

También tenga en cuenta que si no quiere conservar los archivos originales, entonces descomente (elimine el # de enfrente) el # rm "${fn} (original).${ext}" comando justo por encima de la última línea de código done .


Como bash script para usar en el Terminal:


Crear el bash script de la siguiente manera:

En la terminal:

touch rfpfpdf
open rfpfpdf

Copiar el bloque de código , comenzando por #!/bin/bash , abajo en el abierto rfpfpdf documento y luego guardarlo.

De vuelta a la terminal:

Haga que el script ejecutable:

chmod u+x rfpfpdf

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

sudo mv rfpfpdf /usr/local/bin/

A continuación, puede cambiar de directorio cd ... a un directorio que contenga los archivos PDF de los que desea eliminar la primera página y luego simplemente escriba rfpfpdf y pulse enter .

Los archivos originales se trasladarán a " archivo (original).pdf " y el archivo PDF recién creado sin la primera página, si son 2 o más páginas, tendrá el original filename.pdf nombre.


#!/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 supone que el cpdf ejecutable está en un directorio que está dentro del PATH variable de entorno Por ejemplo: /usr/local/bin/

También tenga en cuenta que si no quiere conservar los archivos originales, entonces descomente (elimine el # de enfrente) el # rm "${fn} (original).${ext}" comando justo por encima de la última línea de código done .

3voto

benwiggy Puntos 8

Para una solución que se ejecute en MacOS sin herramientas adicionales de terceros, el siguiente script de Python eliminará la primera página de un PDF. Procesará los nombres de los archivos PDF enviados como argumentos, o puede utilizarse en una acción rápida de 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

GForce Puntos 133

He modificado el script de @user3439894 para que funcione con Hazel. Esta versión tiene los siguientes cambios para trabajar con Hazel:

  1. Como Hazel procesa cada archivo individualmente, no es necesario un bucle.
  2. Haga referencia al archivo individual utilizando $1 en lugar de $f según las instrucciones de Hazel
  3. Se ha eliminado el código que crea una copia de seguridad del original. De lo contrario, Hazel continúa procesando el archivo original recién creado cuando se guarda y se repite en un bucle infinito.

En Hazel, seleccione el Run Shell Script en el área de acción. Utiliza un script</strkeep><strkeep> incrustado y pega el código siguiente en el campo de texto.

Sugiero crear una carpeta designada para aplicar esta regla, de lo contrario se corre el riesgo de que esta regla elimine la primera página de los PDF cuando no se desea. Esto es especialmente importante ahora que ya no se crea una copia de seguridad del original.

# 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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X