Проблема DOMPDF с кириллическими символами

Я использую библиотеку DOMPDF для создания счета в PDF. Этот документ может быть на французском, русском или английском языках, но мне трудно печатать русские символы.

Сначала я попытался использовать кодировку UTF-8 и поместил тег meta в начало HTML-страницы, которая будет преобразована:

< meta http-equiv = "Content-Type" content = "text/html; charset = utf-8" / >

Но это не сработало.

Затем я вставил этот тег meta внутри тега BODY, и это помогло решить проблему с французскими символами.

Но русские символы все еще не работают. Я также пытался преобразовать русские символы в объекты HTML, но это тоже не работает.

Я использую класс R & OS CPDF, а не PDFLib как бэкэнд.

Может ли кто-нибудь помочь?

Ответ 1

Проблема заключается в использовании шрифтов по умолчанию, используемых dompdf (т.е. у него нет всех символов Юникода, до сих пор более 5000). Обычно arialuni.ttf - это то, что вам нужно. Вы можете скачать локализованную версию на http://chernev.ru/dompdf.rar {неработающая ссылка}

Обновлено: https://code.google.com/p/ipwn/downloads/detail?name=arialuni.ttf

Ответ 2

В принятом ответе ссылка сломана и содержит старую версию DOMPDF.

Для работы с символами Unicode в DOMPDF 0.6 у вас есть две альтернативы: используйте существующие шрифты или создайте свой собственный шрифт.

  • Использовать существующий шрифт (применяется для DOMPDF 0.6):

    • Загрузить архив и извлечь.
    • Скопируйте извлеченные файлы в папку dompdf fonts /dompdf/lib/fonts/.
    • Отредактируйте dompdf_font_family_cache.dist.php с помощью фрагмента 1.
    • В CSS используйте font-family: times;.

Фрагмент 1:

/* ... */
'times' => array (
    'normal' => DOMPDF_FONT_DIR . 'times',
    'bold' => DOMPDF_FONT_DIR . 'timesbd',
    'italic' => DOMPDF_FONT_DIR . 'timesi',
    'bold_italic' => DOMPDF_FONT_DIR . 'timesbi'
),
'times-roman' => array (
    'normal' => DOMPDF_FONT_DIR . 'times',
    'bold' => DOMPDF_FONT_DIR . 'timesbd',
    'italic' => DOMPDF_FONT_DIR . 'timesi',
    'bold_italic' => DOMPDF_FONT_DIR . 'timesbi'
),
/* ... */

  • Если вы хотите использовать свой собственный шрифт TTF (скажем, Arial.ttf):

    • Выполнить: ttf2afm -o Arial.afm Arial.ttf. (Я сделал это в Ubuntu.)
    • Выполнить: ttf2ufm -a -F Arial.ttf. (Я сделал это в Windows, используя exe из UFPDF, но я думаю, вы можете использовать /dompdf/lib/ttf2ufm/bin/ttf2ufm.exe.)
    • Скопируйте Arial.* файлы в /dompdf/lib/fonts/.
    • Добавить в dompdf_font_family_cache.dist.php фрагмент 2.
    • В CSS используйте font-family: arial;.

Фрагмент 2:

/* ... */
'arial' => array (
    'normal' => DOMPDF_FONT_DIR . 'Arial',
    'bold' => DOMPDF_FONT_DIR . 'Arial',
    'italic' => DOMPDF_FONT_DIR . 'Arial',
    'bold_italic' => DOMPDF_FONT_DIR . 'Arial'
)
/* ... */

Ответ 3

если вы будете использовать шрифт DejaVu, вы можете увидеть кириллические символы

Шрифты DejaVu TrueType были предварительно установлены, чтобы по умолчанию присвоить dompdf достойный охват символом Unicode. Чтобы использовать шрифты DejaVu, укажите шрифт в таблице стилей, например. body {font-family: DejaVu Sans; } (для DejaVu Sans).

DOMPDF включает шрифт DejaVu по умолчанию

    $html = "<html><head><style>body { font-family: DejaVu Sans }</style>".
        "<body>А вот и кириллица</body>".
        "</head></html>";

    $dompdf = new \DOMPDF();
    $dompdf->load_html($html);
    $dompdf->render();
    echo file_put_contents('cyrillic.pdf', $dompdf->output());

Вы также можете установить для параметра по умолчанию def шрифт в dompdf_config.inc.php

def("DOMPDF_DEFAULT_FONT", "DejaVu Sans");

Ответ 4

Скачать arialuni.ttf Запустите php load_font.php 'Arial' arialuni.ttf в каталоге dompdf, установите шрифт в arial Это работает;)

Ответ 5

Для меня 4 шага выше не разрешили проблему. Кроме того, dompdf конвертирует созданный pdf в ANSI (ISO) Вам нужно отключить это на странице параметров http://domain.com/admin/settings/print/pdf

Установите флажок Использовать режим юникода dompdf. Это заставит создавать файлы в UTF-8/Unicode.

Обратите внимание, что настройки веб-сайта по умолчанию переопределяют параметры в dompdf_config.inc.php.

Ответ 6

Отмечено, что проблема может быть в использовании css- reset, особенно font:inherit;