PDF для шаманов 80-го уровня

Стало скучно? Ваш маунт летает и дышит огнем? Репутация во всех фракциях прокачана до максимума? Подземелье Ониксии пройдено уже стопиццот раз? Похоже, пора менять любимое развлечение на что-нибудь поновее. Кстати, кроме RPG, было создано много других интересных жанров. Как ни странно, к такому классу игрушек, как «Прикладное программное обеспечение», приходят не все. Большинство игроков, не успевших соскочить с экспресса развлечений на станции «Шутер», застревают в конце концов на остановках «Стратегия» или «RPG», наивно полагая, что эти станции – конечные. Все не так примитивно, друзья. Нужно всего лишь отринуть догмы, и перед вами раскроется целый мир реактивных компиляторов, бронебойных дебаггеров и таинственных редакторов. Оставьте своего маунта в стойле, сегодня вам будет с ним скучно. Вы думаете, в мире прикладного ПО не осталось ничего занятного? Какое заблуждение… Возьмем, например, мою вчерашнюю игрушку, Adobe Acrobat – вчера мне в нем попался интереснейший квест.

Глава нашего клана, сидящий в соседнем офисе, выдал мне поручение – составление набора макетов по имеющейся базе данных. В данном случае это были нумерованные дисконтные карты. В первую очередь на ум пришло самое простое – вывести результаты, импортировать результаты как страницу HTML и либо сразу распечатать ее, либо импортировать в Excel (для обработки) или CorelDraw (для раскрашивания). Все хорошо, но душа художника и наклонности мазохиста не могли смириться с таким простым решением. Не буду мучить вас лишним абзацем и перейду сразу к «прохождению Adobe Acrobat в GodMode».

Чтобы было проще понять, о чем все-таки идет речь, и получить возможность использовать описанные трюки в других ситуациях, постараюсь дать более общее описание задачи. У нас есть таблица Excel, сервер с базой данных или другой источник однородной информации, из которого мы хотим создать документ, удобный для просмотра и печати.

Первым делом переведем нужный нам набор данных в XML. Не думаю, что у вас возникнут с этим какие-либо проблемы, будь это офисные приложения или скрипт на web-сервере. Структура документа может быть произвольной, например вот такой…


0001
0002
0003
0099


… или вот такой…
















По большому счету, это неважно. Главное, чтобы это был валидный XML с регулярно повторяющимися тегами или атрибутами, в которых содержатся нужные нам строки. Сохраните полученный файл с расширением XML.

Теперь приступим ко второму этапу, подготовим шаблон, в который эти данные будут вставляться. В разных версиях пакета AdobeCreativeSuite есть замечательная программа LiveCycleDesigner, служащая для создания PDF-документов. Запустите эту программу и создайте новый бланк. Мастер предложит вам несколько вариантов документа: пустой бланк, создание из существующего PDF, из шаблона, из документа Word и так далее. Выбирайте пустой бланк и нажимайте «Далее». На следующей странице диалога нужно выбрать размер страницы, на который мы будем раскладывать наши карточки или бланки. По большому счету, размеры кроме А4 в наших офисах не используются. Я выбрал А4, но размер листа, разумеется, можно будет поменять позже, если это понадобится. После нажатия кнопки «Далее» вам зададут последний вопрос – нужны ли на бланке кнопки печати или отправки по e- mail. Первое несложно сделать и руками, второе понадобится только для обработки данных из бланка на сервере. Так что смело снимайте галочки с этих опций и нажимайте «Готово».

Итак, перед вами рабочее пространство AdobeLiveCycleDesigner. Слева (по умолчанию) находятся панели для работы с данными, справа – инструменты для размещения на форме элементов и управления ими. В первую очередь перетащите из панели Library (библиотека элементов) на ваш лист компонент под названием Subform. Это заготовка нашей будущей карточки, к которой мы будем подключать источники данных.

Теперь нужно подключить к проекту файл с данными, которые будут вставляться на страницу. В моем случае это список XML, в котором содержатся учетные данные клиентов, активирующих некий программный продукт (в LiveCycle XML не используется непосредственно для подстановки данных, из него берется лишь структура документа). На карточке будут серийный номер, логин и пароль пользователя. Вот примерный вид моего XML-списка:



serial1
alpha
123456


serial2
bravo
234567



serial6
foxtrot
678901



Теперь перейдите на закладку Binding в панели Object и щелкните по значку справа от опции DefaultBinding. В выпадающем меню выберите пункт NewDataConnection. Перед вами – диалог подключения данных. Нам нужен вариант SampleXMLData. Нажмите «Далее» и выберите подготовленный заранее файл XML (пример его содержимого я приводил выше) и закончите подключение кнопкой «Готово».

Если вы все сделали правильно, то в панели DataView появится дерево, отражающее структуру типичной записи в нашем файле данных. Перетащите мышью из этого дерева на вашу форму все нужные элементы (number, login и pass). Они вставятся на бланк как подписанные текстовые поля ввода. Вы можете разместить их иначе, поменять или совсем убрать названия, заменить шрифты, убрать границы у текстовых полей или как-то по-другому
отформатировать все, что сочтете нужным.

Но главное – это не вид, а содержание. У нас есть компонент Subform, на котором мы разместили текстовые поля, соответствующие записям в XML. Выделите его и откройте закладку Binding на панели Object. Нажмите на кнопку меню около пункта DefaultBinding. В меню выберите DataConnection ->record. Если вы помните, в подготовленных файлах «record» - это название тега, в котором размещены данные. Если вы подготовите файл иначе, это название может отличаться. Откройте панель Hierarchy и перетащите вашу субформу (скорее всего она будет называться Subform1) на уровень выше в иерархии элементов – так, чтобы она имела один уровень с объектами, уже имеющимися в иерархии – MasterPage или ReferencedObject. После этого для формы станет доступна опция RepeatSubformforEachDataItem на закладке Binding панели Object. Поставьте напротив этой опции галочку. Чтобы форма, которая не поместится целиком на страницу, не «разрезалась» на два листа, загляните на закладку Subform и снимите отметку с опции AllowPageBreakwithinContent.

Подготовка формы окончена. Сохраните результат (File - >SaveAs) в формате DynamicXMLFormPDF. Откройте полученный файл в
AdobeAcrobatProfessional. Подключите ваши данные командой Forms ->ManageFormData ->ImportData. Как сказали бы на хабре – Profit!

Это отвратительно медленный способ для подготовки списка на два листа, но при этом он идеально подходит для многотомных каталогов, списков на десятки тысяч позиций, больших перечней с картинками и описаниями. Выше были описаны лишь самые примитивные возможности электронных форм. В них можно вставить любые данные – QR-code или штрих-код, скрипт, текст, иллюстрацию и многое другое. Овладеть таким инструментом просто необходимо, если вам, например, нужно будет создать печатную версию прайс-листа интернет-магазина.

Как я уже говорил, одним Варкрафтом список интересных занятий не исчерпывается. Даже в обычном Acrobat спрятано множество малоизвестных возможностей. Заполнение форм, о котором сегодня шла речь, – лишь верхушка айсберга. Кстати, похожие фишки есть во многих других программах, но об этом я расскажу в следующий раз.

Александр Поляков lecoson@mail.ru


Компьютерная газета. Статья была опубликована в номере 28 за 2010 год в рубрике soft

©1997-2024 Компьютерная газета