将Unicode写入PDF

时间:2019-01-20 01:03:55

标签: pdf fonts character-encoding

我有Unicode文本(Unicode代码序列)和TTF字体(TTF文件的字节)。我想使用该字体将该文本写入PDF文件。

我对PDF非常了解。我不介意每个字符使用两个字节。我想按原样附加TTF文件(应从TTF文件使用charcode-to-glyf映射)。

我应该使用哪种字体SubtypeEncoding?是否可以避免记录ToUnicode

我尝试使用Subtype =“ / TrueType”,但是它需要指定FirstChar,LastChar和Widths(它们已经在TTF内部)。

1 个答案:

答案 0 :(得分:0)

您根本不能将Unicode与字体一起使用(在有限的情况下,拉丁或几乎是拉丁语言除外),因为字体使用编码,并且编码是一个单字节数组。因此,您不能从一个Font中引用超过256个字符,并且字符代码不能超过一个字节。

“使用Unicode”的第一个问题是Unicode不是简单的2字节编码,而是多字节格式,具有可变长度,有时单个字形由多个Unicode代码点表示。

因此,为了处理此问题,您需要使用CIDFont,而不是Font。您不能“使用从字符编码到glyf的映射”,我假设您是指TTF字体中的CMAP子表。您必须将CIDFont与CMap组合在一起,才能将文本字符串中的多个字节映射到字符代码中,以便在CMap中进行查找,从而为您提供CID来引用字体中的精确字符程序。

也许可以构建一个覆盖每个Unicode代码点的CMap,但是我对此表示怀疑,这肯定是一项艰巨的任务。但是,某些CMap已经存在。 Adobe在其网站上发布了标准列表,其中包括CMap,例如UniCNS-UCS2-H和UniCNS-UCS2-V或UniGB-UTF8-H等。

您可能可以使用标准CMap之一。

请注意,FirstChar,LastChar等已存储为TrueType字体并不重要,您仍然需要在PDF Font对象中指定它们。这是因为PDF使用者可能根本不渲染文本,例如可以提取文本,在这种情况下,只要此信息可用,就不需要解释字体。