首页 > 解决方案 > 在 TCPDF 中嵌入字体

问题描述

我已经阅读了有关此主题的先前主题,但所有主题都是旧的、未答复的和/或有关创建自定义字体的更具体的内容。

在 TCPDF 中:

$pdf->SetFont('times', '', 10);

我创建的 pdf 看起来很棒。只是 BarnesAndNoble 说我提交的 PDF 不包含“嵌入字体”。Kindle 也是这么说的,但他们随后为我嵌入了它们。我接下来尝试 LuLu,但想先处理 BN.com。

一个例子表明:

$fontname = $pdf->addTTFfont('/fonts/arial.ttf', '', '', 32);

...但没有继续说明如何处理“$fontname”。也不是“32”具体代表什么,或者“32”是否有更好的选择。或者,如果 THAT 确实嵌入了字体!

我的虚拟主机说我的字体路径是:

/usr/share/fonts/default/Type1

...也许然后(区分大小写??):

/usr/share/fonts/default/Type1/Helvetica

我需要正确嵌入我的字体!

标签: tcpdf

解决方案


TCPDF 只会自动嵌入您自己添加的字体。我相当确定大多数操作系统都有 Times、Helvetica 和 Courier 可用,因此 TCPDF 没有嵌入它们。因此,在您的情况下,如果您添加 TTF 字体,TCPDF 应该在使用它时识别并自动嵌入字体定义。

此外,您应该只需要执行$fontname = $pdf->addTTFfont('/fonts/arial.ttf', '', '', 32);一次,因此您可以运行您的脚本一次,然后将该行注释掉。


直接来自文档

AddFont( $family, $style = '', $fontfile = '', $subset = 'default' )

导入 TrueType、Type1、core 或 CID0 字体并使其可用。需要先生成字体定义文件(读取/fonts/utils/README.TXT)。定义文件(以及嵌入时的字体文件本身)必须存在于当前目录中,或者如果定义了常量,则存在于 K_PATH_FONTS 指示的目录中。如果找不到,则会生成错误“无法包含字体定义文件”。

参数

$family - 字体系列。名称可以任意选择。如果是标准的姓氏,它将覆盖相应的字体。

$style - 字体样式。可能的值是(不区分大小写):

  • 空字符串:常规(默认)
  • B:粗体
  • 一:斜体
  • BI 或 IB:粗斜体

$fontfile - 字体定义文件。默认情况下,名称是根据系列和样式构建的,小写且没有空格。

$subset - 如果为 true,则仅嵌入字体的子集(仅存储与使用的字符相关的信息);如果 false 嵌入完整字体;如果 'default' 使用使用 setFontSubsetting() 设置的默认值。此选项仅对 TrueTypeUnicode 字体有效。如果要允许用户更改文档,请将此参数设置为 false。如果您对字体进行子集化,则接收您的 PDF 的人需要使用您的相同字体才能对您的 PDF 进行更改。PDF 的文件大小也会更小,因为您只嵌入了字体的一部分。

返回 - 包含字体数据的数组,如果出错则返回 false。

自 1.5 起见 TCPDF::SetFont(), TCPDF::setFontSubsetting() Public



推荐阅读