Силясь написать статью о чем-то расплывчатом: о том, что не поддается никаким точным измерениям, например, о чем-нибудь из области SEO, у меня опять получилась статья о конкретных вещах. Статья будет интересна, в первую очередь,PHP программистам, которые ищут удобную библиотеку для создания PDF-файлов.

На днях я завершил проект, в котором мне пришлось использовать библиотекуTCPDF ( «http://www.tcpdf.org/ »). Поэтому сейчас с радостью делюсь информацией. TCPDF — это генератор PDF-файлов. С помощью этой библиотеки очень удобно создавать PDF-файлы. Библиотека обладает многими полезными характеристиками, которых я не встретил в других разработках, когда искал в интернете. Если углубиться во все возможности TCPDF, то у меня выйдет копия документации к библиотеке, которую предоставили разработчики на своем сайте. Поэтому я расскажу только об основных характеристиках, которые меня волновали больше всего. По большому счету, требований к библиотеке было не много:

а) работа с русскими шрифтами;
б) парсинг html-потока с картинками, таблицами и прочими html-элементами;
в) дополнительное примитивное форматирование текстовых данных (цвет, шрифт и т.д.);
г) защита документа;
д) небольшой размер библиотеки.

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

Полезные функции

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

Сегодня речь пойдет о функции защиты PDF-файла и способах вывода файла в браузере.

Защита PDF -файла

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

Создавая на сайте кнопку «Загрузить PDF», посетитель получает возможность не только ознакомиться с материалом, а также сохранить копию для чтения на различных мобильных устройствах, где отсутствует доступ в Интернет. Таким образом, защищенные PDF-файлы можно читать, но копировать текстовую или графическую информацию из файла нельзя.

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

Защита PDF-документа в библиотеке TCPDF выполняется одной командой с рядом параметров:


SetProtection (
// массив с вариантами блокировок
array( ‘<strong>print</strong>’, ‘<strong>modify</strong>’, ‘<strong>copy</strong>’, ‘<strong>annot-forms</strong>’, ‘<strong>fill-forms</strong>’, ‘<strong>extract</strong>’, ‘<strong>assemble</strong>’, ‘<strong>print-high</strong>’ ),
“”,         // пароль пользователя
“”          // пароль владельца
);

Более подробный список параметров можно увидеть, если открыть главный исходный файл библиотеки «/tcpdf/tcpdf.php». Содержимое функции описывается, начиная со строки №10878.

Кусок из рабочего кода:


// — create new PDF document
$pdf      = new TCPDF( PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, ‘UTF-8’, false );
​
// — set document information
$pdf->SetCreator( PDF_CREATOR );
$pdf->SetAuthor( ‘Mister Being’ );
$pdf->SetTitle( ‘Super document’ );
$pdf->SetSubject( ‘Just for test’ );
$pdf->SetKeywords( “PDF, document, test” );
$pdf->SetProtection( array( ‘modify’, ‘copy’, ‘annot-forms’, ‘fill-forms’, ‘extract’, ‘assemble’, ‘print-high’ ), “”, “my_super_password_12345” );

Как видно, вначале выполняется инициализация класса. Затем происходит формирование заголовка PDF-документа. А также на этом этапе создается защита для документа.

Не рекомендую устанавливать «Пароль пользователя», поскольку в таком случае посетитель не сможет прочитать загруженный PDF-файл, если не будет знать пароль. Рекомендую оставить этот параметр пустым.

Вывод PDF -файла

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

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

Второй способ — загрузка браузером сформированного PDF-документа, в папку на компьютере пользователя. То есть, браузер сразу спрашивает у посетителя куда (в какую папку на диске) выполнить сохранение pdf-файла.

Управление выводом PDF-документа в библиотеке TCPDF выполняется одной командой:


Output( имя_файла, тип_вывода );

Два примера из рабочего кода:


// вывод первым способом: с отображением содержимого документа в окне браузера.
$pdf->Output( “document.pdf” , “I” );

// вывод вторым способом: вывод в файл без отображения средствами браузера
$pdf->Output( “document.pdf” , “D” );

Более полный перечень типов вывода PDF-документов можно получить, просмотрев исходный файл библиотеки «/tcpdf/tcpdf.php».

В заключении небольшое наблюдение…

В действительности, вывод по первому способу намного лучше, так как пользователь сразу видит, что он сохраняет в своем компьютере, но есть один нюанс. Все дело в том, что по первому способу документ успешно открывается и читается во всех браузерах кроме Mozilla Firefox. Браузер Firefox, по непонятным мне причинам, не показывает русских букв. Такое происходит только с русскими шрифтами. Разбираться с какими шрифтами и почему так происходит уже сил нет, поэтому все останется на своих местах до тех времен покаразработчики Firefox не исправят что-то в своем браузере или покаразработчики TCPDF не исправят что-то в коде своей библиотеки. Конечно, есть еще третий способ: разобраться в исходниках TCPDF самому и устранить ошибку.Но это уже решать каждому программисту самостоятельно.

Заключение

Желаю удачи в работе с TCPDF! Надеюсь, каждый PHP-программист найдет для себя эту библиотеку полезной и удобной.

Вопросы читателю

Прошу всех, кто разберется с глюком при отображении русских букв в Mozilla Firefox, написать мне решение в блоке комментариев или личной почтой, адрес которой можно найти в разделе «Контакты ».

Источник http://misterbeing.tumblr.com/post/50018670507/tcpdf-security