Конвеєр: масштабування PDF-файлів за допомогою pdfscale

Oleksandr Kolodko
3 min readDec 12, 2023

Іноді буває треба робити однакові макети у різних масштабах. Наприклад, якій знаки, що можуть зчитуватись зблизька і здалека. І можна під ці випадки робити окремі макети, але оновлювати весь цей парк знаків не зручно.

Краще мати якийсь один майстер-макет, як компонент у Фігмі, який можна розтягнути або зменшити до потрібного розміру. Для цього можна зробити основу в AI/ID, а масштабні копії робити в окремому ID, де макет буде вставлений лінком, і будуть налаштовані нові розміри. Потім це все діло можна експортувати у PDF вже у новому розмірі.

Але це знову зайві дії: оновити майстер-файл, відкрити копії, оновити лінки, експортувати, зберегти у потрібну теку. А якщо у вас в одному файлі ще й різні макети які потрібно нарізати, то взагалі жах.

Тому виходом може бути вже масштабування вже готових PDF-файлів, з одного розміру в різні. В принципі так працює експорт для екранів в Adobe Illustrator або ж у Фігмі, але це для екранів, а в тому ж Індизайні таких функцій взагалі немає.

Скрипт pdfscale

Знайшов гарний bash-скрипт саме для масштабування PDF — pdfscale (для роботи він потребує встановлених gs, iamgemagick, xpdf, все написано у документації в розділі Dependencies). Сам скрипт можна встановити як команду у терміналі, наприклад, через wget

wget -q -O /tmp/pdfScale.sh 'https://raw.githubusercontent.com/tavinus/pdfScale/master/pdfScale.sh' && bash /tmp/pdfScale.sh --install

У документації детально розписані всі функції і є приклади. Тож скрипт дозволяє масштабувати та змінювати розміри PDF: має вбудовані друкарські розміри і можливість вказати свої довільні у різних видах величин.

Наприклад, можна макет розтягнути до 1500×1500 мм:

bash pdfScale.sh -r "custom mm 1500 1500" file.pdf newfile.pdf

де:

  • - r “custom mm 1500 1500” — ключ resize, довільний розмір, у mm, а далі ширина та висота.
  • file.pdf — вихідний файл
  • newfile.pdf — змінений файл

При цьому не важливо у якому розмірі оригінал, він масштабується пропорційно.

Все це можна упакувати у цикл, який буде змінювати розмір всіх pff-файлів у теці й одразу складати їх у іншу теку 1500:

#!/bin/bash for i in *.pdf do pdfScale -r "custom mm 1434 1500" $i 1500/$i echo "$i - Done" done

Або ж те саме можна викликати одним рядком у Терміналі:

for i in *.pdf; pdfScale -r "custom mm 1434 1500" $i 1500/$i; echo "$i - Done"

Додаткове перейменування

Далі також всі змасштабовані файли можна перейменувати. наприклад, основні макети я мав у розмірі 660×690 мм і відповідно у самих файлах був написаний цей розмір. Для цього у скрипт додав рядок, з функцією rename, що заміняє у нових файлах текст “-660x690” на “-1434x150”:

rename 's/-660x690/-1434x1500/g' 1500/$i

Весь скрипт:

#!/bin/bash for i in *.pdf do pdfScale -r "custom mm 1434 1500" $i 1500/$i echo "$i - Done" rename 's/-660x690/-1434x1500/g' 1500/$i done

Або для Термінала:

for i in *.pdf; pdfScale -r "custom mm 1434 1500" $i 1500/$i;rename 's/-660x690/-1434x1500/g' 1500/$i; echo "$i - Done"

CMD-файл

І далі можна перетворити це на виконуваний command-файл, який можна просто запускати з теки.

Сам код:

#!/bin/bash # Change directory to be where the command is. cd "$(cd "$(dirname "$0")" > /dev/null && pwd)" # Run commands for i in *.pdf do pdfScale -r "custom mm 1434 1500" $i 1500/$i rename 's/-660x690/-1434x1500/g' 1500/$i echo "$i - Done" done

Завантажити pdfscale.command — приклад виконавчого файлу запуску скрипту. Розміри та назви тільки вкажіть свої.

А якщо потрібно зробити кілька розмірів, то можна скопіювати рядки pdfScale та rename і вказати додаткові розміри.

Originally published at https://blog.alexkolodko.com & telegram t.me/alexkolodko1.

--

--

Oleksandr Kolodko

Навігаційний та інформаційний дизайнер · Wayfinding & Information designer · alexkolodko.com · ARC wayfinding.systems · Агенти змін a3.kyiv.ua