pdf - 将 Unicode 写入 PDF
问题描述
我有 Unicode 文本(Unicode 代码序列)和 TTF 字体(TTF 文件的字节)。我想使用该字体将该文本写入 PDF 文件。
我非常了解PDF。我不介意每个字符使用两个字节。我想按原样附加 TTF 文件(应从 TTF 文件使用 charcode-to-glyf 映射)。
我应该使用什么字体Subtype
和Encoding
值?是否可以避免有ToUnicode
记录?
我尝试使用 Subtype = "/TrueType",但它需要指定 FirstChar、LastChar 和 Widths(已经在 TTF 中)。
解决方案
您根本不能将 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 使用者可能根本不会呈现文本,它可能(例如)正在提取文本,在这种情况下,只要此信息可用,它就不需要解释字体。
推荐阅读
- r - 在 R 中将绘图导出到 .pptx 或 .docx 时出现问题
- javascript - 如何在 Vuetify v-data-table 上对齐标题
- mysql - 如果 id 值不存在另一个表,则 SQL 加入
- ios - 键盘出现时如何避免弹出框大小变化。?
- android - React Native Firebase - 将数据推送到允许在 FlatList 中显示的数组
- c# - 将 Json 字符串反序列化为用户定义的对象时出现异常
- python - 使用 API 和子进程远程运行 python 脚本不起作用
- sql - 一个 Oracle 包中的父子插入语句
- javascript - 无效的事件目标 - 将 fromEvent 与 Angular 材质按钮一起使用时
- tfs - 如何使用 VS 2019 Team Explorer 在浏览器中打开工作项?