5

Heroku 支持告诉我,为了在我的 Web 应用程序中使用自定义字体(未安装在系统中,您可以在 bash 控制台中使用 fc-list 看到已安装的字体),我必须部署一个包含所有字体的 .fonts 文件夹.

问题是我不知道该怎么做。我的意思是,我不知道文件的名称是否必须遵循 heroku 的任何特殊模式,或者我必须在我的代码中做一些事情来考虑这种字体,或者如果我将它包含在文件夹中它是自动的......

事实是我尝试以不同的方式更改字体的文件名,并且根本没有使用该字体。

为您提供更多详细信息,我们使用字体的过程是使用 rghost gem 将 PDF 转换为图像。最终图像根本不使用自定义字体。

在此先感谢,欢迎任何想法。

4

3 回答 3

6

我只需fonts/在项目的根文件夹中创建一个目录,然后像这样加载字体,例如config/initializers/rghost.rb

RGhost::Config::GS[:extensions] << "#{Rails.root}/fonts/LTSyntax.ttf"

文档指出,您还需要Fontmap字体目录中的文件,例如:

/Syntax (LTSyntax.ttf); 

您的问题是 PDF 引用了未嵌入 PDF 的字体。您可以使用以下命令获取 PDF 中使用的字体列表xpdfpdffonts

> pdffonts example.pdf
name                                 type              emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
Syntax                               Type 1            no  no  no       8  0

或者,您也可以使用pdf-reader 中的此脚本

于 2013-05-16T17:09:48.993 回答
3

我这样做的方法是将所有字体放入lib/assets/fonts.

将这些行添加到config/application.rb

config.assets.paths << Rails.root.join('lib', 'assets', 'fonts')
config.assets.precompile += %w(.svg .eot .woff .ttf)

然后,我将字体包含在样式表中lib/assets/stylehseets/fonts.css,对于每种字体,请执行以下操作:

@font-face {
  font-family: 'AvenirLTStd-Black';
  src: font-url('avenirltstdblack.eot');
  src: font-url('avenirltstdblack.eot?#iefix') format('embedded-opentype'),
  font-url('avenirltstdblack.woff') format('woff'),
  font-url('avenirltstdblack.ttf') format('truetype'),
  font-url('avenirltstdblack.svg#avenirltstdblack') format('svg');
  font-weight: normal;
  font-style: normal;
}

并将该文件包含在app/assets/stylesheets/application.css

*= require fonts

在您的应用程序 css (scss) 中,您可以使用:

font-family: 'AvenirLTStd-Black';

然后只需重新编译资产$ rake assets:precompile并重新部署。让我知道这是否适合您,可能像我几个月前所做的那样错过了一步!

于 2013-05-16T17:08:53.527 回答
0

这篇文章似乎指出了一种在 Heroku 中使用自定义字体的方法

http://www.mobalean.com/blog/2011/08/02/pdf-generation-and-heroku

简短的回答是您可以:

  1. 通过 GIT checkin 将它们添加到远程文件系统
  2. 使用 Ruby 创建$HOME/.font目录(如果它不存在)
  3. 使用 Ruby 为文件夹中的每个字体文件创建一个符号链接,$HOME/.font指向它们在文件系统中的托管位置(同样,如果这些文件尚不存在)
  4. 瞧!
于 2013-08-31T15:13:38.313 回答