Пересборка PDF
- Информация о материале
- Категория: Рабочие Станции
- Опубликовано: 31.03.2011, 16:30
- Автор: Super User
- Просмотров: 1885
Сегодня возникла задача хитро распечатать pdf. Нужна была двусторонняя печать по две страницы на стороне.
То есть 1 и 2 страница на первой стороне, 3 и 4 на второй... ну и так далее.
Принтер таких хитрых настроек не имел, по этому пришлось выкручиваться. На помощь пришла утилитка imagemagic.
Задача делится на 3 части:
- разобрать pdf по страницам на jpg
- соединить по порядку по 2 jpg вместе
- снова собрать в pdf
Все это оказалось элементарно сделать при помощи пакета ImageMagic.
И так. Вперед по пунктам.
Разобрать pdf
Используем утилиту convert:
$convert source.pdf source.jpg
На выходе получаем кучу jpg-ов, пронумерованных от 0 до количества страниц -1.
Соединить jpg вместе
Тут нам на помощь приходит утилита montage.
$montage -geometry +4+4 source-0.jpg source-1.jpg output1.jpg
Собрать картинки в pdf
И опять пользуемся convert:
$ convert output1.jpg output2.jpg output1.pdf
В общем... Где-то так.
Вот только обычно в pdf далеко не 10 страниц. По этому сваял скриптик:
#!/bin/bash
#Создаем временную папку
mkdir tmp
# имя файла на входе
pfile=$1;
# сколько страниц обрабатываем
strn=$2
echo "Unpack pdf....";
# распаковываем в картинки
convert $pfile "tmp/${pfile%.pdf}.jpg";
echo "convert images.."
#в этом цикле склеиваем страницы
for i in $(seq 0 2 $strn);
do
fn=${pfile%.pdf}-$i.jpg;
let "t = i + 1";
fn1=${pfile%.pdf}-$t.jpg;
montage -geometry +4+4 "tmp/$fn" "tmp/$fn1" "tmp/$i-$t.jpg";
pdff=$pdff\ tmp/$i-$t.jpg;
done;
echo "create new pdf....";
pdff=$pdff\ res.pdf;
# и создаем новый файл
convert $pdff;
rm -rf tmp/*;
rmdir tmp;
Cкрипт вызывается с двумя параметрами - имя файла на входе и количество страниц в нем -1