Динамическое состояние PDF-формы

Проведите ваших пользователей через процесс заполнения формы. Сбор информации с помощью сетевых форм — это интерактивный процесс. Вопросы сбора данных и управления формами уже рассматривались выше.

Используйте эти знания для программирования интерактивного сетевого сеанса заполнения формы, пример которого показан на рисунке (посетите веб-страницу http://ymw.pdfliacks.com/form_session/, чтобы посмотреть этот пример и загрузить исходный РНР-код).

Подготовка окна

Чтобы предоставить данные серверу, PDF-форма должна отображаться в веб-браузере. Удобнее отображать ее в HTML-окне. Это позволяет сделать форму с HTML-командами и гиперссылку запасным выходом, чтобы пользователь не чувствовал себя попавшим в ловушку. Это также показывает пользователю, что это не старый PDF-документ, т. к. многие считают PDF-документ предназначенным только для загрузки и распечатки. Мало того, что он будет отличаться по виду, окно также скроет URL PDF-документа и предотвратит рефлексивную загрузку.

Ниже представлен код HTML-окна, используемого в примере на веб-странице http://www.pdfhacks.com/form_session/. Обратите внимание, что для описания формы он использует PDF+FDF URL, чтобы воспрепятствовать выходу PDF-документа из окна.

Создание интерактивной PDF-формы

В разделе представлены некоторые идеи по созданию дизайна интерактивной PDF-формы. Имейте в виду, что форма может иметь любое количество PDF-полей, и эти поля можно скрыть от пользователя или разрешить только их чтение. Сценарий forge_fdf дает возможность установить эти флажки так, как необходимо, добавлением имени поля к строкам $fields_hidden или $fields_readonly.

  • Используйте поля скрытого текста, чтобы хранить информацию о сеансе формы и состоянии.
  • Если форма имеет разделы, которые требуют отдельной серверной обработки, добавьте кнопку Submit Form (Представить форму) для каждого раздела. Показывайте только одну кнопку, скрывая все другие.
  • Не забудьте добавлять в конце действия представления формы #FDF, например, update_state.php#FDF.

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

Измените порядок вкладок поля формы. В Acrobat 6.0.1 командой меню Tools\ Advanced Editing (Сервис\Дополнительное редактирование) активизируйте инструмент Select Object Tool (Инструмент выделения объекта), выберите Advanced\Forms\Fields\Set Tab Order (Дополнительно\Формы\Поля\Установить порядок вкладок), а затем щелкните на каждом поле в нужном порядке. В Acrobat 5 активизируйте Form Tool (Инструмент формы), выбирая команды Tools\Forms\Fields\Set Tab Order (Сервис\Формы\Поля\Установить порядок вкладок), а затем щелкните на каждом поле в нужном порядке.

  • После завершения пользователем работы с разделом его поля должны быть доступны только для чтения, как и поля, содержащие результаты серверных вычислений.
  • Распределите поля между двумя-тремя частями PDF-страницы, чтобы они не загромождали страницу формы.
  • Преобразуйте форму из нескольких страниц в PDF-форму на одной странице.
  • Создайте текстовые поля для выдачи пользователю сообщений, предназначенных только для чтения. Если пользователь представляет недопустимые данные полей, обработайте форму снова и выдайте соответствующее сообщение. При создании этих полей сообщений в Acrobat обозначьте их цветом, чтобы они отличались от полей данных. Изменить текст сообщения можно, используя FDF-файл.

В сетевом примере на веб-странице http://www.pdfhacks.com/form_session/ использованы некоторые из этих методов

Начало, середина, конец

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

Вход в форму.

Начните сеанс, используя PDF +FDF URL, чтобы открыть форму. Например:

http:localhost/form_session.pdf#FDF=http:localhost/update_state. php?reset=1

FDF-часть — это сценарий, инициализирующий состояние сеанса и использующий FDF-файл для настройки начального вида формы. Если это необходимо, храните идентификатор сеанса и информацию о его состоянии в скрытых текстовых полях.

Ответ на представление данных. При каждом представлении формы обновляйте состояние сеанса, а затем ответьте с помощью FDF-файла. Используйте его для обновления вида формы, чтобы активизировать или скрыть поля, а также для обновления текста в поле, предназначенном только для чтения, вместе с расчетными данными или сообщениями пользователю. Опустите ключ /F ($pdf_form_url в forge_fdf) используемый в FDF-файле, если не готовы выйти из этого сеанса.

Выход из формы.

Когда сеанс работы с формой завершен, выйдите из него, используя FDF Forward. Это FDF-файл содержит только ключ /F ($pdf_form_url в forge_fdf). Установите ключ /F в URL HTML-страницы или сценария. Этот новый адрес заменит PDF-форму в браузере пользователя.

Выполнение кода

Посетите веб-страницу http://www.pdfhacks.com/form_session/ и посмотрите рабочий пример этой модели. Загрузите с этой страницы архив form_session-L1.zip, чтобы изучить PHP-сценарии и PDF-формы. Пользователи IndigoPerl могут распаковать form_session-1.1.zip в каталог: C:\indigoperl\apache\htdocs\pdf_hacks_form_session-1.1\, а затем выполнить пример на своем компьютере, указывая браузерам ссылку на http://localhost/pdf_ hacks/form_session-1.1/start.html.