Генерация DomPDF для китайских иероглифов

Я пытаюсь создать PDF-файл, который будет содержать китайские иероглифы, используя dompdf. Вот мой код:

require('dompdf/dompdf_config.inc.php');
$dompdf = new DOMPDF();
mb_internal_encoding('UTF-8');
def("DOMPDF_UNICODE_ENABLED", true);
$html = ' <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
 <style>
     *{ font-family: DejaVu Sans, font-size: 12px;}
 </style> </head> <body>
 忠烈祠
  </body>
 </html>';
 $dompdf->load_html($html);
 $dompdf->render();
$output = $dompdf->output();
 $filename = 'a.pdf';
$path = $filename;
file_put_contents($path, $output);

Проблема в том, что сгенерированный PDF-файл показывает только квадраты, когда я открываю его с помощью Chrome или Adobe Reader, но в Mozilla Firefox он выглядит нормально.

Любые предложения?


person Alexandru Cioroianu    schedule 10.02.2015    source источник
comment
github.com/barryvdh/laravel-dompdf/issues/79 ссылаться предпоследним ответь... может тебе поможет..   -  person coDe murDerer    schedule 13.02.2015
comment
Спасибо за ответ, но я просмотрел все ответы, которые нашел в Google. Проблема с моим проектом заключалась в кодировке в текстовом редакторе (на данный момент netbeans)   -  person Alexandru Cioroianu    schedule 19.02.2015


Ответы (1)


Во-первых, переместите def("DOMPDF_UNICODE_ENABLED", true); выше требования, поскольку функция def, включенная в dompdf, определяет константу только в том случае, если она не существует. Когда вы включаете dompdf_config.inc.php, эта константа будет установлена ​​в это время. Кроме того, используйте вместо этого define.

Во-вторых, вам нужен другой шрифт. Шрифты DejaVu, включенные в dompdf, не поддерживают CJK. Для обзора прочитайте мой ответ на Dompdf и установите другое семейство шрифтов.

Если у вас в данный момент нет шрифта, попробуйте найти Firefly Sung. Какой бы шрифт вы ни решили использовать, он должен быть TTF, чтобы его мог использовать dompdf.

Вот пример использования Firefly Sung с помощью CSS-правила @font-face, установка не требуется:

<!DOCTYPE html>
<html>

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <style>
    @font-face {
      font-family: 'Firefly Sung';
      font-style: normal;
      font-weight: 400;
      src: url(http://eclecticgeek.com/dompdf/fonts/cjk/fireflysung.ttf) format('truetype');
    }
    * {
      font-family: Firefly Sung, DejaVu Sans, sans-serif;
    }
  </style>
</head>

<body>
  <div>忠烈祠</div>
</body>

</html>

person BrianS    schedule 03.03.2015
comment
Я попробовал приведенный выше html с dompdf0.7, но все равно символы в виде ящиков. Я тестирую в Ubuntu 16.04 и PHP 7.0 со всеми включенными необходимыми расширениями. Что я делаю неправильно? - person Suraj; 16.10.2016
comment
@Suraj Dompdf не включает поддержку всех символов из коробки. Вы установили шрифт, который поддерживает ваши символы? - person BrianS; 17.10.2016
comment
Я использую точно такой же код выше. Я думаю, что это не требует какой-либо установки, поскольку URL-адрес источника шрифта является внешним. Пожалуйста посоветуй. - person Suraj; 18.10.2016
comment
Установлено ли значение allow_url_fopen как true? - person BrianS; 18.10.2016
comment
Да, для параметра allow_url_fopen установлено значение true. Кажется, теперь это работает. Но когда я пробовал с японскими иероглифами, все еще были поля для нескольких символов. Я думаю, что шрифт, включенный в src, не поддерживает все японские символы. Также размер pdf слишком большой 15.7mb. Пожалуйста, проверьте HTML здесь 54.153.85.27/testhtml1.html. Созданный URL-адрес в формате PDF: 54.153.85.27/document_test.pdf. Спасибо. - person Suraj; 19.10.2016
comment
Вы должны указать отдельный файл шрифта для каждого веса. У меня нет полужирной версии этого шрифта, но если вы продублируете объявление @font-face, но измените жирность на полужирный, вы, по крайней мере, увидите символы. Что касается размера PDF, включите поднастройку шрифта. - person BrianS; 20.10.2016
comment
этот ответ у меня не работает, PDF показывает только квадраты - person Yevgeniy Afanasyev; 27.04.2018