2017-03-24 25 views
0

背景:如何在node.js後端使用字體?

我在構建一個基於node.js的Web應用程序,需要使用各種字體。但它只需要在後端執行此操作,因爲結果將作爲圖像提供。因此,在我的情況下,客戶端/瀏覽器而不是需要訪問字體。

問:

我會盡量制定的問題儘可能少主觀: 什麼是提供與收集了大量的字體的Node.js的後端典型的選項?

我想出了到目前爲止的選項有:服務器:

  1. 一個是否在(Ubuntu的在我的情況)的操作系統中安裝這些成百上千的字體?
  2. 是否以某種方式提供來自雲存儲(如S3或(在線)數據庫(如Mongo數據庫服務器)的字體?
  3. 是否使用本地文件系統來存儲字體並檢索它們?
  4. ...其他選項

我目前對選項1傾斜,因爲這是像我這樣的外行做它在本地機器上的方式。

這裏沒有開始討論,我在哪裏可以找到討論不同選項的(dis-)優勢的資源?

編輯:

感謝您對所有的答覆。 感謝這些,我注意到我需要澄清一些事情。我需要SVG處理庫中使用的字體,例如p5.js,paper.js,raphael.js。所以我需要將這些字體提供給在node.js上運行的這些庫。

+1

你打算如何在Node.js中渲染圖像? – AEonAX

+0

我使用paper.js和類似的庫(它已經工作了!)。然後這些字體以SVG格式使用,之後也會導出到* .png。這也適用。 – pascal

+1

這項工作是否可以https://groups.google.com/forum/#!topic/paperjs/mdjv-LrUS1Y? – AEonAX

回答

1

的關鍵,你的問題是

數百或數千種字體

,直到我把在有你的方法並無實質區別。但是,如果這個數字是正確的(那種令人難以置信的,雖然)我想:

  1. 在OS安裝它們。如果您移動服務器而沒有映像會發生什麼?或移動操作系統?

  2. 儘管您需要手動記錄代碼爲的所有文件名和路徑,但本地文件系統將是一種理智的方式,

  3. MongoDB - 存儲集合中的文件名+路徑..並將實際字體存儲在您的系統中。 在移動服務器出現的時候,您必須選取存儲所有實際文件的目錄以及保存文件名+路徑的數據庫。
  4. 如果你想要的話,你可以把它放在一個MongoDB中,但是那個文件也會很大,我假設 - 這取決於你。

選擇#3可能是我會在這種情況下做的。

+0

謝謝@twg! 這個數字是正確的;) 我的Web應用程序試圖以創造性的方式使用字體 - 所以我需要使用數百甚至數千個字體。 如果字體僅作爲文件路徑提供 - 而不是安裝在操作系統中,您是否知道如果paper.js,p5.js等JavaScript庫(在node.js的頂部)能夠使用字體? – pascal

+1

@pascal不確定 - 但請看這裏:[fontkit](https://www.npmjs.com/package/fontkit) – twg

+0

謝謝!我用fontkit實現了我想要的東西! – pascal

-1

如果您有足夠體面的服務器設置(例如,您控制安裝的VPS或其他VM解決方案),那麼您可能要考慮的另一個選項是「不在節點上」執行此項工作。舉例來說,在我的一個項目,我需要建立175+作爲完美-AS-可以成爲的數學聲明,我是卸載工作XeLaTeX代替:

  1. 我運行一個節點腳本,需要輸入文字並建立小而完整的.tex文件
  2. 我再告訴節點叫「xelatex theFileIJustMade.tex」這將產生一個pdf
  3. 我再告訴節點叫「pdfcrop」對PDF,去除邊緣
  4. 然後我告訴節點調用「pdf2svg」,這是一個免費的和令人驚訝的有效工具
  5. 然後作爲最後一步主要是爲了節省空間和帶寬,我使用「svgo」,它是一個基於nodejs的svg優化器,可以作爲普通腳本代碼運行,也可以作爲CLI實用程序運行。

(上here一些細節,用實際代碼here

當然,這取決於如何迴應你的需要,你可以完全離不開步驟3和5的系統有一個極限我們可以運行多快,但作爲服務器端任務,應該永遠不會期望實時響應。

這是記住您的服務器在更大的操作系統內運行的好例子,該操作系統也可能提供可以完成這項工作的工具。當你使用Node時,Node明顯選擇Node解決方案,Node也是一種通用編程語言,可以通過spawnexec調用其他任何東西,非常類似python,php,java,C#等。有時候值得考慮是否可能有另一種工具更適合您的需求,尤其是當您考慮進行高度專業化的工作時,比如爲SVG排版字符串。

在這種情況下,LaTeX專門用於從命令行排版文本,XeLaTeX的創建是爲了實現全面的Unicode意識,以及從文件和系統方便地訪問字體,具有完整的OpenType功能控制,所以肯定會像任何節點特定的解決方案一樣適合候選人。對於使用的工具:XeLaTeX和pdfcrop附帶TeX Live(使用您的操作系統使用的任何軟件包管理器安裝,或者通過Windows上的MiKTeX安裝,但我懷疑您的服務器不能在Windows上運行)pdf2svg是自由的available on github,和svgo is available from npm

相關問題