Fonts 使用MPDF生成pdf,不间断空格显示为未插入字符
使用Mpdf 8.0.8,我创建了一个带有自定义字体的文档,该字体显示精细,但不间断的空格显示为交叉方块: 使用FontForge打开我的字体时,我看到定义了Fonts 使用MPDF生成pdf,不间断空格显示为未插入字符,fonts,char,mpdf,Fonts,Char,Mpdf,使用Mpdf 8.0.8,我创建了一个带有自定义字体的文档,该字体显示精细,但不间断的空格显示为交叉方块: 使用FontForge打开我的字体时,我看到定义了uni00A0char(它是空的,但没有十字) 以下是调用Mpdf的代码: public function getPdfData($values, $medias, $locale = 'fr_FR') { $sessionLocale = $this->translator->getLocale(); $thi
uni00A0
char(它是空的,但没有十字)
以下是调用Mpdf的代码:
public function getPdfData($values, $medias, $locale = 'fr_FR')
{
$sessionLocale = $this->translator->getLocale();
$this->translator->setLocale($locale);
$html = $this->twig->render('@Pim/testPdf.html.twig');
$this->translator->setLocale($sessionLocale);
$defaultConfig = (new \Mpdf\Config\ConfigVariables())->getDefaults();
$fontDirs = $defaultConfig['fontDir'];
$defaultFontConfig = (new \Mpdf\Config\FontVariables())->getDefaults();
$fontData = $defaultFontConfig['fontdata'];
$fontData = $fontData + [
'myhelvet' => [
'R' => 'helvetlight.ttf',
'I' => 'helvetthick.ttf',
],
'timeslightitalic' => [
'R' => 'timeslightitalic.ttf'
]
];
$defaultFont = 'myhelvet';
$mpdf = new \Mpdf\Mpdf([
'orientation' => 'L',
'margin_left' => 0,
'margin_right' => 0,
'margin_top' => 1,
'margin_bottom' => 0,
'fontDir' => array_merge($fontDirs, [
__DIR__ . '/../Resources/public/fonts',
]),
'fontdata' => $fontData,
'default_font' => $defaultFont,
'mode' => '+aCJK',
"autoScriptToLang" => true,
"autoLangToFont" => true,
]);
$mpdf->addFontDirectory(__DIR__ . '/../Resources/public/fonts');
$mpdf->WriteHTML($html);
$pdfData = $mpdf->Output('', 'S');
return $pdfData;
}
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div style="font-family: myhelvet">Formatting a number: {{ '20000'|numberFormatLocale('fr_FR') }}</div>
</body>
</html>
public static function numberFormatLocale($number, $locale)
{
$formatter = new \NumberFormatter($locale, \NumberFormatter::DECIMAL);
return $formatter->format($number);
}
下面是无法呈现由Php NumberFormatter创建的非中断空间的html视图:
public function getPdfData($values, $medias, $locale = 'fr_FR')
{
$sessionLocale = $this->translator->getLocale();
$this->translator->setLocale($locale);
$html = $this->twig->render('@Pim/testPdf.html.twig');
$this->translator->setLocale($sessionLocale);
$defaultConfig = (new \Mpdf\Config\ConfigVariables())->getDefaults();
$fontDirs = $defaultConfig['fontDir'];
$defaultFontConfig = (new \Mpdf\Config\FontVariables())->getDefaults();
$fontData = $defaultFontConfig['fontdata'];
$fontData = $fontData + [
'myhelvet' => [
'R' => 'helvetlight.ttf',
'I' => 'helvetthick.ttf',
],
'timeslightitalic' => [
'R' => 'timeslightitalic.ttf'
]
];
$defaultFont = 'myhelvet';
$mpdf = new \Mpdf\Mpdf([
'orientation' => 'L',
'margin_left' => 0,
'margin_right' => 0,
'margin_top' => 1,
'margin_bottom' => 0,
'fontDir' => array_merge($fontDirs, [
__DIR__ . '/../Resources/public/fonts',
]),
'fontdata' => $fontData,
'default_font' => $defaultFont,
'mode' => '+aCJK',
"autoScriptToLang" => true,
"autoLangToFont" => true,
]);
$mpdf->addFontDirectory(__DIR__ . '/../Resources/public/fonts');
$mpdf->WriteHTML($html);
$pdfData = $mpdf->Output('', 'S');
return $pdfData;
}
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div style="font-family: myhelvet">Formatting a number: {{ '20000'|numberFormatLocale('fr_FR') }}</div>
</body>
</html>
public static function numberFormatLocale($number, $locale)
{
$formatter = new \NumberFormatter($locale, \NumberFormatter::DECIMAL);
return $formatter->format($number);
}
NumberFormatter的输出不是
U+00A0
,而是0xE2 0x80 0xAf
,或U+202F
-字体最可能不支持的狭窄不间断空间。显示您的代码。见@Finwe谢谢。我编辑了我的问题以显示我的代码。如果没有HTML数据,它很难完成。@Finwe这里是HTML,这是非常基本的(中断空间是由PHP生成的)@Finwe我可以在FontForge中添加一个打开字体的屏幕截图,如果你非常感谢你的时间和洞察力。我花了数小时研究这个问题,但我对字体/字符代码的理解相当有限。我在字体中添加了带有FontForge的字符,解决了这个问题。