TCPDF 字体未嵌入,显示“..“,在 Adobe Reader 上


TCPDF font not embadding, showing "..." on adobe reader

我使用这行代码在TCPDF中添加了许多字体

TCPDF_FONTS::addTTFfont('fonts/ArchitectsDaughter.ttf', 'TrueTypeUnicode', '', 96);
$pdf->AddFont("ArchitectsDaughter");

许多其他字体正在工作,但是,这个字体不起作用。当我将此pdf打开到阅读器中时,它显示这样的错误

无法提取嵌入的字体"建筑师女儿"。 某些字符 可能无法正确显示或打印。

我正在导入 pdf 格式svg文件。这是我插入pdf的SVG文件,你可以从这里获取PDF,这里是字体文件。

以下是 pdf 将如何生成的完整代码。

$fileName='export';
$uploadPath = Config::get('constants.paths.uploads.images.base').'/'.$fileName.'.svg';
$pdf = new TCPDF();
TCPDF_FONTS::addTTFfont(dirname(dirname(dirname(dirname(__FILE__)))).'/vendor/font-awesome/fonts/ArchitectsDaughter.ttf', 'TrueTypeUnicode', '', 96);
TCPDF_FONTS::addTTFfont(dirname(dirname(dirname(dirname(__FILE__)))).'/vendor/font-awesome/fonts/Archivor.ttf', 'TrueTypeUnicode', '', 96);
$pdf->AddFont("Archivor");
$pdf->AddFont("ArchitectsDaughter");
$pdf->SetPrintHeader(false);
$pdf->SetPrintFooter(false);
$pdf->AddPage();
$pdf->ImageSVG($uploadPath, $x='', $y='', $w='', $h='', $link='', $align='', $palign='', $border=0, $fitonpage=true);
$filename = 'export.pdf';
$pdf->output($filename, 'D');
exit; 

其他字体对我来说工作正常。不知道某些字体会发生什么。对此的解决方案是什么?

根据文档TCPDF_FONTS::addTTFfont()将提供的字体永久添加到 fonts 文件夹中并返回其名称。所以没有理由每次都添加它,但有必要使用具有正确名称的添加字体。

// ...
$pdf = new TCPDF();
$fontArchitectsDaughter = TCPDF_FONTS::addTTFfont(realpath(__DIR__ . '/../../../vendor/font-awesome/fonts/ArchitectsDaughter.ttf'), 'TrueTypeUnicode', '', 96);
$fontArchivor = TCPDF_FONTS::addTTFfont(realpath(__DIR__ . '/../../../vendor/font-awesome/fonts/Archivor.ttf'), 'TrueTypeUnicode', '', 96);
$pdf->AddFont($fontArchivor);
$pdf->AddFont($fontArchitectsDaughter);
// ...

首先通过TCPDF_FONTS::addTTFfont()或在字体目录中添加必要的文件来设置字体(通过TCPDF字体转换器转换TTF文件,如 http://fonts.snm-portal.com)

之后,激活字体:

$pdf->SetFont('FontAwesome','');

然后,使用 writeHTML 函数编写一个 unicode 字符,以 &#x 开头,以 ;例如:对于 F0C9(条形)图标 (http://fontawesome.io/icon/bars/):

$pdf->writeHTML('');