前言

iOS系统自7.0版本起便支持了字体文件的安装,安装后的字体将以配置描述文件的形式存储在系统中,以便文档编辑软件如Pages、Microsoft Word等进行调用,制作精美的文档。

用户可以通过 设置 > 通用 > 描述文件 访问它们并查阅删除:

IMG_3740.png

对于字体的安装,App Store中有专门的应用可以安装字体,比如AnyFont,不过需要花费12元购买。

而对于Workflow用户来说,这12元无非只是两个workflow的事情,并且自由度更高。

Google Fonts

在安装字体文件前,我们自然需要先获取字体文件,准确地说是获取可以合法使用的字体文件。那么像Google Fonts这样拥有800多种字体,且都是可以自由使用的开源字体的网站,自然是我首先考虑的对象。

Google很慷慨地提供了桌面版网站字体文件的下载途径。类似于在淘宝、Amazon购物一样,用户往底部的小抽屉中添加心仪的字体后即可单击右上角图标打包下载。

捕获.JPG

不过在手机版网页中,该下载按钮Google并未提供,仅提供了将Google字体嵌入网页的途径。

自然,在Workflow面前这不是什么大不了的问题。

Google Fonts Downloader

点击下载我制作的Google Fonts Downloader

517c7b7a9a154f3ba1063fe760f2c84e.png

Install Font

Google Fonts Downloader的使用

像在桌面端使用Google Fonts一样,移动端同样贴心地在底部提供了一个小抽屉供你挑选字体,点击页面上的“+”符号即可添加:

357561.jpg

小抽屉会在Google Fonts的底部出现,显示你选中的字体。

最贴心的是Google Fonts的后台脚本会自动把你选择的字体的名称添加到URL的尾部,通过正则表达式即可提取。这也方便了我制作Google Fonts Downloader

使用非常简单。在选完想下载的字体后,点击浏览器的分享按钮调用Workflow运行Google Fonts Downloader,待下载完后将压缩包文件保存至任意文件管理应用。

357570.jpg

使用Install Font安装字体

Install Font的原理

首先必须声明,这个workflow是我从某国外大神的成果修改而来的(大神的Twitter)。

不过这当然并不妨碍我去理解并修改这个workflow以适应我的需要,以及说明它的原理。

其实原理非常简单,在苹果的开发者文档中可以找到详尽的说明。配置描述文件(Configuration Profile)本质是一个XML文档,它可以在用户需要配置大量机器时派上用场,只要根据苹果的规定往里面填写相应的键值并导入机器即可。这些键值都可以在文档中找到说明。

从文档中可知,字体的描述文件主要有三个关键的键值需要生成:

  1. <Name>:字体的名称,仅为了便于用户识别,可以是任意值;
  2. <Font>:字体的数据。将.ttf或.otf字体文件进行Base64编码后填入即可;
  3. <PayloadUUID>:即通用唯一识别码,系统以此判断配置文件的唯一性。若出现两个拥有相同UUID的配置文件,先导入的会被覆盖掉。

其中前两者的生成非常简单,分别对字体文件使用Get NameBase64 Encode动作即可。第三者的生成稍微麻烦点,具体原理的可以参考UUID的相关文档,本workflow中使用的是UUID v5,基于字体文件的SHA1哈希值产生,这里不细说。

以上是生成配置描述文件的核心部分,将它们填入苹果提供的模板后,我们需要将其导入系统。本workflow应用的是生成配置文件的Data URI,并使用Open URLs动作打开。Data URI的相关信息可在我的首篇文章技巧:Workflow的备份、恢复、导出、导入中找到。

Install Font的使用

在使用Google Fonts Downloader下载完字体压缩包并保存后,解压并对字体文件调用Run Workflow > Install Font(这里我使用的文件管理器是Documents by Readdle):

357582.jpg

随后Workflow会迅速生成配置描述文件并打开,系统将跳转至安装描述文件的页面,一步步的点安装、输入机器的解锁密码即可,不用理会未签名的警告:

357587.jpg

如此,这个字体文件就成功地安装在了你的机器上。

功能强化

不过当你打开我的Install Font后,你会发现有许多看似多余的动作。

这是因为在实际使用过程中,我发现许多的字体是一整个字体家族(Font Family),也就是说含有一系列的字体。比如Android的系统字体Roboto

捕获.JPG该Font Family含有12种风格(Style),下载下来的压缩包里有12个字体文件!如果要依次点击全部安装的话,工作量显然是很繁重的。

因此,最终我对Install Font做了一个升级,可以同时处理单个字体文件或含多个字体文件的压缩包。

使用时,首先将Font Family中的所有字体文件打包成zip压缩包,并对压缩包调用Install Font

357592.jpg

这里请注意,由于Workflow目前不能解析压缩包中的文件夹,请如图所示直接对文件打包(可以连同其它文件如文本一起打包,本workflow内置了过滤动作过滤字体文件)。

升级后的Install Font利用了Wait to Return动作。在安装完一个字体文件后,请通过多任务界面返回调用Workflow的应用,Workflow将继续迅速生成下一个配置文件并再次跳转至下一个字体的安装界面:

357596.jpg

如此循环往复,即使是有12个Style的Roboto字体家族,也可以迅速装完:

357599.jpg

字体的使用

在安装完字体后,便可以重启Microsoft Word等文档应用,然后调用了:

IMG_3766.png

我的使用方式

然而我并不是一个移动端的Word用户。Word也许对iPad使用者来说足够好用,毕竟屏幕大,操作空间大。而在iPhone上使用Word、Pages等毕竟有点局促。

而我之所以有动力制作出这两个动作的原因是,我同样可以在Workflow中调用字体!

本人现实中的工作是工程狮,查阅材料的性能是家常便饭,所以我制作了一个较为复杂的Workflow用于快速从数据库获取材料信息并排版生成PDF报表,便于随时随地查看和归档,以及后续的模拟工作。

这个Worflow我上传到了官方的Workflow Gallery并通过审核上架了,可以搜索下载到(虽然不是我目前自用的完全体):

357605.jpg

由于我的PDF是通过先在Workflow中制作HTML文件从而生成的,我自然可以通过嵌入CSS样式来对HTML元素进行排版和应用样式。那么选择一种美观大气的字体是绝对能提高阅览体验的。

我最终选择了紧凑简洁美观的无衬线字体Roboto Condensed

捕获.JPG在描述文件页面查看到字体的名称后,我便可以将其填入CSS的font-family属性进行应用。在此,我在自己的Worflow开头插入了一个Dictionary用于快速更改配置,包括切换字体:

357609.jpg

由此生成的、应用了Roboto Condensed字体的报表阅读体验如下:

IMG_3771.png

如上所示,安装了字体后,Workflow就可以通过CSS调用本地字体了!然后对HTML文件使用Make Rich Text from HTML动作即可进一步生成美观的文档。如果使用系统自带的字体,文档的排版对我而言看起来会比较糟糕,即使使用Helvetica也不例外。

结语

当然,本文只是Workflow与配置描述文件结合使用的一例,不足为道。

相信不远的将来能有更有趣的用法。