2017-05-29 96 views
4

我是一个处理许多字体错误或不完整的字体的印刷工。我在Mac上并且一直在使用Hazel,AppleScriptAutomator工作流程,试图自动重命名这些文件*。我需要一个脚本来替换Finder中ttfwoffwoff2文件的现有文件名,字体为postscriptName。我知道可以检索我需要的PostScript名称值的工具(fc-scan/fontconfig,TTX等),但缺乏编程知识来为我的目的编写脚本。我只设置了一个可以运行脚本的监视目录,当任何匹配某些参数的文件被添加时。 *要说明,我只是说改变文件名,不是存储在字体中的实际名称。如果可能的话,我也可以使用任何兼容语言或脚本工作流的脚本,例如this post参考文献嵌入AppleScript Shell脚本通过osascript使用脚本将ttf/woff/woff2文件重命名为PostScript字体名称

StackExchange帖子我请教:
How to get Fontname from OTF or TTF File?
How to get PostScript name of TTF font in OS X?
How to Change Name of Font?
Automate Renaming Files in macOS

其他:
https://github.com/dtinth/JXA-Cookbook/wiki/Using-JavaScript-for-Automation
https://github.com/fonttools/fonttools
https://github.com/devongovett/fontkit
https://www.npmjs.com/package/rename-js
https://opentype.js.org/font-inspector.html
http://www.fontgeek.net/blog/?p=343
https://www.lantean.co/osx-renaming-fonts-for-free

编辑:新增了按要求以下。
1)一个有点典型的webfont的屏幕截图,说明字体家族和样式名称的表单字段通常不完整,空白或包含非法字符。
2)描述的woff文件(也作为base64)。 Screenshot 谢谢大家提前!

+0

在我们走下一个兔子洞之前......你究竟在做什么,需要重命名文件?我所知道的几乎所有可能的技术都会从*实际的OpenType元数据*中读取字体名称,而不是文件名称(对于解析器来说,这是非常错误的**),所以基于我对OpenType的了解spec和OpenType字体,所以没有理由这样做。你能解释一下这里发生了什么吗? –

+0

如果已安装,则无论文件名是多少,大多数字体名称都将正确显示。但是这需要时间安装和检查所述文件,并且它不会帮助组织我的文件系统。另外,对于网页字体,字体系列和/或样式名称通常会丢失,但PostScript名称是完整的,这就是为什么我要这样做的原因。我知道我可以通过一个转换器来运行有问题的字体,该转换器可以输出更准确的名称的新文件,但是很多可能会出错或在转换中丢失。 – Moscarda

+0

并非如此,如果您必须使用大量使用字体管理器的字体,而不是操作系统提供的任何糟糕的字体管理。这可以让你批量检查,选择性地安装等字体,而不需要让操作系统做它愚蠢的事情(比如“不得不把它们放在C:\ Windows \ Fonts dir”等中)。至于“穿越转换器”,实际上*很少*可能会出现错误的正确工具。你想要[TTX](https://github.com/fonttools/fonttools),它做适当的往返跳动,并且非常适合做像批量复制postscript名称到名称表中的家庭字符串ID –

回答

4

既然你在你的问题中提到了Automator,我想我会试着解决这个问题,同时使用它来重命名文件,以及标准的Mac bash来获取字体名称。希望它能够节省学习整个编程语言的时间。

我不知道你的工作流程是什么,所以我会给你留下任何偏差,但这里有一个方法来选择一个字体文件,并从服务中,将该文件重命名为字体的postscript名称......基于Apple的元数据,特别是“com_apple_ats_name_postscript”。这是在字体文件中使用'mdls'从终端检索的数据之一。要关注postscript名称,请输入name_postscript的输出。为了简单起见,我将排除所选文件的路径。

字体名称AQUISITION

所以...运行此命令

MDLS GenBkBasBI.ttf | grep -A1 name_postscript

...生成此输出,其中包含FontBook的Postscript名称。 grep中的'A1'返回找到的行和第一行,它是包含实际字体名称的行。

com_apple_ats_name_postscript = (
    "GentiumBookBasic-BoldItalic" 

清洁这与一些更多的bash(TR,尾)...

tr -d \ | tail -n 1 | tr -d \" 

为了这些带空间,除了最后一个,引号都行。所以对于第一个'tr'实例,反斜杠后面有一个额外的空间。

在一个单一的线,它看起来像这样...

mdls GenBkBasBI.ttf | grep -A1 name_postscript | tr -d \ | tail -n 1 | tr -d \" 

...并产生这个...

GentiumBookBasic-BoldItalic 

现在,这里是包括上述bash命令的工作流程。我有这个想法从这个问题的答案变量使用...

Apple Automator “New PDF from Images” maintaining same filename

的Automator工作流

Automator Workflow screenshot

在顶部;服务在'Finder'中收到选定的'文件或文件夹'。

  1. 获取所选Finder项目

本(或获得指定的...)有没有允许测试。将其作为服务使用可以避免这种情况。

  • 变量(文件)的设置值
  • 这是记住要重命名

  • 运行哪个文件Shell脚本
  • 这是我们使用bash的东西。 $ f是选定/指定的文件。无论出于何种原因我都在运行'zsh'。你可以将它设置为你正在运行的任何东西,大概是'bash'。

  • 变量(文本)的设置值
  • 分配的bash输出给一个变量。这将用于新文件名的最后一个操作。

  • 获取变量(文件)的值
  • 调用指定/选择的文件进行重命名。

  • 重命名Finder项:姓名单项
  • 我有“只基名”设为所以它会独自离开的扩展。在这里输入来自操作4的'文本'变量。

    +0

    哇,这听起来很棒......虽然有一些问题...... 1)你提到FontBook:在安装字体之前不能更改名称吗?除非无法避免,否则我宁愿不在我的工作流中使用FontBook。2)几年前,我尝试了'zsh',但当我发现两者之间的格式差异可能会导致快速切换回'bash'时一些脚本如果没有说明就会抛出错误。你是否说在这种情况下差异不重要? 3)您是否介意在测试答案时上传最终确定的工作流/服务?干杯! – Moscarda

    +0

    字体书不是工作流程的一部分。我只是提到它来显示mdls命令的输出与它一致。没有任何“安装”。 bash/zsh部分是一行代码。我无法想象它有所作为。但是你总是可以自己运行命令来确认它生成正确的输出。我不认为我可以上传声誉为1的任何东西。甚至没有屏幕截图:)所以,从这一点来说,你是独立的。但重建服务不应超过两分钟。干杯。 – Mockman

    +0

    这对您的ttf示例非常有用,但如上所述:它是经常缺少或不正确的家庭/样式名称的网页字体。因此,后记值是如此重要。如果每个字体文件类型的工作流程都有一点不同,那很好,但我真的需要能够像使用ttf一样对woff/woff2文件执行相同的操作。干杯! – Moscarda