Формируем PDF файл из PHP

Столкнулся недавно с задачей формирования 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, следовательно может встраиваться (при соблюдении лицензионных требований) даже в коммерческие продукты.

Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Google Plus
Опубликовать в LiveJournal

One thought on “Формируем PDF файл из PHP

  1. Здравствуйте !
    У меня проблемка с формирование pdf, а суть ее в следующем - когда пишу код в отдельном php файле, то все работает нормально, а вот когда вставляю его на свой сайт, то происходит ошибка (TCPDF ERROR: Some data has already been output to browser, can't send PDF file). Использование ob_end_clean() не помагает. Может быть что нибудь посоветуете ?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *