问题描述

我使用 wkhtmltopdf 转换为 PDF 格式的 HTML 文件; 它给出了令人惊讶的好结果,正如 WebKit 所做的一样。

我使用 Google Web Fonts 给用户定制其编辑的文档的外观的可能性,为他们提供了选择几种字体的可能性。它也可以在浏览器中完美地工作。

问题是,当使用 wkhtmltopdf 将此类 HTML 文件转换为 PDF 时,我无法使 Google 字体正常工作。我读了其他人都有相同的 issue

有人可以帮我解决这个问题吗?

编辑:直接在 CSS 中声明 @ font-face 也不起作用。

最佳解决方案

要通过 wkhtmltopdf 将 HTML 转换为 PDF,尽量避免使用 woff 字体。使用 Google Web Fontstruetype 格式与 base64 编码。

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

在广泛搜索网页后,最后我发现了将字体编码为 base64 格式的工具,并获得了 @font-face 的 CSS 。

阅读解决方案 here

次佳解决方案

一个简单的解决方案:Base64 编码您的字体并将其嵌入到 CSS 中:

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

FontSquirrel 可以通过他们的 Webfont Generator 的高级选项为您做到这一点; Google 等字体可以编码 with this tool

我已经使用 pdfkitwicked_pdf 这个解决方案,它可以通过 wkhtmltopdf 进行工作,所以我认为这应该与原生的 wkhtmltopdf 一起使用。

第三种解决方案

我遇到了同样的问题,并通过下载字体并将其从我的 Web 服务器中的本地文件运行,并使用该 font-face 声明解决了它:

@font-face {
    font-family: 'PT Sans';
    src: url( '/public/inc/fonts/PTS55F-webfont.eot');
    src: url( '/public/inc/fonts/PTS55F-webfont.eot?#iefix') format('embedded-opentype'),
         url( '/public/inc/fonts/PTS55F-webfont.woff') format('woff'),
         url( '/public/inc/fonts/PTS55F-webfont.ttf') format('truetype');
    font-weight: normal;
    font-style: normal;
}

我能在 Font Squirrel 上找到这个字体,但是里程可能会有所不同。

我认为,谷歌的字体会发生什么,它只是想加载它认为这个浏览器想要的格式,对于 WebKit 而言,它是 woff(我相信) 。但是 wkhtmltopdf 不能将 woff 字体嵌入到 PDF 中,因此默认为 sans-serif 。通过声明所有这些,包含 TrueType 字体,这是 PDF 实际使用的。

另外,您需要在任何 font-family CSS 定义中定义要用作第一个字体的字体,否则 wkhtmltopdf 将忽略它。

第四种方案

我必须尝试一个 gazillion 变体来获得这项工作 (从本地) 。我试图通过 WKHtmlToPdf 将 Open Sans Condensed 嵌入到 pdf 中。

我认为您必须直接从谷歌下载安装 Open Sans Condensed ttf 并进行安装。安装后重新启动以允许其他服务访问也很重要。我原来从 font-squirrel 下载 ttf,并在 Windows /Fonts 中列出了”Open Sans”,这是错误的,如果你照顾 google 安装它被列为 「打开 Sans Condensed Light」,所以即使谷歌的 local('Open Sans Cond Light')脚本是错误的。

如前所述,你需要明确的拉伸和重量,所以这是对我有用的:

    @font-face {
     font-family: 'Open Sans';
     font-style: normal;
     font-weight: 400;
     src: local('Open Sans');
    }

    @font-face {
     font-family: 'Open Sans Condensed';
     font-stretch:condensed;
     font-style: normal;
     font-weight: 300;
     src: local('Open Sans Condensed Light');
    }

@@font-face { font-family: 'Open Sans Condensed Bold'; font-stretch:condensed; font-style: normal; font-weight: 700; src: local('Open Sans Condensed'), local('Open Sans Condensed Bold');}

第五种方案

我刚刚测试过使用 @import 符号工程:

<style>
@import 'https://googlefonts.admincdn.com/css?family=Montserrat';
</style>

我使用的是 django-wkhtmltopdf 2.0.3 版

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛