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

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

Традиционная бумажная форма использует схему страницы, чтобы показать структуру информации. Иногда, как в налоговых формах, эти связи становятся довольно сложными. PDF-документ сохраняет схему страницы, поэтому он представляет естественный способ публикации форм в интернете. Вопрос в том, какие возможности PDF-форм необходимо добавить?

Если ничего не добавляется, то пользователи должны печатать форму и заполнять ее, как и любую другую бумажную форму, а затем отправлять ее по почте к вам для обработки. Иногда это все, что вам нужно, но PDF-документ способен на большее.

При добавлении к PDF-документу заполняемых полей формы пользователи смогут заполнить ее, используя программы Acrobat или Adobe Reader. После этого они все еще должны распечатывать ее и отправлять по почте. Пользователи Acrobat могут сохранить заполненную PDF-форму, а пользователи Adobe Reader этого сделать не смогут.

При добавлении полей заполняемой формы и кнопки Submit (Предоставить), которая отправляет эти данные на сервер, вы присоединитесь к информационной революции. Сервер сможет в интерактивном режиме проверять правильность данных пользователя, обеспечивать обратную связь, записывать информацию в базу данных и предоставить пользователю возможность сохранения копии PDF-формы.

Но это позже. Сначала создайте форму, которая предоставляет данные серверу. Последующий метод взлома будет основываться на ней. Посетите сайт http://pdfhacks.com/form_session/ и посмотрите примеры интерактивных PDF-форм, а также загрузите пример PDF-формы и PHP-код с этого сайта.

Создание формы

Откройте исходный документ формы и выведите его в формате PDF или просканируйте бумажную копию и создайте PDF-форму, используя оптическое распознавание символов. Откройте PDF-форму в программе Acrobat, чтобы добавить поля формы.

PDF-формы могут быть мощными JavaScript-nporpaммами, но здесь сценарии использоваться не будут. Мы создадим PDF-формы, которые позволят всю работу делать серверу. Это позволит программировать логику формы с помощью любого языка или интерфейса базы данных.
Поля PDF-формы практически соответствуют полям HTML-формы, как показано в таблице. Добавьте их к своей форме, используя один или несколько инструментов Acrobat.

Таблица. Сравнение типов PDF-полей с типами HTML-полей

Поле HTML-формы Поле PDF-формы
input type=»text» Text (Текст)
input type=»password» Text with Password Options (Текст с опциями пароля)
input type=»checkbox» Checkbox (Переключатель)
input type=»radio» Radio Button (Кнопка выбора)
input type=»submit» Button with Submit Form Action(Кнопка с действием Предоставить форму)
input type=»reset» Button with Reset Form Action(Кнопка с действием Загрузить форму)
input type=»hidden» Text with Hidden Appearance (Скрыть текст)
input type=»image» Button with Icon Option (Кнопка с опцией значка)
input type=»button» Button (Кнопка)
textarea Text with Multiline Option (Текст в несколько строк)
select Combo Box or List Box (Поле со списком или список)

В Acrobat 6 существует отдельный инструмент для каждого типа поля формы. Откройте эту панель инструментов командой Tools\Advanced Editing\Forms\Show Forms Toolbar (Сервис\До-полнительное редактирование\Формы\Показать панель инструментов формы). Выберите инструмент, например Text Field (Текстовое поле), щелкните на нем и перетащите прямоугольник в местоположение поля. Отпустите кнопку мыши — откроется диалоговое окно Field Properties (Свойства поля). Выберите вкладку General (Общие) и введите имя поля. Это имя идентифицирует данные поля при передаче серверу. Настройте вид поля и его поведение, используя другие вкладки. Нажмите Close (Закрыть). Поле создано.

Инструменты создания полей формы в Acmbat 6 (слева) и Acrobat 5 (справа)В Acrobat 5 используется инструмент Form (Форма) для создания любого поля формы. Щелкните на нем и перетащите прямоугольник в местоположение поля. Отпустите кнопку мыши — откроется диалоговое окно Field Properties (Свойства поля). Выберите нужный тип поля, например Text (Текст), и введите его имя. Это имя идентифицирует данные поля при передаче серверу сети. Настройте вид поля и поведение, используя другие вкладки. Нажмите ОК. Чтобы изменить свойства поля, используя инструмент Form, дважды щелкните на нем кнопкой мыши.

Позаботьтесь о совместимости PDF-формы со старшими версиями программ Acrobat и Adobe Reader.

Чтобы загружать данные формы на сервер, PDF-форма должна иметь кнопку Submit Form (Предоставить форму). Создайте PDF-кнопку, откройте вкладку Actions (Действия), а затем добавьте действие Submit a Form (Предоставить форму) в Acrobat 6 или Submit Form (Предоставить форму) в Acrobat 5 событию Mouse Up (Щелчок мышью), как показано на рисунке.

Отредактируйте свойства действия, включив в него URL своего сценария; они должны соответствовать атрибуту action HTML-формы. Добавьте в конец этого URL символы #FDF:

http://localhost/pdf_hacks/echo.php#FDF

Настройте опцию Field Selection (Выбор поля) для включения полей, которые эта кнопка должна передавать серверу; наиболее безопасным является вариант All Fields (Все поля). Определите опцию Export Format (Формат экспортирования) как HTML, и PDF-форма передаст свои данные, используя HTTP-метод post.

После окончания работы сохраните свою PDF-форму и протестируйте ее.

Добавление действия Submit к событию Mouse Up для создания кнопки Submit (обратите внимание на символы #FDF, добавленные в конец URL сценария).

Сделайте кнопки формы непечатаемыми. Откройте свойства кнопки и выберите вкладку General (Общие) в Acrobat 6 или Appearance (Вид) в Acrobat 5. В Common Properties (Общие свойства) установите значение Form Field (Поле формы) как Visible but Doesn’t Print (Показывать, но не печатать). Нажмите ОК.

Установка сетевого сервера Apache в Windows

Чтобы проверить интерактивную PDF-форму, необходимо иметь доступ к серверу. Многие из этих методов взлома используют РНР-сценарии, выполняемые на стороне сервера, поэтому он должен поддерживать язык РНР (http://www.php.net). Windows-пользователи могут загрузить инсталлятор сетевого сервера Apache (http://www.apache.org) под названием IndigoPerl с сайта IndigoSTAR (http://www.indigostar.com). Он содержит РНР и Perl-модули, поэтому позволяет выполнить этот метод взлома. Сервер Apache и язык РНР — бесплатное программное обеспечение.

Посетите веб-страницу http://www.indigostar.com/indigoperl.htm и загрузите файл indigoperl-2004.02.zip. Разархивируйте его во временный каталог, а затем дважды щелкните на файле setup.bat, чтобы выполнить установку. На запрос о каталоге установки нажмите клавишу Enter, чтобы выбрать значение по умолчанию: C:\indigoperl\.

После установки Indigo Perl откройте веб-браузер и укажите ему на http://localhost/. Это URL вашего локального сервера, и браузер должен отобразить Web Server Test Page (Страница тестирования сетевого сервера) со ссылками к документации. При опросе http://localhost/ Apache обращается к файлу index.html в каталоге C:\indigoperl\apache\htdocs\. Создайте каталог pdf_hacks в каталоге htdocs и используйте это местоположение для PHP-сценариев. Обратитесь к этому каталогу из своего браузера с помощью URL: http://localhost/pdf_hacks/.

Тестирование PDF-формы

Создайте текстовый файл, назовите его echo.рhp и поместите в него следующий сценарий. IndigoPerl-пользователи могут сохранить его в каталоге C:\indigoperl\apache\htdocs\pdf_hacks\echo.php. Этот РНР-сценарий возвращает переданные данные формы вашему браузеру. Создайте кнопку PDF Submit, которая отправляет данные по URL сценария (например, http://localhost/pdf_hacks/echo.php#FDF), как было описано ранее.

<?php // echo.php возвращает данные, которые мы получили
echo ‘<h2>GET Data</h2>';
fоreach ( $_CET as $key => $value ) {
echo ‘<p>Key: ‘.$key.’, Value: ‘.$value. ‘<p>';
}
echo ‘<h2>P0ST Data</h2>';
foreach( $_P0ST as $key => $value ) {
echo ‘<p>Key: ‘.$key.’, Value: ‘.$value. ‘<p>';
}

PDF-форма правильно взаимодействует с сервером только тогда, когда отображается в веб-браузере. Поэтому перетащите форму в браузер, заполните некоторые поля, а затем щелкните на кнопке Submit (Предоставить). PDF-форма должна быть заменена на экране сообщением, подобным показанному на рисунке.

Отображение передачи данных PDF-формы с использованием локального сетевого сервера и РНР-сценарияЕсли перетаскивание PDF-формы в браузер Mozilla открывает PDF-форму вне окна браузера, то убедитесь в том, что поддержка языка Java разрешена, выбрав команду меню Edit\Preferences\Advanced (Правка\Параметры настройки\Дополнительно). После включения поддержки Java перезапустите браузер Mozilla и повторите попытку.