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

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

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

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

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

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

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

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

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

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

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

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

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

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

    1. Скачать архив и экстракт.
    2. Скопируйте извлеченные файлы в папку dompdf fonts /dompdf/lib/fonts/ .
    3. Измените dompdf_font_family_cache.dist.php с помощью фрагмента 1.
    4. В 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 ):

    1. Выполнить: ttf2afm -o Arial.afm Arial.ttf . (Я сделал это в Ubuntu.)
    2. Выполнить: ttf2ufm -a -F Arial.ttf . (Я сделал это в Windows, используя exe из UFPDF , но я думаю, вы можете использовать /dompdf/lib/ttf2ufm/bin/ttf2ufm.exe .)
    3. Копировать Arial.* Файлы в /dompdf/lib/fonts/ .
    4. Добавить в dompdf_font_family_cache.dist.php фрагмент 2.
    5. В 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' ) /* ... */ 

если вы будете использовать шрифт 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 def для шрифта по умолчанию в dompdf_config.inc.php

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

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

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

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

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

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