使用wkhtmltopdf从HTML生成Google Web字体和PDF
我正在使用wkhtmltopdf来转换PDF格式的HTML文件; 它给出了令人惊讶的好结果,完全按照WebKit所做的那样呈现PDF。
我使用Google Web字体让用户可以自定义他们编辑的文档的出现,为他们提供在几种字体之间进行select的可能性。 它也可以在浏览器中正常工作。
问题是,使用wkhtmltopdf将这些HTML文件转换为PDF时,我无法使用Google字体。 我读过其他人有同样的问题 。
任何人都可以帮我解决这个问题吗?
编辑 :直接在CSS中声明@ font-face不起作用。
要通过wkhtmltopdf
将HTML转换为PDF, wkhtmltopdf
尽量避免使用woff
字体。 使用带有base64
编码的Google Web Fonts
的truetype
格式。
最近我尝试从Google Web Fonts使用Google网页字体。 在浏览器中,它显示正确,但是在将HTML转换为PDF后不显示。
在广泛searchnetworking之后,我终于find了将字体编码为base64
格式的工具,同时还获得了@font-face
CSS。
在这里阅读解决scheme。
一个简单的解决scheme:Base64-编码你的字体并embedded到CSS中:
@font-face { font-family: 'OpenSans'; src: url(data:font/truetype;charset=utf-8;base64,AAEAAAATAQA... }
FontSquirrel可以通过Webfont Generator的高级选项来完成这个任务 ; 谷歌和其他字体可以用这个工具编码。
我已经使用了pdfkit
和wicked_pdf
这个解决scheme,通过wkhtmltopdf工作,所以我认为这应该与原生wkhtmltopdf
一起工作。
我有这个相同的问题,解决了这个问题,下载字体并使用这个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上find这个字体,但是你的里程可能会有所不同。
我认为Google的字体会发生什么变化,它只是试图加载它认为这个浏览器需要的格式,对于WebKit来说,这个格式是woff(我相信)。 但是wkhtmltopdf
不能在PDF中embeddedwoff字体,所以默认返回sans-serif。 通过声明所有这些,包含TrueType字体,这是PDF实际使用的。
另外,你需要定义你想用的字体作为任何字体系列CSS定义中的第一个字体,否则wkhtmltopdf将忽略它。
我必须尝试一个巨大的变化来获得这项工作(从本地)。 我正试图通过WKHtmlToPdf将Open Sans Condensedembedded到pdf中。
我认为重要的是你直接从谷歌下载并安装Open Sans Condensed ttf并安装它。 安装后允许其他服务访问也是重要的。 我原来下载了字体松鼠的ttf,而且浓缩在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');}
我刚刚testing过使用@import
符号工作:
<style> @import 'https://fonts.googleapis.com/css?family=Montserrat'; </style>
我正在使用django-wkhtmltopdf版本2.0.3
确保你没有在你的打印样式表中声明你正在打印的字体。
我已经为此挣扎了两天了,如果上面的答案都不适合你,我的build议是:
在托pipenetworking服务器的机器上安装字体(ttf),只需要在css中使用,就像使用普通字体一样。
body{ font-family: 'Lato'; }
现在wkhtmltopdf应该能够包含字体