2014-05-19

Нарезка PDF-файла по координатам на куски в Linux

Занялся переносом карточной игры "Cards Against Humanity" в симулятор настольных игр.  Сеты карт для этой игры распространяются бесплатно в PDF-формате, в том числе существует и неофициальный перевод карт на русский. В обычной жизни предполагается возможность распечатать и нарезать колоду, мне же стало необходимо получить индивидуальные картинки карт.

Как можно видеть, исходный файл достаточно ровно сверстан, поэтому логично было бы попробовать автоматизировать его нарезку.


Для начала нам потребуется утилита cpdf, взять ее можно тут: https://github.com/coherentgraphics/cpdf-binaries

Вырезка кусочка PDF по его координатам осуществляется командой:
cpdf -crop "Xнач Yнач Xкон Yкон" input.pdf -o output.pdf, где:
Xнач и Yнач - начальная точка квадрата выделения (левая-нижняя)
Xкон Yкон - смещение до конечной точки квадрата выделения (правой-верхней)
при этом счет координат ведется от нижнего-левого угла листа.

Эта команда составит нам пдфник, каждая страница которого будет вырезкой из страницы оригинального файла.

Разумеется я подсчитал смещения по оси X и настрогал пдфников такой очень ленивой строчкой:
for i in {0..3}; do let "x=(14+($i*144))" ;  cpdf -crop "`echo $x` 29 134 134  " ~qiwichupa/Gotovaya_versia.pdf -o out_1_$i.pdf ; done;

В результате я получил 4 файла с картами с последней строки оригинала:
раз, два, три, четыре.

Тут лень взяла верх, и я повторил этот  однострочник еще 4 раза, вручную поменяв стартовую координату Y, примерно так:
for i in {0..3}; do let "x=(14+($i*144))" ;  cpdf -crop "`echo $x` 188 134 134  " ~qiwichupa/Gotovaya_versia.pdf -o out_2_$i.pdf ; done;

В итоге я получил 4*5=20 файлов, каждый из которых имел 1 карту на одной странице. Вагон ручной работы по нарезке избегнут! Дальше марафет.

Режу файлы на страницы, складывая их в отдельную папку: 
for i in ./*.pdf; do  cpdf -split $i -o ./pdf/$i-%%.pdf ; done;

Удаляю обрезки от первых двух и последней страниц:
rm ./pdf/*-0[12].pdf
rm ./pdf/*-30.pdf

Тут выяснилось что 100%-ный размер получившихся карточек маловат для конвертации в графику, поэтому пришлось увеличить его в 5 раз:
for i in ./pdf/*.pdf ; do cpdf -scale-page "5 5" $i -o $i.pdf; done ;

В результате получились такие прекрасные карточки. Осталось их сконвертировать в растр (png):
for i in ./pdf/*.pdf ; do convert $i  -flatten   -trim -sharpen 1x1.0 $i.png ; done ;

Вуаля - результат!

Комментариев нет:

Отправить комментарий