iT邦幫忙

1

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,也就是說他原本是獨立存在的字型格式,而且為了減少檔案大小,封裝的格式比較複雜。

後續

之後的工作感覺就比較簡單了

  • 字型的支援會再補完一些未完成的部分(這些可能是比較少見的格式,不見得會遇到)。
  • 加一下能夠內嵌點陣圖的功能、錯誤回報、把文件寫好等。
  • 最後內容相關的模組預計會跟核心分開(這核心原本就是打算給不同的專案引用的)。

最後,由於一個人的力量有限,如果發現程式有任何問題,或是有任何想法或是建議歡迎跟我說。


尚未有邦友留言

立即登入留言