如何在自己的服务器上托pipe谷歌网页字体?

我需要在Intranet应用程序上使用一些Google字体。 客户可能或可能没有互联网连接。 阅读许可条款,似乎它在法律上是允许的。

请记住,我的答案已经过时了一点。 下面还有其他更复杂的技术答案,例如:

  • localfont
  • neverpanic /谷歌的字体下载
  • 谷歌-web字体辅助

所以不要让这是目前被接受的答案给你的印象,这仍然是最好的。


你现在也可以通过在谷歌/字体库上的github下载谷歌的整个字体集。 他们还提供了〜350MB的字体快照 。


您首先将您的字体select下载为压缩包,为您提供一大堆真正的字体。 把它们复制到公共的地方,你可以从你的css链接到某个地方。

在谷歌webfont下载页面,你会发现一个像这样的包含链接:

 http://fonts.googleapis.com/css?family=Cantarell:400,700,400italic,700italic|Candal 

它链接到通过一堆@font-face定义来定义字体的CSS。

在浏览器中打开它,将其复制并粘贴到您自己的CSS中,然后修改url以包含正确的字体文件和格式types。

所以这:

 @font-face { font-family: 'Cantarell'; font-style: normal; font-weight: 700; src: local('Cantarell Bold'), local('Cantarell-Bold'), url(http://themes.googleusercontent.com/static/fonts/cantarell/v3/Yir4ZDsCn4g1kWopdg-ehHhCUOGz7vYGh680lGh-uXM.woff) format('woff'); } 

变成这样:

 /* Your local CSS File */ @font-face { font-family: 'Cantarell'; font-style: normal; font-weight: 700; src: local('Cantarell Bold'), local('Cantarell-Bold'), url(../font/Cantarell-Bold.ttf) format('truetype'); } 

正如你所看到的,这样在你自己的系统上托pipe字体的缺点是,你限制自己的真正的types格式,而谷歌webfont服务由访问设备确定哪些格式将被传输。

此外,我不得不添加一个.htaccess文件到我的包含MIMEtypes的字体的目录,以避免在Chrome开发工具中popup错误。

对于这个解决scheme,只有真正的types是需要的,但是当你想要包含不同的字体时,定义更多并不会伤害,比如font-awesome

 #.htaccess AddType application/vnd.ms-fontobject .eot AddType font/ttf .ttf AddType font/otf .otf AddType application/x-font-woff .woff 

有一个工具localfont.com来帮助你下载所有的字体变种。 它也会生成相应的CSS来执行。

伟大的解决scheme是谷歌网页字体帮手 。

它允许您select多个字体变体,这可以节省大量的时间。

我写了一个bash脚本 ,它使用不同的用户代理获取Google服务器上的CSS文件,将不同的字体格式下载到本地目录,并写入包含它们的CSS文件。 请注意,该脚本需要Bash版本4.x.

有关脚本,请参阅https://neverpanic.de/blog/2014/03/19/downloading-google-web-fonts-for-local-hosting/ (我不在这里复制,因此我只需更新它一个地方,当我需要)。

编辑:移动到https://github.com/neverpanic/google-font-download

CSS文件(来自包含URL)的内容取决于我从哪个浏览器查看它。 例如,使用Chrome浏览http://fonts.googleapis.com/css?family=Open+Sans时,该文件只包含WOFF链接。; 使用Internet Explorer(下面),它包括EOT和WOFF。 我把所有的链接粘贴到我的浏览器下载。

 @font-face { font-family: 'Open Sans'; font-style: normal; font-weight: 400; src: url(http://themes.googleusercontent.com/static/fonts/opensans/v6/cJZKeOuBrn4kERxqtaUH3fY6323mHUZFJMgTvxaG2iE.eot); src: local('Open Sans'), local('OpenSans'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/cJZKeOuBrn4kERxqtaUH3fY6323mHUZFJMgTvxaG2iE.eot) format('embedded-opentype'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/cJZKeOuBrn4kERxqtaUH3T8E0i7KZn-EPnyo3HZu7kw.woff) format('woff'); } 

当您使用自己的networking字体时,您需要正确链接到每种字体types ,处理传统的浏览器错误等。当您使用Google Web字体(由Google托pipe)时,Google会自动链接到该浏览器的正确字体types。

只要您坚持字体许可证的条款(通常是OFL),就可以在法律上允许。

您需要一组网页字体格式,而Font Squirrel Webfont Generator可以生成这些字体 。

但是OFL要求字体在被修改的时候被重命名,并且使用生成器意味着修改它们。

我有一个用PHP编写的脚本,类似于@ ownpanic的脚本,它自动从Google下载CSS和字体( 包括暗示的和无形的 )。 然后,它将根据用户代理从您自己的服务器提供正确的CSS和字体。 它保留自己的caching,所以用户代理的字体和CSS只能下载一次。

目前还处于早期阶段,但可以在这里find: DaAwesomeP / php-offline-fonts

我在一个咕task任务中使用了grunt-local-googlefont 。

 module.exports = function(grunt) { grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), "local-googlefont" : { "opensans" : { "options" : { "family" : "Open Sans", "sizes" : [ 300, 400, 600 ], "userAgents" : [ "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)", //download eot "Mozilla/5.0 (Linux; U; Android 4.1.2; nl-nl; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30", //download ttf "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1944.0 Safari/537.36" //download woff and woff2 ], "cssDestination" : "build/fonts/css", "fontDestination" : "build/fonts", "styleSheetExtension" : "css", "fontDestinationCssPrefix" : "fonts" } } } }); grunt.loadNpmTasks('grunt-local-googlefont'); }; 

然后,检索它们:

 grunt local-googlefont:opensans 

请注意,我正在使用原始分支,在检索名称中带有空格的字体时效果更好。

实际上,您可以直接从Google下载所有字体格式变体,并将它们包含在您的css中,以便从您的服务器提供。 这样,您就不必担心Google跟踪您网站的用户。 然而,不利的一面可能会降低你的服务速度。 字体对资源要求很高。 我还没有在这个问题上做任何testing,并怀疑是否有人有类似的想法。

我的解决scheme是从谷歌网页字体下载TTF文件,然后使用onlinefontconverter.com 。

除了k0pernicus,我想build议最好的本地服务 。 这也是一个bash(v4)脚本,使networking服务运营商能够从他们自己的networking服务器下载和提供Googlenetworking字体。 但除了另一个bash脚本之外,它还允许用户完全自动化(通过cron等)提供最新的字体文件和css文件。

我做了一个小小的PHP脚本,以获得从谷歌字体CSS导入URL,如下载链接: https : //fonts.googleapis.com/css?family = Roboto : 400,700| Slabo+27px|Lato: 400,300italic,900italic

你可以在这里使用这个工具: http : //nikoskip.me/gfonts.php

例如,如果你使用上面的导入URL,你会得到这个:

在这里输入图像说明

如果你想在你自己的服务器上托pipe所有的字体(或者其中的一些),你可以从这个repo下载字体,并按照你的需要使用它: https : //github.com/praisedpk/Local-Google-Fonts

有一个非常简单的脚本,用普通的Java编写,从Google Web Font链接下载所有字体(支持多种字体)。 它还下载CSS文件并将其调整为本地文件。 用户代理可以适应也得到其他文件,而不仅仅是WOFF2。 请参阅https://github.com/ssc-hrep3/google-font-download

生成的文件可以很容易地添加到构build过程中(例如像vue-webpack这样的webpack构build)。