PDFWriter 随笔:终於能内嵌 OTF了

PDFWriter 是一个正在开发的 PHP PDF Library)

这两周花了不少时间研究 OpenType 字型档内嵌到 pdf 的方式,这两天终於搞定了。下面就轻松聊一些过程吧。

OpenType 与 TrueType 的差异

OpenType 跟 TrueType 其实主架构都差不多,就是内部的 table 有些微差异。

TrueType 的字型资料主要放在 glyf 表,glyf 内含每个文字的向量描述,以二次贝兹曲线构成。
而 OpenType 则是放在 cff 表内,以三次贝兹曲线构成。

在数学上,一个二次函数要转换成三次函数是容易的,但是反过来的话,其实很困难。
因此,网路上一些把 OpenType 转换为 TrueType 的程序,其实并不能说 100% 无失真转换,顶多是透过「补点」的方式让其极接近原曲线。
这也是为什麽我很想实作能够支援 OpenType 的原因之一,毕竟现在 OpenType 字型越来越多了。

处理 OpenType 的困难点

相较於 glyf ,网路上对 cff 的资讯相对比较少。
举例来说,当时要对 TrueType 做 subset 时,找得到一些前人所写的文章
但是 cff 我目前是没找到,因此只能直接看 adobe 的规格文件,然後直接尝试。
另一个点是 cff 全名是 Compact Font Format,也就是说他原本是独立存在的字型格式,而且为了减少档案大小,封装的格式比较复杂。

後续

之後的工作感觉就比较简单了

  • 字型的支援会再补完一些未完成的部分(这些可能是比较少见的格式,不见得会遇到)。
  • 加一下能够内嵌点阵图的功能、错误回报、把文件写好等。
  • 最後内容相关的模组预计会跟核心分开(这核心原本就是打算给不同的专案引用的)。

最後,由於一个人的力量有限,如果发现程序有任何问题,或是有任何想法或是建议欢迎跟我说。


<<:  [Report] 怎麽让筛选条件可以复选

>>:  安全密码储存开发方法

Day23 CC: Tweaked 升级版的电脑

我围绕在「基本版」电脑已经二十多天了 ... 一开始先试着熟悉 Lua 语法,接着玩转电脑周边设备,...

学习Python纪录Day22 - 用Kaggle上的dataset当例子

显示工作表每一列的值 wb = load_workbook("Top 10 most St...

[Day28]进阶挑战花式通灵CTF

再来就是我觉得难度较高的 CTF… 通常 CTF 的赛制因为范围较大,由於题型的机制范围较广,所以可...

[Day 16] 针对网页的单元测试(二)

首先先写测试 我们昨天测试了首页, 那我们今天要开始做新的设计, 并且针对我们的设计来做测试, 我们...

[Day11]用ISO打造甜蜜的家:育儿计画篇

昨天我们看完 ISO 27001:2013 版的架构,我第一次接触的时候就是一脸问号。 这对没有稽...