Скрипт для Adobe InDesign

01.05.2009 - 11:40
Авторы: Код - V@s3K
Использованное ПО: Quanta+ 3.5, VirtualBox 2.2.1, Adobe InDesign CS3 (Trial)

РНР-скрипт написанный по заказу редакции газеты «Образование, работа, карьера» для их «Справочника аббитуриента '2009».

Предыстория

Вся база данных по 6 городам организована в виде MS Office Excel файлов, в самой базе есть пара макросов, которые перегоняют ее в txt-файлы практически без разметки. Теперь нужно этот txt-файл обработать так, чтобы его «понял» Adobe InDesign CS3. Как выяснилось путем поиска в гугле и вопросом в ЖЖ-сообществе ru_indesign, у нее есть свой формат InDesign Tagged Text, на использование которого и пал мой выбор. Как оказалось — весьма простой язык разметки (техническое описание с сайта adobe прикрепил ниже). Скрипт должен использовать уже имеющиеся стили в файле InDesign.

Сразу же назревает вопрос — почему же нельзя было сразу написать макрос, перегоняющий всю базу данных в один Tagged Text файл? Зачем нужно было нанимать программиста для составления еще одной программы на совершенно другом языке (более того — языке, совершенно не предназначенном для этих целей). Вот и я не знаю. Но пока заказчик платит — можно и написать.

Кстати почему именно РНР? Как выяснилось раньше они уже работали с одним «программистом», который написал им подобный скрипт. Так вот видимо он не сильно отличался умом и сообразительностью, потому что написал его на РНР и более того — откомпилировал в EXE неизвестной науке программой, чтобы вся эта жесть запускалась под виндой. Так же он приложил свой код, который состоял из более чем 1800 (!!!) строк кода, которые были просто напичканы str_replace'ами и preg_match'ами. Видимо человека в детстве явно пугали массивами и циклами. На обработку небольшого файла (например БД по вузам города) программа тратила минут 5, в течении которого постоянно выводила левые числа, чтобы показывать хоть какую-нибудь активность. Вот в общем на смену этому должен был придти я.

Процесс

Было решено полностью минимизировать время работы программы. Даже ограничение в 3 секунды на один файл для меня казалось довольно большим, но как выяснилось быстродействие консольных РНР-приложений несколько меньше, чем серверных, поэтому 3 секунды стало той границей, в которую мы вполне укладывались.

Так же было принято решение о полной минимизации кода. Все что было нужно заменять было засунуто в ассоциативный массив, все, что выделять жирным, в простой файл. Все правки проводились по строкам в цикле, что позволило уменьшить количество строк рабочего кода с 1800 до 80. Так же выяснилось, что в РНР нет функции однократной замены, что нужно было срочно решать написанием своей функции однократной замены подстроки в строке.

Потом была довольно большая проблема в том, что программа разрабатывалась и тестировалась под Linux, а запускать ее предстояло в Windows. Ну если про регистрозависимость все помнят всегда, то я напрочь забыл про то, что наш \n в Windows это \r\n. Именно поэтому при первом запуске обнаружилось большое месиво букв. Думаю после этого я уже никогда не буду забывать про эти \r\n.

Результат

Ну и что же мы получили? РНР-скрипт из двух файлов — исполняемого (index.php) и файла замен (replace.php). Запускается простым bat'ником, который тут же скармливает его php.exe и исполняет. Никакой компиляции в exe непонятными программами. Все изменения в скрипте сразу же влияют на программу. Обработка файлов по четырем городам занимает в среднем 7-8 секунд на средней машине (1 ядро, 2.5GHz), что приемлемо для данной задачи.

Все исходные файлы скрипт берез из директории input и после обработки складывает в директорию output, приписывая в начало сегодняшнее число (для удобства так требовалось). Пример входного файла я дам ниже.

--Вузы Новосибирская область--

#АКАДЕМИЯ НАЦИОНАЛЬНОЙ БЕЗОПАСНОСТИ, ОБОРОНЫ И ПРАВОПОРЯДКА

Новосибирский филиал

Лицензия: № 166467

Адрес: 630102, г. Новосибирск, ул. Нижегородская, 6 — 364

Тел./факс: (383) 210?11?56

#ИНСТИТУТ ПЕРСПЕКТИВНЫХ ТРАНСПОРТНЫХ ТЕХНОЛОГИЙ И ПЕРЕПОДГОТОВКИ КАДРОВ СИБИРСКОГО ГОСУДАРСТВЕННОГО УНИВЕРСИТЕТА ПУТЕЙ СООБЩЕНИЙ

Адрес: г. Новосибирск, ул. Д. Ковальчук, 187, корпус 3, остановка «НИИЖТ»

Тел./факс: (383) 328-04-67, 328-03-49

Сайт: iptt.stu.ru

Приглашает на семинары, курсы повышения квалификации по следующим программам:

Строительство

- Техническая эксплуатация и реконструкция производственных и гражданских зданий;

- Техническая эксплуатация, содержание и ремонт зданий;

- Организация работы и новые технологии в хозяйстве водрснабжения в современных условиях;

- Отопление и вентиляция промышленных и гражданских объектов;

- Подготовка и повышение квалификации по проектно-сметной деятельности;

- Математическое моделирование несущих элементов транспортных сооружений, в т.ч. «COSMOS», программы: «CREDO-Автодороги»: «SCAD-offis», «ArchiCAD», AUTOCAD».

Автодороги и автотранспорт

- Проектирование, строительство, эксплуатация, ремонт автомобильных дорог;

- Организация автомобильных грузовых перевозок;

- Безопасность автоперевозок (ГОСАВТОНАДЗОР).

Промышленная безопасность, охрана труда, ГО и ЧС

- Промышленная безопасность;

- Предупреждение и ликвидация чрезвычайных ситуаций;

- Выявление и предупреждение террористических действий;

- Обучение по охране труда и проверка знаний требований охраны труда руководителей и специалистов предприятий;

- Обучение по охране труда членов комитетов (комиссий) и уполномоченных (доверенных) лиц профсоюзных органов по охране труда на предприятиях;

- Повышение квалификации инженеров по охране труда по аттестации рабочих мест.

Экологическая безопасность

- Обеспечение экологической безопасности руководителями (специалистами) общехозяйственных систем управления;

- Обеспечение экологической безопасности руководителями (специалистами) экологических служб и систем экологического контроля;

- Обеспечение экологической безопасности при работах в области обращения с опасными отходами.

Иностранные языки (разговорный, деловой, инженерный, деловая переписка)

- Английский, немецкий, французский, китайский, японский, корейский.

Менеджмент

- Управление государственными закупками, размещение гос. заказов;

- Менеджмент жилищно-коммунального хозяйства;

- Менеджмент по персоналу;

- Секретарь-референт.

Вот такое екно появляется после запуска start.bat. В цикле берутся все файлы из директории /input/ и обработанный кладутся в /output/.

Working...

После обработки мы получаем не понятный человеку, зато отлично читаемый в Adobe InDesign версии CS3 документ.

Обработанный текст

refresh

i