Здоровий глузд

Про дизайн, міста та дизайн у містах, кодінг та автоматизацію

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

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

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

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

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

Схема принципу масштабування pdfscale
Принцип масштабування

Скрипт 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 і вказати додаткові розміри.

Як це виглядає в роботі

Якщо вам було цікаво та корисно, можете пригостити мене кавою ☕️: на монобанку чи по номеру картки банки 4874100025139125.