请注意:本页内容发布于 907 天前,内容可能已经过时,请注意甄别。
场景说明:
由于某些工作需求,时常需要使用 Adobe InDesign CC 2015 经手一些排版文件,为此系统中需要安装 3000 多种字体以适应不同印刷品的需求。
在 Windows 10 之前(Windows 8/8.1 不清楚是否存在这个问题),安装这个量级的字体,不会对操作系统的日常使用造成明显影响,除了在需要枚举字体时会有一定程度的拖慢(如 mspaint 中输入文字时点击字体选择下拉菜单、notepad 打开“字体”对话框时)。
Windows 10 起,微软似乎对系统的字体枚举与渲染机制进行了一些修改,当安装如上量级的字体时,不仅在需要列出字体时会拖慢,甚至在打开许多系统组件时都会发生拖慢现象,如:每次(不仅仅是初次)打开 cmd、notepad、mspaint 时,都会需要十几秒的时间才能打开。由于本人工作杂糅各种事务,故系统组件的拖慢是不可忍受的,而由于工作仍然包含排版文件的处理,不安装这 3000 多种字体又是不可能的。
为解决这个问题,经过了如下几种方法的尝试:
(1)由于最开始受影响的主要是 cmd,当时的系统版本是 Windows 10 20H1,故撰写一批处理文件(内容只有一行 exit),并放在登录时运行,其用意为通过加载一次 cmd 使其预读字体列表缓存。该做法仅对问题有轻微缓解,且当系统更新到 21H1 后彻底失效。
(2)通过调用 GDI API AddFontResourceA 对指定目录下的字体进行安装或卸载,由于临时性工作忙碌,未予实施。
(3)尝试使用字体管理软件,进行字体的安装与卸载。经过搜索,Windows 下的字体管理软件可能是个小众需求,搜到的几款软件(包括 Adobe Fonts、Typograf、FontBase、NexusFont、Connect Fonts、MainType)均因各种各样的原因(如无法先尝后买、与需求有差异、性能低下等)最终放弃。
(4)经会 cpp 编程的群友提醒,GDI 还有一个 API AddFontResourceExA 可以通过设置 FR_PRIVATE 标志位并进行注入来临时安装字体,但由于我不会 cpp 未能实践,而群友的实验性项目也不适用于本文的情况(InDesign 没有采用 GDI 来管理字体)。
(5)还是这位群友尝试帮忙,单独撰写了一款小工具,经在 Photoshop CS 2019 上试用成功,但在 InDesign CC 2015 上尝试注入进程时返回 HRESULT 3221225477,对应说明为 Access Violation,无果。
(6)仍然是上面这位群友,通过分析 InDesign 的启动过程,发现 InDesign 启动时会去读一下应用程序目录下的 Fonts 文件夹,尝试将字体丢进去,成功安装了只属于 InDesign 的私有字体。
最终解决方案:
(1)将字体或字体的快捷方式丢进 InDesign 目录下的 Fonts 文件夹中(CC 2015 默认安装目录:C:\Program Files\Adobe\Adobe InDesign CC 2015)。注意:依字体数量多少,初次启动时由于需要建立缓存,可能会有 10 分钟左右看不到 InDesign 的启动画面,但在任务管理器中可以看到 InDesign.exe 在努力读硬盘,是正常现象。
(2)或者可以删除 Fonts 文件夹,并建立到指定文件夹的目录符号连接,可避免(a)字体文件占用应用所在分区(b)手工创建每个字体文件的快捷方式之繁琐。
后记:
有了上述线索,经查阅 Adobe 在线文档,发现其中有一句很容易被忽略的话:
将字体文件复制到硬盘驱动器上 InDesign 应用程序文件夹的 Fonts 文件夹中,即可在 InDesign 中使用这些字体。但是,该 Fonts 文件夹中的字体仅对 InDesign 可用。
换句话说,InDesign 从一开始就提供了私有字体库的解决方案,只是很多人(包括我)之前根本就不知道有这回事,或者一直都在将就着用(InDesign 2021 起最低系统要求变更为 Windows 10,之前几个版本是 Windows 7,新版本无法通过降级操作系统本身将就,而 InDesign 新版本制作的版式文件,是无法直接在低版本中打开的)而已。
需要注意的是,在 InDesign SDK 文档中,有这样一句描述:
In prior releases, when InDesign started, it loaded any fonts in the folder named “Fonts” located in the same folder as the InDesign executable binary. Use of this folder is deprecated and might not be supported in future releases; however, InDesign currently still loads these fonts when it starts.
翻译过来是:
在以前的发行版本中,当 InDesign 启动时,会从与 InDesign 可执行文件同目录下的 Fonts 文件夹中加载其中包含的所有字体。对该文件夹的调用是一种过时设计,并且在未来的版本中可能不再支持。不过,目前 InDesign 仍然会在启动时加载这些字体。
也就是说,上述解决方案可能在未来也会失效,到时候可能需要寻找新的方法来解决这个问题。
远嚣 Comment