使用wkhtmltopdf的自定义字体

fko*_*ler 30 css fonts wkhtmltopdf

我正在尝试使用wkhtmltopdf生成的PDF中使用自定义字体.我读到你不能使用谷歌webfonts和wkhtmltopdf使用truetype .ttf文件.任何人都可以证实吗?所以我从google webfont下载了一个.ttf文件并放入我的服务器,然后使用了字体:

    @font-face {
        font-family: Jolly;
        src: url('../fonts/JollyLodger-Regular.ttf') format('truetype');
    }
Run Code Online (Sandbox Code Playgroud)

和字体系列:

    <style type = "text/css">
        p { font-family: 'Jolly', cursive; }
    </style>
Run Code Online (Sandbox Code Playgroud)

现在,应该使用Jolly Lodger字体呈现的文本根本不显示,页面为空白.

我究竟做错了什么?

PS:我试过不同的.ttf文件.

Dal*_*jit 21

由于它是Google Web字体,因此您无需@font-face在样式表中编写,只需在源代码中使用以下链接标记即可:

<link href='http://fonts.googleapis.com/css?family=Jolly+Lodger' rel='stylesheet' type='text/css'>
Run Code Online (Sandbox Code Playgroud)

 <style type = "text/css">
    p { font-family: 'Jolly Lodger', cursive; }
</style>
Run Code Online (Sandbox Code Playgroud)

将工作.

顺便说一句,在您的代码中,您将@font-face系列定义为font-family: Jolly;并使用它p { font-family: 'Jolly Lodger', cursive; }是错误的,因为它与字体系列名称不匹配.

  • 我没有故意使用链接标签,因为我读到 wkhtmltopdf 在直接从 google webfonts 检索字体时不起作用。这就是我下载字体并将其包含在我的项目中的原因。但是,当我在 html 页面中使用字体时,使用该标签效果很好。您说得对,我的代码中有错误,我将对其进行编辑,但即使名称匹配,该字体仍不会出现在 pdf 文件中。我尝试使用 ttf 文件和 otf 文件。 (4认同)
  • 对我来说不起作用,对于 Linux 0.12.2.1 上的 wkhtmltopdf (也不在 MacOS 上) (2认同)

Bez*_*nga 18

我打赌你使用IIS从web包装器调用wkhtmltopdf.这就是为什么有些人说它确实适合他们.他们可能从命令行调用wkhtmltopdf,在这种情况下,它可以解析CSS URL()中的相对链接,但是如果你是从snappy等调用它,你可以通过指定一个URL来解决问题URL('http://localhost/myfolder/fonts/JollyLodger-Regular.ttf').

无法正确解析CSS URL()标记中的相对链接似乎在wkhtmltopdf 0.11.0_rc1中被破坏,但某些早期版本可能正常工作.其他CSS URL()标记也会出现同样的问题,例如调用背景图像时 - 解析文件位置会被破坏.有趣的是,在图像的情况下,如果使用<IMG SRC=>,0.11.0_rc1能够找到该文件,即使提供了相对路径.问题似乎仅限于CSS中的URL()标记.

编辑:我发现,如果你使用路径中的file:///所有斜杠,那么它的工作原理.换句话说URL('file:///D:/InetPub/wwwroot/myfolder/fonts/JollyLodger-Regular.ttf')应该工作.

  • 谢谢。`file://` URL 似乎是带有本地字体和字体的东西。例如 Linux 上的 `url(file:///my/dir/font.ttf)`。我错误地尝试了`local()`,但我认为这是为了引用没有路径的字体(在安装的字体目录之外)。 (2认同)

tgk*_*tgk 10

如上所述通过Yardboy我们发现,编码在我们的CSS TrueType字体的base64效果很好.但我想分享一些额外的见解.

我们使用4个自定义字体'Light' 'Medium'等唯一命名的字体.

我使用openssl工具包进行base64编码,效果很好.但你也可以使用fontsquirrel.请务必删除所有其他字体类型('woff' 'otf'..).我们发现使用truetype神秘的工作.

编码文件,修剪输出并添加到剪贴板

openssl base64 -in bold.ttf | tr -d '\n' | pbcopy
Run Code Online (Sandbox Code Playgroud)

在Windows中,您应该安装openssl并将其添加到路径

openssl base64 -in bold.ttf | tr -d '\n' | clip
Run Code Online (Sandbox Code Playgroud)

或者只是使用这种网站

添加到css font src属性

   @font-face {
      font-family: 'Bold';
      font-style: normal;
      font-weight: normal;
      src: url(data:font/truetype;charset=utf-8;base64,BASE64...) format("truetype");
    }
Run Code Online (Sandbox Code Playgroud)

渲染输出取决于您的wkhtmltopdf版本和风格.因为我们的服务器运行Debian并且我在OSX上开发,所以我在本地VM上进行了测试.


Pro*_*nja 5

如果您有.ttf文件或.woff文件,请使用以下语法

@font-face {
   font-family: 'Sample Name';
   src: url(/PathToFolderWhereContained/fontName.ttf) format('truetype');
   }
Run Code Online (Sandbox Code Playgroud)

不要使用ttf那将不起作用,而是使用全名'truetype';如果您使用.woff,则使用'woff'格式。就我而言,它奏效了。

但是,最佳做法是使用指向Google字体API的链接,如果未获得与您的条件匹配的链接,则最好使用该技术