Столкнулся недавно с задачей формирования PDF файла из PHP. Немного погуглив нашел два программных решения: FPDF и TCPDF. Первое значительно компактнее второго, но мне не подошло, т.к. там имелись проблемы с русскими шрифтами. Шрифты для него необходимо как-то обрабатывать и включать в состав продукта, после чего можно работать. С этим разбираться не хотелось и поэтому я стал смотреть второй вариант - TCPDF. В кодировке UTF-8 всё отображается сразу нормально.
PDF-файл может формироваться разными способами, самый простой из которых - формирование из HTML кода. Правда HTML поддерживается лишь частично, но все основное есть и работает. Можно задавать стили и цвета текста, размещать картинки и таблицы. Для моей задачи этого было более чем достаточно.
Весьма просто создать PDF-файл из HTML кода средствами TCPDF, вот пример:
1. сначала копируете файлы TCPDF в необходимую папку на хостинге.
2. пишете программный код.
<? require_once('tcpdf/config/lang/eng.php'); require_once('tcpdf/tcpdf.php'); $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); // устанавливаем описание документа $pdf->SetCreator(PDF_CREATOR); $pdf->SetAuthor('Test'); $pdf->SetTitle('Test'); $pdf->SetSubject('Test'); $pdf->SetKeywords('Test'); // выключаем заголовки, т.к. они нам не нужны $pdf->setPrintHeader(false); $pdf->setPrintFooter(false); // устанавливаем поля $pdf->SetMargins(10,10,10,10); // автоперенос на новую страницу $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); // пропорционирование картинок $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); // языковые настройки $pdf->setLanguageArray($l); // Устанавливаем шрифт $pdf->setFontSubsetting(true); $pdf->SetFont('dejavusans', '', 12, '', true); $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); // Вывод данных из HTML в PDF $pdf->AddPage(); $s= '<h1>Привет мир!</h1><p>Это тестовый пример!</p>'; $pdf->writeHTML($s, true, false, true, false, ''); $pdf->Output('test.pdf', 'I'); ?>
ВАЖНО! Файл примера должен быть записан в кодировке UTF-8! Иначе ничего не увидите в сгенерированном PDF-файле.
На сайте TCPDF имеется множество других примеров.
P.S. Если при запуске примеров Вы видите ошибку:
TCPDF ERROR: Some data has already been output, can't send PDF file
необходимо перед строками
require_once('tcpdf/config/lang/eng.php'); require_once('tcpdf/tcpdf.php');
вызвать функцию ob_end_clean().
Помогает. Почему-то так было на хостинге от Мастерхост, а на jino.ru сразу все нормально.
P.P.S. TCPDF распространяется по лицензии LGPL, следовательно может встраиваться (при соблюдении лицензионных требований) даже в коммерческие продукты.