Учим Hazel грабить PDF-документы

Этот пост задумывался, как ответ нескольким участникам в чате Антона Маслака, но по итогу получился мануал по работе с ПэДэЭф в Hazel.app. Короткий видеоответ, как это работает:

Пост может содержать серьезные грамматические и стилистические проблемы, но если бы я этим занялся, то вряд ли опубликовал его. Приятного чтения 🙂

Проблема

Мне часто приходится отправлять контрагентам первичную документацию (счета, акты, доп.соглашения). Как правило я трачу на это один день в начале каждого месяца, чтобы рутина документооборота не съедала от тоски. Все документы я создаю в Эльбе, а потом по необходимости раскидываю на почту и мессенджеры своим заказчикам. Довольно часто папка накапливалась таким количеством документов, что непонятно кому и куда.

Cluttered Finder Folder Downloads
Документальный хаос у автора в папке Загрузки

Другой проблемой оказалось, что файлы выглядят нечитабельно для меня. Я пользуюсь простой маской, чтобы искать файлы и понимать о чем содержимое без необходимости его открывать. Пример: tehnoop_otchet_dec-2020.gdoc, расшифрую: Заказчик_Проект_Содержание_Версия. Да, ребят я технозадрот :P

https://youtu.be/YIGZncY189s Видео с поиском файлов в приложении Alfred
Так автор ищет файлы в Гугл-диске через Alfred.app

Решение

Чтобы грабить содержимое файла я буду использовать Hazel 5. Это незаменимый помощник для работы с папками и файлами. Ключевая его особенность — это мониторинг папок. Если что-то попало в папку, то программа отследит и сможет дальше работать с файлом. Может его переместить или переименовать, как вы скажете. Мое любимое правило автоматизации — роботы должны потеть. Приступим.

Правило

Создадим правило для работы с папкой Загрузки. У меня все попадает сначала в нее, а потом уже перемещается в зависимости от контента:

торренты отправляются на сетевой диск для скачивания;
скриншоты оптимизируются и уменьшаются в размерах;
файлы dmg после использования отправляются в корзину;
записи рабочих конф-коллов перемещаются на сетевой диск.

Итак, задача для счетов:

Каждый новый файл PDF, автором которого является kontur.ru переименуется по шаблону:
Заказчик_Invoice_СтоимостьВалюта_ДатаВыставления.Расширение

Hazel Rule for PDF
Правило Elba – Invoice для работы со счетами в папке Загрузки

Так как в большинстве мануалов по Hazel никто не описывает, что это за поля и зачем они нужны, то я позволю рассказать подробнее:

If all of the following conditions are met. Условие выполнения. У меня указано all, что значит, что только при выполнении всех условий правило будет запущено.

Kind. Расширение или тип файла (pdf, jpeg, ai, sketch). У меня выбран PDF.

Contents. Содержимое. Это условие будет работать с телом файла или папки.

Contain match. Содержимое соответствует. Это строгий критерий, который ищет конкретную фразу или другие сущности. В третьем условии мы будем искать фразу «Счет на оплату». Так как в Эльбе у меня все документы стандартизированы, то фраза указана, как есть, а не иначе.

Cost, buyer, date. Это самая интересная деталь этого правила. Стоимость, покупатель (заказчик) и дата создания счета — вдруг вы забыли зачем это. Это мои собственные шаблоны (patterns) поиска определённых атрибутов в файле. Атрибутами в Hazel называются встроенные виды сущностей — цифры, символы, слова или даты. При этом можно создать собственные атрибуты, как у меня. Разберу их в отдельном абзаце ниже.

Authors contain item. Последние условие — это авторство. Мне это нужно было, чтобы правило не работало с другими PDF-документами. Это из-за того, что я создаю счета не только для себя, но и при работе с другими система, важно, чтобы они не пересекались. Другие свойства файла можно проверить встроенной функции Check the status (иконка кардиограммы).

Пример поиска авторства и других свойств файла

Do the following to the matched file or folder. Заключительная часть правила — это действие (action), которое применятся к файлу или папке. В данном случае это переименование. Приказываю роботу переименовать файл с этими паттернами (Rename with pattern):

Заключительная часть правила

На скрине выше видно, что маска файла выглядит так: buyer_invoice_costrub_28-01-2021.xxx. Мы подставили три значения из содержимого файла в название файла. При этом вы могли не заметить, но внутри действия работает еще несколько действий: это замена копеек и русскоязычных названий на англоязычные. Эта фича называется Replace Text.

Пример использование Replace Text в названии файла

Пользовательские атрибуты

Подробнее разберем настроенные мной атрибуты. Cost — это сумма счета, которая берется из содержимого и вставляется в имя файла. Cost — это кастомный атрибут. Название сделано так, чтобы не путаться с другими атрибутами в названии файла. На первом скриншоте видно, что используется условие: Match the 1st occurrence from the end — что означает искать соответствие с конца файла. Hazel видит файлы не так, как мы в специальных программах.

Hazel attributes
Пример настройки собственного текстового атрибута

С помощью инструмента Preview Rule (иконка глаза на панели задач) можем посмотреть, как Hazel видит содержимое счета, который я выставил для ООО «Гугл». Так как сумма счета находится снизу, то поэтому мы будем искать ее снизу, чтобы Hazel не подставлял по ошибки другие данные, которые могут соответствовать атрибуту. На третьем скрине выше видно, что я использую вариант:

123 123 123 123.123 123

Признаюсь, что я не знаю, чем отличается Digit от Numbers. По ощущениям — это несколько цифр подряд. Так как мне важно, чтобы была именно сумма в различных вариациях от четырехзначных до шестизначных. Счета могут быть и меньше 70к или больше. В этом варианте правило работало без косяков.

UPD. Виталий Бондар из чата Tools & Productivity дополнил: number (число) — это одна сущность, могут состоять из нескольких цифр; digit (цифра) — один символ, цифра.

buyer — это заказчик услуги. Важно найти название юридического лица и подставить его в название. Это больше напоминает костыль, потому что строка покупатель и название компании при анализе текста находятся в разных частях. Так не всегда происходит, но такое есть. Поэтому важно, чтобы название компании всегда было в одном и том же месте.

Как вы видите я задаю искать 2 слово сверху, которое идет после пробела и моего ФИО:

Match the 2nd occurrence from the beginning

Почему так? Дело в том, что атрибут Anything позволяет искать любые варианты написания слов с символами и без, а также словосочетания. Если будет ООО «Иванов и Сыновья», то он это и возьмет. Для того, чтобы настроенный атрибут работал без ошибок, то я добавил ФИО. Еще проще: ФИО пробел любое значение текста.

Пример использование атрибута Anything

Разберемся с Date. Задача этого атрибута искать дату создания счета внутри файла. Да, внимательный читатель мог сказать, что проще было создать атрибут при котором дата берется и свойств файла. Но проблема в том, что иногда документы создаются задним числом и поэтому мне лично это не подходило. Для даты я использовал паттерн Custom Date, он обозначается прозрачной «точкой». Также отметил чекбокс автоматически распознавать дату, чтобы ей можно было бы манипулировать. Hazel может превратить 28 января 2021 → 28-01-2021.

Автоопределение даты внутри файлов

Основные понятия

Rules — правила, которые применяются к папке и файлам
Conditions — условия выполнения правила
Action — запуск действия
Attributes — атрибуты: слово, символ, дата и др.
Custom Attributes — настраиваемые атрибуты
Match Patterns — совпадение с шаблоном
Patterns — шаблон, пользовательское значение
Preview Rule — проверка работоспособности правила

Полезные ссылки

Использование текстовых атрибутов в официальном гайде Hazel.
Про обработку цифр в разных вариациях я уточнял на форуме Hazel.

Send
Share
Pin