Содержание


Реальные проекты на PHP и MySQL. Создание персонализированных документов

Часть 1. Постановка задачи и обзор предлагаемого решения.

Comments

Серия контента:

Этот контент является частью # из серии # статей: Реальные проекты на PHP и MySQL. Создание персонализированных документов

Следите за выходом новых статей этой серии.

Этот контент является частью серии:Реальные проекты на PHP и MySQL. Создание персонализированных документов

Следите за выходом новых статей этой серии.

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

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

В этой и следующих статьях будут подробно разобраны следующие вопросы:

  • обработка строк с помощью PHP для слияния первоначального шаблона с пользовательскими данными, чтобы в результате получился документ в формате RTF (rich text format - расширенный текстовый формат);
  • использование аналогичного подхода для формирования такого же документа в формате PDF;
  • использование PHP-функций библиотеки PDFlib для создания FDF-документов «на лету».

Постановка задачи

В качестве примера будет использоваться Web-приложение, имитирующее функциональность настоящих online-экзаменов (например, с сайта www.brainbench.com). Для сдачи экзамена пользователь должен будет ответить на ряд вопросов по PHP. При выборе достаточного количества правильных ответов система сгенерирует для соискателя сертификат, подтверждающий его компетентность в технологии PHP. Несмотря на простоту предлагаемого решения по сравнению с существующими в реальности приложениями, оно идеально подходит как для моделирования процесса сертификации, так и для демонстрации возможностей PHP.

К модели сертификационного приложения предъявляются следующие простые требования:

  • каждый вопрос требует выбора ответа из списка возможных вариантов, среди которых обязательно имеется один (и только один) правильный вариант;
  • за выбор правильного варианта ответа пользователь получает один балл;
  • если пользователь сумел набрать достаточное количество баллов, то ему будет выдан сертификат, в противном случае нет.

К самому сертификату предъявляются следующие требования:

  • поддерживать вставку изображений в растровых и векторных форматах;
  • обеспечивать высокое качество при печати;
  • иметь небольшой размер, удобный для передачи по сети Интернет;
  • создаваться за малый период времени;
  • поддерживать просмотр на различных операционных системах;
  • защищать свое содержимое от изменений;
  • не требовать специального ПО для просмотра или печати;
  • быть единообразным при печати и отображении информации в различных ОС.

В рамках учебного проекта не получится реализовать все требования из этого списка, поэтому для оптимизации конечного результата потребуется пожертвовать некоторыми возможностями. Как и в других циклах, посвященных совместному использованию PHP и MySQL, при разработке приложения для online-тестирования «за кадром» останется дизайн, и получившиеся сертификаты будут выглядеть крайне аскетично. Однако в настоящих сертификационных системах внешняя привлекательность сертификата играет большую роль.

Выбор подходящих форматов

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

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

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

Казалось бы, формат HTML является наиболее подходящим выбором в данной ситуации, так как весь процесс проходит в сети Интернет. Но в данном случае можно выделить ряд серьезных недостатков. К ним относятся: сложности при печати, например, ограниченная поддержка разрывов страниц, и разные параметры отображения для разных платформ и web-браузеров.

Из текстовых форматов лучше всего подходит формат RTF. По возможностям формат RTF близок к формату MS Word, но работать с RTF-файлами гораздо проще. При вставке изображений в RTF-файлы, они не так сильно увеличиваются в размере, как doc-файлы MS Word. Также, этот формат хорошо документирован, при этом его спецификации доступны для бесплатной загрузки, в отличии от форматов MS. Еще одно преимущество RTF заключается в поддержке этого формата различным ПО на разных платформах. Поэтому именно формат RTF будет использоваться для создания персонализированных документов в представленном примере.

Формат PostScript от компании Adobe по сути является языком программирования с большими возможностями. Он предназначен для представления документа в форме, не зависящей от устройств, использующихся для его отображения, также хорошо документирован и имеет множество поклонников. Однако для учебного примера он не подходит по ряду причин. Основные недостатки PostScript (исключительно с точки зрения учебного проекта) – это большой размер файлов и необходимость использования дополнительного ПО для работы с PostScript-файлами.

Формат PDF отвечает всем требованиям проекта, обладает возможностями PostScript и при этом лишен некоторых его недостатков. Формат PDF (portable document format - формат переносимых документов) был также разработан компанией Adobe и является общепринятым средством для распространения документов на различных платформах. Формат PDF обеспечивает высококачественный вывод информации, как на экран, так и на бумагу. Компания Adobe так описывает этот формат: «это де-факто открытый стандарт для повсеместного распространения электронных документов. Формат PDF компании Adobe – универсальный формат для файлов, который сохраняет все шрифты, цвета форматирования и графические изображения любого исходного документа независимо от приложения и платформы, использованных для его создания. PDF-файлы компактны и могут совместно использоваться, просматриваться, управляться и печататься именно так, как требуется, причем любым пользователем, располагающим бесплатной программой Adobe Acrobat Reader».

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

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

Компоненты проекта

Основное бизнес-требование к создаваемому приложению – это «создание персонализированного документа, предназначенного для доставки через электронные каналы связи (email, ftp, http)». В рассматриваемом учебном проекте будут реализованы три способа автоматизированного создания подобного сертификата. В двух из них для создания сертификата будет использоваться формат PDF, а в одном – формат RTF.

Для получения RTF и PDF файлов из шаблонов на web-cервер не требуется устанавливать дополнительное ПО, однако оно потребуется для создания самих шаблонов. Например, использование PHP-функций для создания PDF-документов требует поддержку PDF со стороны PHP, и такая поддержка должна быть обеспечена компиляцией требуемых компонентов. RTF-документы можно создавать в любом текстовом процессоре, но при выборе редактора имеет смысл протестировать получившийся документ, чтобы проверить корректность его отображения в наиболее распространенных программах.

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

Одним из важнейших компонентов системы online-тестирования является модуль для обработки вопросов и ответов. В задачи этого модуля входит не только проведение самого процесса тестирования – демонстрация вопросов и сбор ответов, но и «обратная связь» с пользователем и сбор статистической информации. В рамках учебного проекта эти возможности реализовываться не будут, поэтому модуль для обработки вопросов и ответов будет состоять из HTML-формы для демонстрации вопросов и PHP-сценария для обработки ответов.

Создание документов в формате PDF

Самый простой способ создать документ в формате PDF – это приобрести программу Adobe Acrobat, которая позволит создавать качественные документы из различных приложений. В качестве бесплатной альтернативы можно воспользоваться программой ps2pdf, преобразующую файлы из формата PostScript в PDF. Однако она не всегда корректно отображает документы, содержащие графику или нестандартные шрифты. Также при использовании этой программы сначала потребуется создать PostScript-документ.

Еще один способ создать PDF-документ – это представить сертификат в формате XML и использовать XLST-процессор (XML Style Sheet Transformations – преобразование таблиц стилей XML) для трансформации XML-документа в PDF-файл. Технология XLST предлагает способ для изменения структуры и содержимого XML документов, она включает в себя язык XSLT, использующийся для описания преобразований, и XSLT-процессор, выполняющий эти преобразования. Технология XSLT поддерживается большинством языков программирования, не исключая технологии PHP, в пятой версии которой есть модуль XSL, выполняющий функции процессора языка XLST. Этот модуль использует возможности ООП и библиотеки libxslt. Для его использования необходимо еще на этапе компиляции бинарных файлов PHP включить поддержку XSLT c помощью флага –with-xsl, как показано ниже:

            configure…--enable-dom –with-xsl…

Также стоит отметить, что для своей работы XSLT-модуль требует наличия DOM-модуля, так как входные и выходные XML-документы представляются в виде объектов класса domDocument. Для неподготовленного пользователя язык XSLT может показаться довольно запутанным, так как в программах, написанных на этом языке, сложно отследить порядок обработки информации. В XSLT программа представляет собой набор шаблонов, описывающих фрагменты документа и возможные действия, применяемые к этим фрагментам, и этим он похож на язык AWK. Но в отличии от AWK, XSLT-программы - это XML-документы, которые загружаются XML-процессором. Выходной документ может быть в любом формате: XML, HTML или обычным текстовым файлом.

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

PHP-библиотеки для работы с PDF-документами

В технологии PHP поддерживаются два способа создания PDF-документов с помощью двух библиотек – PDFlib и GlibPDF. Эти библиотеки обладают схожей функциональностью и предлагают API для создания PDF-документов. К сожалению обе библиотеки не относятся к свободному программному обеспечению, и хотя допускают бесплатное некоммерческое использование, но для коммерческого применения необходимо приобрести лицензию. В последнее время начинают появляться свободно распространяемые библиотеки, например FPDF, но пока они имеют ограниченные возможности. В данном проекте используется библиотека PDFlib.

Для проверки подключения библиотеки PDFlib к используемой версии PHP можно изучить вывод команды phpinfo(). Если эта библиотека активирована, то в разделе PDF будет распечатана информация об используемой версии PDFlib. Если же поддержка библиотеки PDFlib недоступна, то потребуется установить ее и вспомогательные библиотеки TIFF и JPEG.

В Linux эти компоненты PHP устанавливаются обычным способом, но PHP потребуется перекомпилировать с указанием флага –with-pdflib. В Windows библиотека PDFlib уже входит в zip-архив с дистрибутивом PHP. Для ее использования достаточно убрать комментарии в соответствующем фрагменте файла php.ini.

Описание предлагаемого решения

В приведенном ниже списке перечислены бизнес-сценарии (usecases), которые необходимо реализовать в рамках проекта, в том порядке, в каком они будут вызываться при приведении online-тестирования.

  1. демонстрация экзаменационных вопросов пользователю;
  2. обработка ответов, выбранных пользователем;
  3. создание сертификата одним из трех способов:
    1. создание RTF-документа из пустого шаблона;
    2. создание PDF-документа из пустого шаблона;
    3. создание PDF-документа с помощью функций библиотеки PDFlib.

В начале online-тестирования пользователь попадает на главную страницу с HTML-формой, показанную на рисунке 1. В листинге 1 представлен исходный код этой страницы.

Рисунок 1. HTML-форма с вопросами для online-тестирования
Рисунок 1.
Рисунок 1.
Листинг 1. Исходный код HTML-страницы с вопросами для online-тестирования
<html>
  <body>
    <h1><p align="center">
          <img src="rosette.gif" alt="">
          Ваша Сертификация
          <img src="rosette.gif" alt=""></p></h1>
    <p>Вы имеете возможность стать сертифицированным специалистом по PHP, 
    сдав эти экзамены.</p>
    <p>Необходимо дать исчерпывающие ответы на поставленные Вам вопросы:</p>

    <form action="score.php" method="post">
      <p>Фамилия, имя <input type="text" name="name"></p>
      <p>Какие действия выполняет PHP-оператор echo?</p>
      <ol>
        <li><input type="radio" name="q1" value="1">
            Выводит строки.</li>
        <li><input type="radio" name="q1" value="2">
            Суммирует два числа.</li>
        <li><input type="radio" name="q1" value="3">
            Вызывает вашего папашу, который завершает за вас написание кода, 
            а затем надает вам по шее.</li>
      </ol>
      <p>Какие действия выполняет PHP-функция cos()?</p>
      <ol>
        <li><input type="radio" name="q2" value="1">
            Вычисляет косинус угла в радианах.</li>
        <li><input type="radio" name="q2" value="2">
            Вычисляет тангенс угла в радианах. </li>
        <li><input type="radio" name="q2" value="3">
            Такой PHP-функции не существует. </li>
      </ol>
      <p>Какие действия выполняет PHP-функция mail()?</p>
      <ol>
        <li><input type="radio" name="q3" value="1">
            Отправляет сообщение по электронной почте.
        <li><input type="radio" name="q3" value="2">
            Получает новые почтовые сообщения.
        <li><input type="radio" name="q3" value="3">
            Переключает PHP между турбо и обычным режимами.
      </ol>

      <p align="center"><input type="image" src="certify-me.gif" border="0"></p>

    </form>
  </body>
</html>

Заключение

Данный цикл статей посвящен созданию персонализированных документов на основе информации, введенной пользователем. Подобная функциональность в том или ином виде имеется у большинства интерактивных Web-сайтов (например, Интернет-магазины создают накладные, а обучающие порталы – сертификаты о прохождении обучения). В данном случае в качестве примера используется Web-сайт для проведения online-тестирования на знание PHP.

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


Ресурсы для скачивания


Комментарии

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux, Open source
ArticleID=629311
ArticleTitle=Реальные проекты на PHP и MySQL. Создание персонализированных документов: Часть 1. Постановка задачи и обзор предлагаемого решения.
publish-date=02242011