博客 / 詳情

返回

Web Fonts 學習之解決Docker環境網頁中文渲染吃字問題

背景信息
之前項目中遇到了使用ActiveReportsJS 前端報表控件生成PDF的功能,在IIS 或者Tomcat服務器上部署前端項目,生成PDF 超鏈接(為英文)均能正常顯示,但是在Docker中部署,生成PDF時候總是出現超鏈接吃字。
image.png

正常
image.png

通過與公司內部的資深前端大神溝通後,會發現還是因為缺字體導致的,因為雖然在生成PDF 時註冊了字體但這個字體是避免了亂碼,並未保證能夠被正確的畫出來,所以研究後發現,還是需要使用 Web-Fonts

Web Fonts 介紹

Web Fonts 表示可以隨着網頁的加載下載自定義字體實現以更多不同的、自定義的文本樣式。

CSS 中允許為HTML 標籤指定 font-family 屬性,瀏覽器會嘗試下載font-family 中指定的字體列表直到在運行的客户端系統中找到可用的字體。
如:

p {
  font-family: Helvetica, "Trebuchet MS", Verdana, sans-serif;
}

以上會保證在系統中運行良好,但傳統Web開發者的字體選擇是有限的。只有少數幾種字體,可以保證在所有常見的系統中都可以使用,稱為 Web-safe fonts, 我們就可以通過 web-safe提供的字體,在字體棧中指定可選的字體文件,但這增加了測試方面的開銷,以確保你的設計在每一種字體下看起來都很好。

Web fonts是一個好的選擇,可以保證網頁運行良好, Web-Font 是 CSS 的特點,允許指定字體文件隨着網站一起下載,也就意味着,任何支持 Web fonts的瀏覽器都可以精準的指定需要加載的字體。
語法如下:
首先需要在CSS 中定義@font-fce 塊, 指定下載字體的文件,注意 src裏面就是字體文件的地址:
@font-face {
font-family: "myFont";
src: url("myFont.woff2");
}

可以使用@font-face裏面指定的字體名稱,在任何需要的標籤中,像普通的font-family引用一樣應用到需要的標籤中:

html {
  font-family: "myFont", "Bitstream Vera Serif", serif;
}

語法確實稍微複雜一些

關於 Web-Font 我們需要注意以下事項:

  1. 注意字體版權
  2. 所有主流瀏覽器主要支持的字體格式 為 WOFF或WOFF2(Web Open Font Format versions 1 and 2),即使老的瀏覽器如IE9也是支持WOFF格式的。
  3. WOFF2 支持TrueType 和OpenType 規格説明的全部,包含variable fonts, chromatic fonts, 及font collections.
  4. 列出字體文件的順序很重要。如果提供了瀏覽器的字體列表,瀏覽器將選擇首個字體文件來使用。

示例:

@font-face {
    font-family: 'zantrokeregular';
    src: url('fonts/zantroke-webfont.woff2') format('woff2'),
         url('fonts/zantroke-webfont.woff') format('woff');
    font-weight: normal;
    font-style: normal;
}

font-family: 'zantrokeregular', serif;

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.