Автоматизация рутинных действий. Вечные пропуска.

Автоматизация рутинных действий. Вечные пропуска.

Автор — Алексей А. Романенко

В первом уроке курса по эффективной работе на компьютере (http://www.ccfit.nsu.ru/arom/effectivepc/) я рассказал, как можно генерировать письма по шаблону. В этой заметке я расскажу об опыте создания «вечных пропусков».

У нас на факультете есть много традиций. Одна из них — всем выпускникам выдается «вечный пропуск» в НГУ. До галстуков мы пока не доросли и поэтому пока так. Выглядит пропуск вот так. Только все это счастье с наклеенной фотографией и заламинированно.




Естественно, что на сотню выпускников делать такие карточки было очень лень. Использовать для этих целей MS Word с его автоматической генерацией тоже не хотелось. MS Word делает новый документ на отдельной странице, а тут пропуск размером с визитку и на страницу формата А4 их можно поместить до 10 штук.

Был вариант поиграться со своим же сайтом с визитками, но о нем я, к сожалению, на тот момент забыл. http://www.ccfit.nsu.ru/arom/visitcard/index.php?t=0

Было найдено промежуточное решение. Нарисовать шаблон визитки в каком-нибудь векторном редакторе, потом скриптом пробежаться по шаблону и выполнить замену ФИО и номера зачетной книжки на соответствующие поля из базы данных, после чего собрать получившиеся документы на один лист и распечатать.

В то время, когд все начиналось, я в качестве замены CorelDraw использовал свободным векторным редактором Inkscape. В нем был создан шаблон и сохранен в формате SVG. Это текстовый файл XML формат, который можно при желании смотреть, редактировать в том же самом блокноте, или любом другом любимом редакторе. Вот его кусочек:

      <text
         transform="scale(1.056633,0.9464024)"
         sodipodi:linespacing="125%"
         id="text8794"
         y="61.096367"
         x="133.74872"
         style="font-size:10.56633091px;font-style:normal;font-variant:normal;font-weight:....
         xml:space="preserve"><tspan
           y="61.096367"
           x="133.74872"
           id="tspan2241"
           sodipodi:role="line">БАКАЛАВР</tspan><tspan
           y="74.304283"
           x="133.74872"
           id="tspan2243"
           sodipodi:role="line">ТЕХНИКИ И ТЕХНОЛОГИИ</tspan></text>
		

Далее с помощью команды

awk -F: '{print "cat side1_m.svg | sed -e \"s/_F_/$1/; s/_I_/$3/; s/_O_/$3/; s/_Z_/$4/\" > master/$1.svg"}' < list.txt

был создан скрипт, который и генерировал из шаблона все файлы с пропусками.

Осталось раскидать все карточки по листам, а это в самом редакторе Inkscape делается за полчаса.

Спустя пару лет и этого мне оказалось мало и я потратил полчаса, чтобы и от ручной расстановки картинок отказаться. Кроме того редактор Inkscape стоял только у меня на компьютере и только я эти файлы мог печатать. Забавно, ведь SVG это в некотором роде стандарт, но каждый редактор его воспринимает по-своему.

В сети я нашел библиотеку fpdf и расширение к ней PDF_Draw, для рисования различных полигонов. Она позволяла на PHP написать скрипт, который создает PDF документ, а PDF, как вы догадываетесь, уже могут читать все. Скрипт получился в 153 строчки (http://www.ccfit.nsu.ru/arom/old/test/card/script.php.txt) и вот тут вы можете видеть результат его работы: http://www.ccfit.nsu.ru/arom/old/test/card/

В качестве вывода можно сказать, что порой автоматизация рутинных действий требует некоторых навыков программирования и знания скриптовых языков (на Си\Си++ или Java я бы писал подобные программы существенно дольше). Для данной работы я использовал строчный редактор SED, язык разбора шаблонов AWK, скриптовый язык PHP.


До новых встреч!
С уважением,
Алексей А. Романенко