v3shin
@v3shin
Веб-шаман

Как задать кодировку в связке PHPWord + DOMPDF?

Всем привет. Пытаюсь конвертировать docx в pdf с помощью связки PHPWord + DOMPDF, но при этом кириллица отображается как знаки вопроса. Подскажите, пожалуйста, как это исправить.
Мой код:
$rendererName = Settings::PDF_RENDERER_DOMPDF;
$rendererLibraryPath = Yii::getAlias('@app/vendor/dompdf/dompdf');
Settings::setPdfRenderer($rendererName, $rendererLibraryPath);

$reader = IOFactory::createReader('Word2007');
$doc = $reader->load($filepath);
$writer = IOFactory::createWriter($doc, 'PDF');
$writer->save($convpath);
  • Вопрос задан
  • 1773 просмотра
Пригласить эксперта
Ответы на вопрос 3
Adamos
@Adamos
Делаешь два запроса в гугль:
"dompdf encoding" - и на первой же странице получаешь информацию, что DOMPDF нормально работает с Unicode.
"PHPWord utf-8" - и оказывается, что этот как раз с уникодом работает через задницу, и находятся костыли для некрофилов типа такого: https://phpstack.ru/php/kirillitsa-v-phpword.html
Ответ написан
@demach
Проблема может заключаться не столько в phpword, сколько в рендере (dompdf, TCPDF). На примере dompdf возможное решение таково: использовать шрифт семейства DejaVu

$phpWord = new \PhpOffice\PhpWord\PhpWord();
$phpWord->setDefaultFontName('dejavu sans');
\PhpOffice\PhpWord\Settings::setPdfRendererPath('./dompdf');
\PhpOffice\PhpWord\Settings::setPdfRendererName('DomPDF');

Да поможет ищущему
Ответ написан
Комментировать
@Kerm
Если ты меня считаешь то вероятно ищешь ответ на тот же вопрос, что и топик стартер, я нашел решение, не идеальное, но оно работает, почему не идеальное объясню в конце.

Код в PHP:

Settings::setDefaultFontName('DejaVu Sans');
Settings::setPdfRendererName(Settings::PDF_RENDERER_DOMPDF);
Settings::setPdfRendererPath('.');
Settings::setOutputEscapingEnabled(false);

$phpWord = IOFactory::load($wordFilePath);

$phpWord->save($savePdfPath, 'PDF');


Далее нужно в самом вордовском файле чтобы шрифт был DejaVu Sans, в ворде есть такой шрифт, в моем случае я делаю вордовские файлы из вордовских шаблнов и я там просто общий шрифт сделал DejaVu Sans и тогда русский язык отображается в pdf нормально, из-за этого собственно решение и не идеальное. У меня не получилось сделать тоже самое с Times New Roman. В Ubuntu где я работал, не было в начале установленного шрифта Times New Roman, я его установил, но это не помогло.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы