dompdf кодировка символов UTF-8

Я пытаюсь создать pdf с правильными символами, но есть ли?? символы. Я создал тестовый php-файл, где Im пытался скрыть лучшее решение. Если я открываю в браузере html, я выгляжу нормально

UTF-8 --> UTF-8 : X Ponuka číslo € černý Češký 

Но когда я смотрю в pdf, я вижу это

 UTF-8 --> UTF-8 : X Ponuka ?íslo € ?erný ?ešký 

Вот мой код:

 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>č s š Š</title> </head> <body> <?php require_once("dompdf/dompdf_config.inc.php"); $tab = array("UTF-8", "ASCII", "Windows-1250", "ISO-8859-2", "ISO-8859-1", "ISO-8859-6", "CP1256"); $chain = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <style></style><title>č s š Š</title></head><body>'; foreach ($tab as $i) { foreach ($tab as $j) { $chain .= "<br> $i --> $j : ".iconv($i, $j, 'X Ponuka číslo € černý Češký <br>'); } } $chain .= '<p style="font-family: firefly, verdana, sans-serif;">??????X Ponuka číslo € černý Češký <br></p></body></html>'; echo $chain; echo 'X Ponuka číslo € černý Češký <br>'; $filename = 'pdf/_1.pdf'; $dompdf = new DOMPDF(); $dompdf->load_html($chain, 'UTF-8'); $dompdf->set_paper('a4', 'portrait'); // change these if you need to $dompdf->render(); file_put_contents($filename, $dompdf->output()); ?> </body> </html> 

Что я делаю неправильно? Я попробовал много вариантов, которые нашел 🙁 Любая идея?

Вы должны снова прочитать инструкцию Unicode . Основная проблема заключается в том, что вы не указываете шрифт, который поддерживает ваши символы. Похоже, вы прочитали инструкцию, потому что вы используете пример шрифта из этого документа. Однако этот пример не предназначен для применения в глобальном масштабе к любому документу, dompdf по умолчанию не включает firefly (шрифт китайского символа) или Verdana.

Если вы не укажете шрифт, то dompdf возвращается к одному из основных шрифтов (Helvetica, Times Roman, Courier), который поддерживает только кодировку ANSI Windows. Поэтому всегда будьте уверены, чтобы стиль текста был шрифтом, который поддерживает кодировку Unicode и имеет символы, которые вам нужно отображать.

С dompdf 0.6.0 вы можете использовать включенные шрифты Deja Vu. Итак, следующее должно работать (только HTML):

 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <style> body { font-family: DejaVu Sans, sans-serif; } </style> <title>č s š Š</title> </head> <body> <p>??????X Ponuka číslo € černý Češký <br></p> </body> </html> 

У меня есть символы UTF-8, работающие с этой комбинацией. Прежде чем передать html в DOMpdf, сделайте кодировку скрытой:

 $html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'); 

Использовать шрифт DejaVu в вашем css

 *{ font-family: DejaVu Sans; font-size: 12px;} 

Убедитесь, что вы установили кодировку utf-8 в <head> HTML <head>

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

Теперь все специальные персонажи работают «ľ š č ť ž ý á í é»,

Добавить только

  <style> *{ font-family: DejaVu Sans !important;} </style> 

перед </head> Это работает для меня.

Ничто из упомянутых ответов не помогло мне. После нескольких часов борьбы я переключился на niklasravnsborg / laravel-pdf, имеет почти точно такой же синтаксис и использование, и все работает отлично.

Если вы не против иметь только одну кодировку, вы можете изменить каждую кодировку в dompdf_font_family_cache.dist.php

как

 <?php $distFontDir = $rootDir . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'fonts' . DIRECTORY_SEPARATOR; return array( 'sans-serif' => array( 'bold' => $distFontDir . 'DejaVuSans-Bold', 'bold_italic' => $distFontDir . 'DejaVuSans-BoldOblique', 'italic' => $distFontDir . 'DejaVuSans-Oblique', 'normal' => $distFontDir . 'DejaVuSans' ), 'times' => array( 'bold' => $distFontDir . 'DejaVuSans-Bold', 'bold_italic' => $distFontDir . 'DejaVuSans-BoldOblique', 'italic' => $distFontDir . 'DejaVuSans-Oblique', 'normal' => $distFontDir . 'DejaVuSans' ), 'times-roman' => array( 'bold' => $distFontDir . 'DejaVuSans-Bold', 'bold_italic' => $distFontDir . 'DejaVuSans-BoldOblique', 'italic' => $distFontDir . 'DejaVuSans-Oblique', 'normal' => $distFontDir . 'DejaVuSans' ), 'courier' => array( 'bold' => $distFontDir . 'DejaVuSans-Bold', 'bold_italic' => $distFontDir . 'DejaVuSans-BoldOblique', 'italic' => $distFontDir . 'DejaVuSans-Oblique', 'normal' => $distFontDir . 'DejaVuSans' ), 'helvetica' => array( 'bold' => $distFontDir . 'DejaVuSans-Bold', 'bold_italic' => $distFontDir . 'DejaVuSans-BoldOblique', 'italic' => $distFontDir . 'DejaVuSans-Oblique', 'normal' => $distFontDir . 'DejaVuSans' ), 'zapfdingbats' => array( 'bold' => $distFontDir . 'DejaVuSans-Bold', 'bold_italic' => $distFontDir . 'DejaVuSans-BoldOblique', 'italic' => $distFontDir . 'DejaVuSans-Oblique', 'normal' => $distFontDir . 'DejaVuSans' ), 'symbol' => array( 'bold' => $distFontDir . 'DejaVuSans-Bold', 'bold_italic' => $distFontDir . 'DejaVuSans-BoldOblique', 'italic' => $distFontDir . 'DejaVuSans-Oblique', 'normal' => $distFontDir . 'DejaVuSans' ), 'serif' => array( 'bold' => $distFontDir . 'DejaVuSans-Bold', 'bold_italic' => $distFontDir . 'DejaVuSans-BoldOblique', 'italic' => $distFontDir . 'DejaVuSans-Oblique', 'normal' => $distFontDir . 'DejaVuSans' ), 'monospace' => array( 'bold' => $distFontDir . 'DejaVuSans-Bold', 'bold_italic' => $distFontDir . 'DejaVuSans-BoldOblique', 'italic' => $distFontDir . 'DejaVuSans-Oblique', 'normal' => $distFontDir . 'DejaVuSans' ), 'fixed' => array( 'bold' => $distFontDir . 'DejaVuSans-Bold', 'bold_italic' => $distFontDir . 'DejaVuSans-BoldOblique', 'italic' => $distFontDir . 'DejaVuSans-Oblique', 'normal' => $distFontDir . 'DejaVuSans' ), 'dejavu sans' => array( 'bold' => $distFontDir . 'DejaVuSans-Bold', 'bold_italic' => $distFontDir . 'DejaVuSans-BoldOblique', 'italic' => $distFontDir . 'DejaVuSans-Oblique', 'normal' => $distFontDir . 'DejaVuSans' ), 'dejavu sans mono' => array( 'bold' => $distFontDir . 'DejaVuSansMono-Bold', 'bold_italic' => $distFontDir . 'DejaVuSansMono-BoldOblique', 'italic' => $distFontDir . 'DejaVuSansMono-Oblique', 'normal' => $distFontDir . 'DejaVuSansMono' ), 'dejavu serif' => array( 'bold' => $distFontDir . 'DejaVuSerif-Bold', 'bold_italic' => $distFontDir . 'DejaVuSerif-BoldItalic', 'italic' => $distFontDir . 'DejaVuSerif-Italic', 'normal' => $distFontDir . 'DejaVuSerif' ) ) ?> 

Я знаю, что это не лучший способ, но это экономит много времени

У меня была аналогичная проблема, и я закончил использовать tcpdf. Надеюсь, это может быть полезно. http://www.tcpdf.org/
Проблема заключалась в использовании шрифта, который я использовал. Мне удалось получить правильный результат, используя этот шрифт «freeserif». Возможно, можно получить тот же результат, используя этот шрифт с dompdf .

 $pdf->SetFont('freeserif', '', 12); 

Вот пример, который я использовал. Пример tcpdf utf-8

 <?php header('Content-type: text/html; charset=UTF-8') ;//chrome require_once('tcpdf_include.php'); // create new PDF document $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); $pdf->setFontSubsetting(true); $pdf->SetFont('freeserif', '', 12); $pdf->AddPage(); $utf8text = ' <html><head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body> <b>Ponuka číslo € černý Češký </b></br> සිංහල </br> <u>தேமல </u> </br> </body></html>'; $pdf->SetTextColor(0, 63, 127); $pdf->writeHTML($utf8text, true, 0, true, true); $pdf->Output('example_008.pdf', 'I'); ?>