Я часто получаю файлы PDF, где первая страница либо пустая, либо просто титульный лист, который мне не нужен. Можете ли вы предложить быстрый и эффективный способ (Applescript, Service или ???) удалить только эту первую страницу и сохранить файл?
Если бы это можно было автоматизировать с помощью Preview или Adobe Acrobat Professional, это было бы идеально.
Есть идеи?
решение1
Вы можете сделать это с помощьюАвтоматизаторРабочий процесс. Он немного сложнее большинства других, поэтому будьте осторожны при его реализации.
Этот пост содержитдваверсии: одна короче и сохраняет вывод как Processed PDF File.pdf
на рабочем столе, другая длиннее и сохраняет файл как(Edited)
InputFileName.pdf
в том же каталоге. Шаги, необходимые только для более длинной версии, отмечены(необязательный).
ОткрытьАвтоматизатори выберите, чтобы создать новыйУслугакоторый получаетPDF-файлыкак вход вЛюбое приложение.
- (необязательный)ДобавитьУстановить значение переменнойдействие и назовите переменную
FilePath
. (необязательный)ДобавитьЗапустить AppleScriptдействие и используйте следующий код скрипта, чтобы получить имя папки, в которой находится файл:
on run {input, parameters} tell application "Finder" to return (container of first item of input) as alias end run
(необязательный)ДобавитьУстановить значение переменнойдействие и назовите переменную
Folder
.- (необязательный)ДобавитьПолучить значение переменнойдействие и вернуть переменную
FilePath
. Игнорировать входные данные этого действия в егоПараметры. (необязательный)ДобавитьЗапустить скрипт оболочкидействие и пропуск вводакак аргументы. Используйте следующий скрипт для извлечения базового имени файла:
echo "$( basename "$1" )"
(необязательный)ДобавитьУстановить значение переменнойдействие и назовите переменную
FileName
.(необязательный)ДобавитьПолучить значение переменнойдействие и назовите переменную
FilePath
. Игнорируйте входные данные этого действия в егоПараметры.ДобавитьPDF в изображениядействие, сохранение вывода на Рабочий стол или любую папку, которая может содержать временные файлы. Назовите их как хотите.
- ДобавитьУстановить значение переменнойдействие, чтобы мы знали позже, какие временные файлы удалить. Назовите переменную
TempFiles
. ДобавитьЗапустить AppleScriptдействие и используем следующий код скрипта для фильтрации списка временных файлов (здесь мы удаляем первую страницу):
on run {input, parameters} return rest of input end run
ДобавитьОбъединить страницы PDFдействие, чтобы собрать части вместе снова,добавление страниц.
- ИспользоватьПереместить элементы Finderдействие для перемещения полученного файла (рекомбинированного PDF) на Рабочий стол или в любую папку, куда вы хотите. Если вы решили вычислить родительскую папку входного файла, это то место, куда вы перетаскиваете ссылку на переменную
Folder
. - TheПереименовать элементы Finderдействие может дать этим файлам лучшее имя файла, чем eg
zOpY3O.pdf
, которое автоматически назначается для объединенного файла PDF. Используйте egИмя Отдельный элементи дайте ему базовое имяProcessed PDF File
. Если вы решили использовать более длинный вариант, перетащитеFileName
из списка переменных в текстовое поле и добавьте(Edited)
прямо перед ним. Теперь мы в основном закончили, осталось только подчистить. - ДобавитьПолучить значение переменнойдействие и получить значение
TempFiles
. Игнорировать входные данные этого действия в егоПараметры. - ДобавитьПереместить элементы Finder в корзинудействие по удалению временных одностраничных файлов.
Вот скриншот готовой более длинной версии рабочего процесса:
решение2
Используя вышеупомянутоеинструменты командной строки PDF, мне удалось составить рабочий процесс, который выполняет следующие действия:
- Возьмите входной PDF-файл (или PDF-файлы) и создайте новый файл без первой страницы.
- Переместите исходный PDF-файл в корзину.
- Переименуйте новый файл в соответствии с исходным файлом.
Сначала я установил PDF tools, как было указано. Ключевым инструментом в данном случае является pdfsplit.
В Automator я создал новый сервис для получения выбранных PDF-файлов в Finder.
Я добавил действие «Run Shell Script» с оболочкой «/bin/bash» и «pass input» установленным на «as arguments». Затем я написал следующий простой скрипт:
for f in "$@"
do
/usr/local/bin/pdfsplit "$f" 2- > "$f".tmp
done
Я добавил действие «Переместить элементы Finder в корзину» для исходного файла и действие «Заменить текст», чтобы удалить расширение .tmp из нового файла.
Чтобы запустить процесс с входными данными из папки, скрипт будет выглядеть примерно так:
cd "$@"
for f in *pdf
do
/usr/local/bin/pdfsplit "$f" 2- > "$f".tmp
done
Полагаю, я мог бы сделать все в скрипте оболочки, включая удаление и переименование. Но команда rm может быть опасной, и я предпочитаю вместо этого переместить исходный файл в корзину.
Скрипт можно модифицировать, чтобы он делал больше, чем просто удалял x страниц. Я разработал похожую программу для пакетной обрезки и объединения PDF-файлов, например. Ознакомьтесь с руководством по pdfsplit и сопутствующим инструментам для получения дополнительной информации.
решение3
Кто-то на другом форуме разработалнекоторыйинструменты командной строки PDF, включая тот, который удаляет страницы. Выглядит не совсем просто. Единственная возможная загвоздка может быть в том, как это работает с вашим рабочим процессом. Из вашего описания, похоже, что у вас есть что-то, что работает, пока PDF открыт, и эти инструменты, похоже, работают (лучше) с закрытым файлом.
решение4
Чтобы дополнить ответ Джозефа Янниелли, тем, кто решит запустить скрипт оболочки, может быть проще включить команды для удаления и переименования файла в скрипт, а не добавлять отдельные действия через Automator:
for f in "$@"
do
/usr/local/bin/pdfsplit "$f" 2- > "$f".tmp
rm "$f"
mv "$f".tmp "$f"
done
Что касается установки инструментов командной строки PDF, то это можно удобно сделать с помощьюДомашнее пиво:
brew install pdf-tools