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?
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?
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
.
Lea otras preguntas en las etiquetas pdf automation