ChatGPT сказал:
Чтобы в новой версии Dompdf (PHP библиотека для генерации PDF) корректно отобразить кириллицу, нужно:
✅ 1. Использовать шрифт с поддержкой кириллицы
По умолчанию Dompdf поддерживает только базовые шрифты (Helvetica и пр.), которые не включают кириллицу.
Решение: Подключить TTF-шрифт, например:
-
DejaVu Sans -
Arial -
Roboto -
Times New Roman -
Open Sansс кириллицей
✅ 2. Пример подключения кастомного шрифта
1. Поместите шрифт (например, DejaVuSans.ttf) в директорию /fonts.
2. Генерация шрифта Dompdf:
bashphp vendor/dompdf/dompdf/lib/fonts/dompdf-load-font.php "DejaVu Sans" normal /путь/к/DejaVuSans.ttf
Если dompdf-load-font.php нет — используйте шрифт напрямую как описано ниже.
✅ 3. Использование шрифта в коде PHP
phpuse Dompdf\Dompdf;
use Dompdf\Options;
$options = new Options();
$options->set('defaultFont', 'DejaVu Sans'); // или другой нужный
$options->set('isHtml5ParserEnabled', true); // для корректного парсинга HTML
$options->set('isRemoteEnabled', true); // если используете внешние стили или изображения
$dompdf = new Dompdf($options);
$html = <<<HTML
<html>
<head>
<style>
body {
font-family: 'DejaVu Sans', sans-serif;
}
</style>
</head>
<body>
Привет, мир! Тест кириллицы.
</body>
</html>
HTML;
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$dompdf->stream("document.pdf", ["Attachment" => false]);
✅ Альтернатива: использовать встроенный DejaVu Sans
С версии 1.0.0+, Dompdf включает встроенную поддержку DejaVu Sans, который поддерживает кириллицу.
Просто укажите:
php$options->set('defaultFont', 'dejavusans');
и в HTML:
html<style>
body {
font-family: dejavusans;
}
</style>
⚠️ Важно
-
Убедитесь, что PHP расширение
mbstringвключено. -
Проверяйте кодировку исходного HTML — должна быть UTF-8.
Если хочешь, я могу помочь загрузить конкретный TTF-шрифт и подготовить шаблон под него.
Вы сказали:
ChatGPT сказал:
Ты используешь PhpSpreadsheet и сохраняешь Excel-файл в PDF через \PhpOffice\PhpSpreadsheet\Writer\Pdf\Dompdf, что под капотом использует Dompdf. Чтобы включить поддержку кириллицы, нужно убедиться, что Dompdf внутри PhpSpreadsheet использует правильный шрифт, поддерживающий кириллицу (например, DejaVu Sans).
✅ Как правильно включить поддержку кириллицы
1. Установи dompdf/dompdf отдельно (если ещё не установлен):
bashcomposer require dompdf/dompdf
2. Установи шрифт DejaVu Sans как основной
PhpSpreadsheet использует стили из ячеек Excel. Поэтому тебе нужно вручную задать шрифт в таблице.
✅ Пример кода:
phpuse PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Pdf\Dompdf;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
use PhpOffice\PhpSpreadsheet\Style\Font;
// Устанавливаем PDF рендерер
\PhpOffice\PhpSpreadsheet\IOFactory::registerWriter('Pdf', Dompdf::class);
// Создаем объект таблицы
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Привет, мир! Кириллица работает.');
// Устанавливаем шрифт DejaVu Sans (поддерживает кириллицу)
$spreadsheet->getDefaultStyle()
->getFont()
->setName('DejaVu Sans') // Важно: именно так!
->setSize(12);
// Сохраняем как PDF
$writer = new Dompdf($spreadsheet);
$writer->save($savePathpdf . 'copy.pdf');
⚠️ Важно:
-
Dompdf должен иметь доступ к шрифту
DejaVu Sans— он встроен, начиная с версии 1.0.0+, так что просто указывай имяDejaVu Sans. -
Убедись, что кодировка всех строк — UTF-8.
-
Windows: если
DejaVu Sansне отображается, попробуйArial Unicode MS(если установлен).
✅ Проверка версии Dompdf
Проверь, что используешь последнюю версию dompdf/dompdf:
bashcomposer show dompdf/dompdf
Если не работает или показывает "кубики" вместо текста — покажи PDF-файл или пример данных, я помогу точнее.