首页 > 解决方案 > 将 Unicode 写入 PDF

问题描述

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

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

我应该使用什么字体SubtypeEncoding值?是否可以避免有ToUnicode记录?

我尝试使用 Subtype = "/TrueType",但它需要指定 FirstChar、LastChar 和 Widths(已经在 TTF 中)。

标签: pdffontscharacter-encoding

解决方案


您根本不能将 Unicode 与Font一起使用(除了有限的拉丁语或接近拉丁语的语言),因为字体使用编码,而编码是单字节数组。所以你不能从一个字体中引用超过 256 个字符,一个字符代码不能超过一个字节。

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

因此,为了解决这个问题,您需要使用 CIDFont,而不是 Font。您不能“使用 charcode-to-glyf 映射”,我假设您的意思是 TTF 字体中的 CMAP 子表。您必须将 CIDFont 与 CMap 组合,以便将文本字符串中的多个字节映射到 CMap 中查找的字符代码,从而为您提供 CID 以引用字体中的精确字符程序。

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

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

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


推荐阅读