我正在使用 wkhtmltopdf 来转换PDF格式的HTML文件;它提供了出人意料的好结果,完全像WebKit所做的那样渲染PDF。
我使用 Google Web Fonts 是为了让用户可以自定义他们编辑的文档的外观,让他们可以在几种字体之间进行选择。它在浏览器中也能完美地工作。
问题是,我没有得到谷歌字体工作时,这样的HTML文件转换为PDF与wkhtmltopdf。我读到其他人也有同样的 issue 。
有人能帮我解决这个问题吗?
字体编辑:直接在CSS中声明@ - 也不起作用。
确保没有在打印样式表中声明打印使用的字体。
我遇到了同样的问题,并通过下载字体并使用以下font-face声明从我的web服务器的本地文件中运行它来解决它:
@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
不能在PDF中嵌入woff字体,所以默认使用sans-serif。通过声明所有这些,就包含了TrueType字体,这正是PDF实际使用的字体。
此外,您需要定义您想要使用的字体作为任何字体系列CSS定义中的第一个字体,否则wkhtmltopdf将忽略它。
一个简单的解决方案:base64-编码您的字体并将其嵌入到CSS中:
@font-face {
font-family: 'OpenSans';
src: url(data:font/truetype;charset=utf-8;base64,AAEAAAATAQA...
}
谷歌可以通过其 Webfont Generator 的高级选项为你做到这一点;FontSquirrel和其他字体可以编码为 with this tool 。
我在
pdfkit
和
wicked_pdf
中使用过这个解决方案,它们通过wkhtmltopdf工作,所以我认为这也应该适用于本机
wkhtmltopdf
。
我必须尝试无数的变化才能得到这项工作(从本地)。我正在尝试通过WKHtmlToPdf将Open Sans压缩嵌入到pdf中。
我认为直接从google下载并安装Open Sans Condensed ttf并安装它是很重要的。在安装后重新启动以允许访问其他服务也很重要。我最初从font-squirrel下载了ttf,并且condensed在windows/fonts中被列为"Open Sans“,这是错误的,如果你看了谷歌安装,它被列为"Open 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');}
要使用
wkhtmltopdf
将HTML转换为PDF,请尽量避免使用
woff
字体。使用
Google Web Fonts
的
base64
编码的
truetype
格式。
最近,我尝试使用Google web字体中的Google Web字体。在浏览器中它可以正确显示,但在将HTML转换为PDF后不显示。
经过广泛的网络搜索,我终于找到了将字体编码成
base64
格式的工具,也得到了适用于
@font-face
的CSS。
阅读解决方案 here 。