• Русские шрифты в Pdf (Zend_Pdf)

    by  • 03.04.2010 • php, Zend Framework, программирование • Нет комментариев

    zend pdf 150x150 Русские шрифты в Pdf (Zend Pdf)
    Всем доброго времени суток. Вчера стояла передо мной задача экспорта данных, с использованием Zend Framework дело оказалось не очень сложным, благо что документация по Zend_Pdf хватает с лихвой, да и примеров в сети можно найти очень много. Но проблемы с кодировкой нигде не рассматриваются. Решил я этот вопрос методом перебора…
    Перебирал я шрифты из папки fonts (Windows 7) и отрисовывал каждым русский текст. Что из этого вышло вы можете посмотреть на картинке. Исходный код представлен ниже:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php
    $pdf = new Zend_Pdf();
    $page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4);
    $path = 'C:\Windows\Fonts';
    $fonts = opendir($path);
    $i = 0;
    $j = 0;
    while($a = readdir($fonts)) {
        if (('.' == $a) or ('..' == $a)) continue;
        if (preg_match('@(.*)\.(ttf)$@', $a)) {
            //echo $a . '<hr />';
            if($j++ > 30) break;
            $page->setFont(Zend_Pdf_Font::fontWithPath($path .
                    "\\" . $a), 12);
            $page->drawText('По-русски ' . $a, $j * 2, $i, 'utf-8');
            $i+=15;
        }
    }
    $pdf->pages[] = $page;
    //$pdf->save('../public/users/1.pdf');
    header('Content-type: application/pdf');
    echo $pdf->render();
    ?>

    В цикле (8-18 строки) проверяется каждый шрифт из папки шрифтов на соответствие TrueType шрифту (*.ttf), делается это не более 30 раз, мне показалось это достаточным, чтобы отыскать хотя бы один подходящий шрифт. Если убрать комментарии с 20 строки, то файл сохранится на жестком диске, иначе будет появляться стандартное окно «Сохранить/Открыть»
    Из списка можно выбрать наиболее подходящий именно вам шрифт и использовать его в своих проектах.

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

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