You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用DejaVu Sans时Dompdf返回500错误,如何支持扩展拉丁字符?

解决Dompdf 2.0使用DejaVu Sans时的500错误及扩展拉丁字符支持问题

错误原因分析

报错Path cannot be empty in FontMetrics.php:233说明Dompdf无法找到指定的DejaVu Sans字体文件路径,导致PDF渲染时触发致命错误。Dompdf默认集成DejaVu字体,但可能因安装不完整、路径配置缺失导致无法正常加载。

解决方案

方案1:确认字体完整性并配置字体路径

  1. 检查字体文件:查看项目vendor/dompdf/dompdf/lib/fonts目录,确认存在DejaVuSans.ttf、DejaVuSans-Bold.ttf等相关字体文件。若缺失,执行composer install重新安装Dompdf。
  2. 手动指定路径:初始化Dompdf时,通过Options明确设置字体目录和缓存路径:
<?php
require 'vendor/autoload.php';

use Dompdf\Dompdf;
use Dompdf\Options;

$options = new Options();
$options->set('isRemoteEnabled', true);
// 指定字体存放目录
$options->set('fontDir', __DIR__ . '/vendor/dompdf/dompdf/lib/fonts');
// 指定字体缓存目录
$options->set('fontCache', __DIR__ . '/vendor/dompdf/dompdf/lib/fonts');

$dompdf = new Dompdf($options);

$php = file_get_contents("inputPdfData.php");

$dompdf->setPaper('A4', 'portrait');
$dompdf->loadHtml($php);

$dompdf->render();
$dompdf->stream();

方案2:手动注册DejaVu Sans字体

如果自动加载字体失败,可直接将DejaVu Sans注册到Dompdf的FontMetrics:

<?php
require 'vendor/autoload.php';

use Dompdf\Dompdf;
use Dompdf\Options;
use Dompdf\FontMetrics;

$options = new Options();
$options->set('isRemoteEnabled', true);

$dompdf = new Dompdf($options);

// 注册常规字重的DejaVu Sans
$fontMetrics = $dompdf->getFontMetrics();
$fontMetrics->registerFont([
    'family' => 'DejaVu Sans',
    'style' => 'normal',
    'weight' => 'normal',
    'path' => __DIR__ . '/vendor/dompdf/dompdf/lib/fonts/DejaVuSans.ttf',
]);
// 可选:注册粗体版本
$fontMetrics->registerFont([
    'family' => 'DejaVu Sans',
    'style' => 'normal',
    'weight' => 'bold',
    'path' => __DIR__ . '/vendor/dompdf/dompdf/lib/fonts/DejaVuSans-Bold.ttf',
]);

$php = file_get_contents("inputPdfData.php");

$dompdf->setPaper('A4', 'portrait');
$dompdf->loadHtml($php);

$dompdf->render();
$dompdf->stream();

方案3:使用自定义嵌入字体

若上述方案无效,可直接嵌入支持扩展拉丁字符的字体文件:

  1. 将支持波兰语字符的.ttf字体文件放到项目目录(如fonts/文件夹)。
  2. 在HTML的CSS中通过@font-face引入:
<html lang="pl">
<head>
    <title>PDF GENERATOR</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <style>
        @font-face {
            font-family: 'PolishSupportFont';
            src: url('fonts/your-font-file.ttf') format('truetype');
            font-weight: normal;
            font-style: normal;
        }
        * {
            font-family: 'PolishSupportFont', sans-serif;
        }
    </style>
</head>
<body>
    ążćęłóńź
    ĄŻĘĆŹŁÓŃ
</body>
</html>

确保Dompdf的isRemoteEnabled已设为true,且字体文件路径正确。

验证

修改代码后重新生成PDF,确认无500错误,且ążćłóńę等扩展拉丁字符正常显示。

内容的提问来源于stack exchange,提问作者bHiro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:53:15