【问题标题】:helvetica font not working in wkhtmltopdfhelvetica 字体在 wkhtmltopdf 中不起作用
【发布时间】:2013-03-22 16:37:12
【问题描述】:

我在创建 pdf 时尝试使用 Helvetica 字体,但该字体未反映在 pdf 中。

我做了一些谷歌,找到了一些解决方案,但没有一个可行。

已尝试解决方案 1

我在这里发现了类似的东西: Font issue

尝试了那里提到的最后一个解决方案

解决方法是在您的 CSS 中定义 @font-face 并拥有 src 链接 到 wkhtmltopdf 可以访问的外部主机

但解决方案不起作用。

已尝试解决方案 2 我也尝试使用google font api,但结果仍然不可行。 helvetica font

这是一个例子 Example of custom font

已尝试解决方案 3 我尝试使用 css 属性 @page 来做到这一点。 但这也行不通。

可行解决方案的方法是什么。

【问题讨论】:

  • 定义@font-face 并链接到外部主机也应该可以工作。不过,声明 @font-face 是不够的,我怀疑您的样式表实际上并未在任何 HTML 元素中使用该字体。在链接到外部主机或将字体编码到样式表后,尝试将您的 CSS 设置为实际使用某些 HTML 标记上的字体:body { font-family: 'Helvetica'; }
  • Padmalochan,你搞定了吗?
  • @Chords 是的,标记为正确的解决方案正在运行。

标签: html css wkhtmltopdf


【解决方案1】:

解决wkhtmltopdf 字体问题的最简单方法是对字体 (you can use this tool) 进行 Base64 编码并将其包含在您的 CSS 中:

@font-face {
    font-family: 'Helvetica';
    src: url(data:font/truetype;charset=utf-8;base64,AAEAAAATAQA...
}

这适用于所有字体(包括 Google 字体),并保证跨不同机器和操作系统的跨平台兼容性。

【讨论】:

【解决方案2】:

对我来说,从 Google 字体加载字体不起作用。对我来说,将 base64ed 二进制文件放入 CSS 文件似乎有点多(韩文类型为几兆字节)。我建议安装您需要在机器上使用的字体。对于 Ubuntu,您只需从 Google Fonts 下载字体文件并将文件复制到 $HOME/.fonts 目录并在命令行中运行 fc-cache 命令即可重建字体列表。

$ mkdir ~/.fonts
$ copy your-font-file.ttf ~/.fonts/
$ fc-cache -fv

对于 Rails 应用程序,您可以符号链接

$ ln -s /your/app/root/assets/fonts ~/.fonts

然后您将能够列出所有可用的字体。

$ fc-list
Nimbus Sans L:style=Regular Italic
URW Palladio L:style=Roman
Century Schoolbook L:style=Bold Italic
Nimbus Sans L:style=Bold
URW Chancery L:style=Medium Italic
Nimbus Roman No9 L:style=Regular
Century Schoolbook L:style=Bold
Century Schoolbook L:style=Italic
Nimbus Sans L:style=Regular
....

【讨论】:

  • 我们使用类似的方法使用 wkhtmltopdf 来处理生产工作负载。安装在我们服务器上的字体非常适合我们。
  • 感谢fc-list 的建议。在我的服务器中找到可用的字体就足够了 :)
  • 这应该是公认的解决方案,base64-ing of fonts 有点小题大做。还应该理解 wkhtmltopdf 正在使用服务器上的字体,因此就像您将 Word 中缺少的字体添加到 PC 或 Mac 一样,您将字体添加到服务器。如果您希望在系统范围内安装 MS 字体,请参阅:unix.stackexchange.com/questions/217365/…
  • 这个解决方案也适用于我(CentOs 7 linux),但有一个修改:似乎 TTF 文件中的“姓氏”属性是问题制造者.因为 linux 匹配了家族名称,所以如果所有字体都具有相同的家族名称(Heebo)。所以我编辑了TTF文件并将家族名称更改为“Hebbo-Light”(使用“Font-Forge”软件,在“元素”菜单>“字体信息”屏幕中 - 我将“家族”属性编辑为使用 dash ,就像在 css 中一样),然后在 linux 上重新安装字体 - 它可以工作!
【解决方案3】:

为了加入战斗,在 linux 上使用 wkhtmltopdf 0.12.1 (with patched qt) 这对我有用:

@font-face {
    font-family: dejaSansMono;
    src: url('file:///usr/share/fonts/dejavu/DejaVuSansMono.ttf');
} 

即,指定.ttf 的路径。简单地命名一个字体系列,任何字体系列,即使在浏览器中也不起作用。

【讨论】:

    【解决方案4】:

    为 linux (x64) 用户扩展 baxangs 答案:您将 ttf 字体文件安装在 /usr/share/fonts/font-folder/font-name 中

    然后在你的 css 文件中使用 fc-list 中列出的字体名,你不需要使用@font-face,只需使用你的 css 中的字体名

    示例 Verdana.ttf======

    从本地机器复制到服务器到 /usr/share/fonts/Verdana/Verdana.ttf

    fc-list 获取字体名称(很可能是 Verdana)

    然后在你的css中使用 P{ font-family: 'Verdana'}

    就是这样!我花了一段时间才把它修好。

    【讨论】:

      【解决方案5】:

      我对来自谷歌的 PT Sans 也有同样的问题。对我有用的是以下过程:

      1. 从谷歌下载 PT Sans 并通过fontsquirrel 运行它 发电机
      2. 将@font-face(我只使用ttf)放在css中(在我的例子中是html 一个php文件的头)

      请注意,我没有使用 base64,它按预期工作。

      希望对你有帮助

      【讨论】:

        【解决方案6】:

        要通过 wkhtmltopdfHTML 转换为 PDF,请尽量避免使用 woff 字体。使用带有 base64 编码的 Google Web 字体的 trutype 格式。

        最近我尝试使用来自 Google Web Fonts 的 google 网络字体。但在浏览器中显示正确,但在将 HTML 转换为 PDF 后不显示。

        然后在网上搜索了很多之后,最后我找到了将字体编码为 base64 编码格式的工具,并且还获得了 @font-face 的 CSS。

        【讨论】:

          猜你喜欢
          • 2019-11-12
          • 1970-01-01
          • 2017-05-08
          • 2021-07-20
          • 1970-01-01
          • 2011-12-28
          • 1970-01-01
          • 2012-12-11
          • 1970-01-01
          相关资源
          最近更新 更多