Решение проблемы с генерацией PDF документов с использованием библиотеки dompdf при использовании Unicode - русских букв

Прислано: Freakachoo

вс, 08/11/2009 - 20:58

Другие статьи по теме:

Итак я долго мучался с этой проблемой и наконец решил.
Но совесть не дала мне просто принять этот опыт не написать об этом в сообщество :)
Итак вот как я делал (ссылки на уже готовые - в конце статьи):

Берем модуль  print версии 6.х-1.10.
Скачиваем dompdf в слегка переработанной версии (мне пришлось соединить между собой 2 сборки - dompdf 0.6 - альфа 2 и где-то кем-то сделанную версию с русскими шрифтами), что получилось выкладываю сюда.

Кладем dompdf в папку
/lib
модуля print (как того и приписывает инструкция).

Далее
Берем в модуле print (версию не перепутайте - 6.х-1.10.) файл: print/print_pdf/print_pdf.pages.inc и закомментируем следующие строки:

с №146 по №161:

  // Convert from UTF-8 to ISO 8859-1 and then to HTML entities
  if (function_exists('utf8_decode')) {
    $html = utf8_decode($html);
  }
// iconv fails silently when it encounters something that it doesn't know, so don't use it
//  else if (function_exists('iconv')) {
//    $html = iconv('UTF-8', 'ISO-8859-1', $html);
//  }
  elseif (function_exists('mb_convert_encoding')) {
    $html = mb_convert_encoding($html, 'ISO-8859-1', 'UTF-8');
  }
  elseif (function_exists('recode_string')) {
    $html = recode_string('UTF-8..ISO_8859-1', $html);
  }
  $html = htmlspecialchars_decode(htmlentities($html, ENT_NOQUOTES, 'ISO-8859-1'), ENT_NOQUOTES);

Ибо они поганят всю кодировку. (конечно я может где что лишнее закомментировал... но однако у меня заработало.

Далее
в dompdf - файл dompdf_config.inc.php
строка №161, параметр DOMPDF_UNICODE_ENABLED установить в true:
(должно стать так)

if (!defined("DOMPDF_UNICODE_ENABLED")) {
  define("DOMPDF_UNICODE_ENABLED", true);
}

Вот кажется и все :)

Так что вот :) пользуйтесь и радуйтесь. Найдете баги - пишите.
(все необходимое прилагаю)

P.S. файлы почему-то так и не прикрепился к статье (думаю что из-за таймаута), поэтому даю ссылку на внешнее хранилище:
dompdf-0.6-alfa2_plus_unicode

print_6.x-1.10_plus

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано pavlosof в чт, 24/12/2009 - 15:46.

А можно ли использовать это решение отдельно от Drupal-a?
Если да, то напишите пожалуйста для Drupal-непосвященных пример PHP-кода для генерации pdf-файла, скажем, с такого простого HTML-кода(файла):

<span style="font-family: Verdana;">Привет</span>

Хочется проверить как отображаются шрифты кроме Times.


Опубликовано ii в пт, 19/02/2010 - 09:43.

Чудеса. У меня pdf'ка одна - вне зависимости от содержимого ноды:


Опубликовано ii в пт, 19/02/2010 - 09:26.

Нашел файлик в исходнике по вашей ссылке sites/all/modules/print/lib/dompdf/list4.html :)
В общем - не работает!

update: нашел так источник - sites\all\modules\print\print.tpl.php


Опубликовано ii в пт, 19/02/2010 - 09:42.

Как сделать так, чтобы символы   — и пр. распознавались правильно? И чтоб слова не наезжали друг на друга.


Опубликовано Dark_kz в чт, 02/09/2010 - 07:15.

Решение есть?


Опубликовано ii в пт, 03/09/2010 - 01:28.

у меня нет.


Опубликовано aparfilov в пн, 08/11/2010 - 19:35.

Freakachoo, с PDF понятно, а отправку по e-mail пробовали? У меня присылает письма в ISO-8859-1. Остальные модули нормально шлют. Что может быть?


Опубликовано Leonyl в сб, 20/11/2010 - 19:14.

Да, действительно Dompdf, представленная здесь, работает с рус. шрифтами. Но, следующая бага: весь текст разлазится за границы указанного (A4) формата, иногда абзацы наезжают друг на друга.

Если скачать dompdf_0-6-0_beta1.zip с сайта разработчика, копирнуть в неё шрифты из представленной в этом топике сборки и подправить dompdf_config.inc.php – наезды уходят, всё в рамках приличия.

А вот как подружить это всё с CSS – на странице модуля print заявлен "full CSS support" – неизвестно.
На print-6.x-1.12 эти хаки не действуют: кирилика выводится знаками вопроса. Что со шриятами из сборки топикстартера, что без. Перед этим висит больше минуты.

Заявленной поддержки CSS, ради которой пробовал dompdf, я так и не добился: помещал стили и в print_pdf.tpl.php, и во внешний файл.

tcpdf хоть и не поддерживает css, но зато быстрый и кириллицу держит без проблем.


Опубликовано ruska882010 в пт, 10/12/2010 - 05:18.

Я с подобной проблемой сталкивался, поменял шрифт и все нормально заработало

Удачи!


Опубликовано milkovsky в чт, 05/01/2012 - 15:58.

ruska882010 написал(а):

Я с подобной проблемой сталкивался, поменял шрифт и все нормально заработало

Удачи!

Не подскажите где меняется шрифт? Пробовал на странице admin/settings/print/pdf, не помогло


Новое на сайте