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

5

我使用以下代码在TCPDF中添加了许多字体。

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

许多其他字体可以正常工作,但是这个字体无法正常工作。当我打开PDF文件时,会显示以下错误信息:
“无法提取嵌入式字体'ArchitectsDaughter'。某些字符可能无法正确显示或打印。”
我正在将SVG文件导入PDF中。您可以从此处获取插入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; 

其他字体对我来说都可以正常使用。不知道为什么有些字体会出问题。这个该怎么解决?


你能在本地系统中导入并使用那个字体吗?那是一个有效且可用的字体文件吗?你能提供一个下载位置给其他人测试吗? - arkascha
@arkascha,我编辑了我的问题,你可以看到SVG和PDF。感谢您的建议。 - Himanshu Bhardiya
我在询问字体文件,而不是任何SVG或PDF,因为错误消息暗示字体文件已损坏。 - arkascha
嗯,在第一眼看上去,字体文件似乎是有效的,而且在打开PDF时我没有收到任何错误。然而,该字体似乎没有在该文档中使用... 你能否在问题中也发布你的PHP代码的相关部分?包括字体文件的引用和使用? - arkascha
@arkascha,我在问题中添加了代码。 - Himanshu Bhardiya
显示剩余3条评论
2个回答

1

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

之后,激活该字体:

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

然后,使用writeHTML函数写入一个Unicode字符,以&#x开头,以;结尾,例如:f0c9代表(条形)图标(http://fontawesome.io/icon/bars/):

$pdf->writeHTML('');


1
根据文档,TCPDF_FONTS::addTTFfont()将提供的字体永久添加到字体文件夹并返回其名称。因此,没有必要每次都添加它,但需要使用正确名称添加的字体。
// ...

$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);

// ...

我尝试了同样的方法,但对我没有起作用。还有其他解决方案吗? - Himanshu Bhardiya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接