2017-05-29 101 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