Генерация pdf из html

02/14/2011, автор admin, категории Web-разработка

Для чего это нужно?
Ну например для генерации pdf отчетов в интернет магазине, или для выдачи электронных билетов на концерты. Вобщем то с помощью этой утилиты можно создать офлайн версию маленького сайта в формате pdf.
Моя задача была связана с электронными билетами, поэтому поискал уже готовые решения для генерации pdf из html. Первое что я нашел был модуль «HTML2PDF» – отличное название, следовательно и работать должно соответственно)
Скачал (на оффициальном сайте html2pdf)
Скопировал в папку с сайтом, посмотрел в папке examples готовые примеры. Очень понравился функционал, можно нарисовать все что захочешь, есть функции генерирующие barcode.
Попробовал применить:

$html2pdf = new HTML2PDF('L','A4','en', true, 'UTF-8', 0);
$html2pdf->pdf->SetDisplayMode('fullpage');
$html2pdf->writeHTML($content);
//$content - страница html из которой хотим получить pdf

$html2pdf->Output('billet.pdf');

Увидел вместо русских букв одни вопросики, начал разбираться в чем проблема, оказывается шрифт helvetica (он стоит по умолчанию) немного не допилен. Поменял в стилях html шрифт на freesans и все отлично заработало – красивые шрифты и картинки вставляются. Библиотека на хорошем уровне воспринимает стили.
Потом были еще небольшие эксперименты со шрифтами, пробовал переделывать свои шрифты через онлайн сервис http://fpdf.fruit-lab.de, ни к чему хорошему это не привело как ни старался.. межсимвольные интервалы сходили с ума, шрифты получались очень некрасивыми. А из-за того что нельзя коневртировать в utf8 приходилось в cp1251, ну и соответственно баловаться в php с кодировками.

$content=iconv("UTF-8","CP1251", $content);

Вобщем так и остался на моем билетике шрифт freesans…

Можно прочесть также:

10 комментариев “Генерация pdf из html”

  1. tochka:

    Привет!
    Я вот столкнулся с тем же проблемами что и ты, русский шрифт не отображался вообще, скачал с офф. сайта этот php скрипт, там стоит по умолчанию как ты говоришь helvetica, но у меня при этом не выходили вопросики, точнее вообще ни чего не выходило, тогда я переписал все скрипты helvetica на freesans, но это не помогло, после этого русский шрифт начал показываться вопросиками, не мог бы ты поподробнее расписать, что еще надо сделать или скинуть работающий скрипт на почту..пока в голову ни чего не может придти как сделать чтоб начал понимать русский шрифт…
    Стандартный код не отображается :(
    <?php
    $content = "

    Exemple d’utilisation

    Ceci est un exemple d’utilisation впаыпа
    de HTML2PDF.
    «;

    require_once(dirname(__FILE__).’../html2pdf.class.php’);
    $html2pdf = new HTML2PDF(‘P’,'A4′,’fr’);
    $html2pdf->WriteHTML($content);
    $html2pdf->Output(‘exemple.pdf’);
    ?>
    Буду благодарен за помощь :)

  2. admin:

    незнаю поможет или нет, вот архив html2pdf
    думаю если делать $html2pdf = new HTML2PDF(‘L’,'A4′,’en’, true, ‘UTF-8′, 0);
    и при этом $content так же будет в utf-8 то все должно быть хорошо

  3. tochka:

    ок спс:) а то 2 день мучаюсь, ни где толком нет инфы..

  4. tochka:

    Спасибо большое что помог:) все хорошо получилось после перекодировки
    $content = iconv(«windows-1251″, «utf-8″, $content);
    но такая хрен получается, извиняюсь за выражение, заглавная буква Р показывается вопросиком…:(

  5. tochka:

    Все решил эту проблему :) надо добавить такую вот строчку еще
    $content=str_replace(chr(208).chr(160),»P»,$content);
    заменяем Р (chr(208).chr(160) – это и есть наша буква Р) на англ P и все:)

  6. Gremlin:

    Не выходит русский текст :( . Выходит вопросами… Можно подробнее где менять и как шрифт, в файле в папке /res сейчас стоит Arial

  7. Валера:

    вот так получилось, ребят.

    iconv_set_encoding(«output_encoding», «UTF-8″);
    ob_start()
    echo $this->renderPartial(‘get’, array(‘data’=>$data), true);
    $content = ob_get_clean();
    ………….
    $html2pdf->setDefaultFont(‘freesans’);

  8. Ник:

    $html2pdf->setDefaultFont(‘dejavusans’);

    Вместо dejavusans поставьте свой, по умолчанию стоит англицкий Arial (он же helvetica)

  9. Спасибо за архив

  10. Дима:

    Спасибо вам! Поставил шрифт freesans и вопросики пропали!

    setDefaultFont(‘freesans’);
    $pdf->WriteHTML($html);
    $pdf->Output(‘test.pdf’);
    ?>