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 usando la versión de la comunidad de herramientas de línea de comandos de Coherent PDF .
Puede descargar las herramientas preconstruidas o el código fuente para compilar el último por su cuenta, sin embargo, este último requiere que se instale OCaml al compilar. Entonces, 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), copiaría el archivo, p. ej., ~/Downloads/cpdf-binaries-master/OSX-Intel/cpdf , en una ubicación definida en la PATH
variable de entorno , p. ej. /usr/local/bin/
, en haz que esté disponible globalmente en la línea de comando en la Terminal. Si no está en el PATH
entonces tendrá que usar el nombre de ruta completo al cpdf
ejecutable o ./cpdf
si está en el directorio de trabajo actual ( pwd
). En Terminal, escriba echo $PATH
para mostrar el archivo 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
Debido a cpdf
que lee el archivo original ( in.pdf ) y escribe en un archivo nuevo ( out.pdf ), el nombre del archivo out.pdf debe ser diferente si se guarda en la misma ubicación que el archivo in.pdf o si se guarda en una ubicación diferente. con el mismo nombre de archivo in.pdf que el nombre de archivo out.pdf , o cualquier nombre de archivo out.pdf que desee.
A continuación, mostraré dos ejemplos de automatización cpdf
para eliminar la última página de un archivo PDF, suponiendo que tenga dos o más páginas. Uno que usa un flujo de trabajo de Automator como un servicio disponible en Finder en el menú contextual de servicios y el otro como un script , para usar en Terminal.bash
Como flujo de trabajo de servicio de Automator disponible en Finder en el menú contextual de servicios:
En Automator, cree un nuevo flujo de trabajo de servicio utilizando la configuración que se muestra en la imagen a continuación y copie y pegue el código debajo de la imagen en la acción Ejecutar script de Shell y guárdelo como, por ejemplo: Eliminar la última página de PDF
Para usar Eliminar última página de PDF , en Finder, seleccione los archivos PDF de los que desea eliminar la última página y luego seleccione Eliminar última página de PDF desde el menú contextual haciendo clic con el botón derecho o control-clic , o desde Finder > Servicios > Eliminar Última página de PDF
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}"
# 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 la acción Ejecutar script de ShellPATH
pasada en Automator es . Entonces, el código anterior está usando el nombre de ruta completamente calificado para el ejecutable , ya que es donde lo coloqué para que esté disponible en la Terminal mediante el uso de su nombre , únicamente. /usr/bin:/bin:/usr/sbin:/sbin
cpdf
/usr/local/bin/cpdf
cpdf
También tenga en cuenta que si no desea conservar los archivos originales, elimine el comentario (elimine el #
del frente) del # rm "${fn} (original).${ext}"
comando , justo encima de la última línea de código done
.
Como bash
script para usar en Terminal:
Cree el bash
script de la siguiente manera:
En terminal:
touch rlpfpdf
open rlpfpdf
Copie el bloque de código , comenzando con #!/bin/bash
, a continuación en el rlpfpdf
documento abierto y luego guárdelo.
De vuelta en la Terminal:
Haga que el script sea ejecutable:
chmod u+x rlpfpdf
Ahora mueva el rlpfpdf
script 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 escribir rlpfpdf
y presionar enter.
Los archivos originales se moverán a " nombre de archivo (original).pdf " y el archivo PDF recién creado sin la última página, si tiene 2 o más páginas, tendrá el filename.pdf
nombre original.
#!/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 el cpdf
ejecutable está en un directorio que está dentro de la PATH
variable de entorno , por ejemplo:/usr/local/bin/
También tenga en cuenta que si no desea conservar los archivos originales, elimine el comentario (elimine el #
del frente) del # rm "${fn} (original).${ext}"
comando , justo encima de la última línea de código done
.
InteresadoEstudiante
usuario3439894
cpdf in.pdf 2-end out.pdf
El código proporcionado en mi respuesta a su OP es específico para eliminar la última página y no puede simplemente usarlo2-end
en lugar de1-~2
o1
dentro del script tal como está escrito. Tendrías que recodificarlo para que coincida con las condiciones. Si publica una nueva pregunta, publicaré un guión que sea propicio para las condiciones.InteresadoEstudiante
retrografía
cpdf in.pdf 1-~2 -o out.pdf
ahora también funciona para documentos de 2 páginas. Sería genial si pudieras editar tu respuesta en consecuencia. Esto simplificará mucho el guión.