Веб-шрифты Google и генерация PDF из HTML с помощью wkhtmltopdf
Я использую wkhtmltopdf конвертировать HTML-файлы в формате PDF; это дает удивительно хорошие результаты, рендеринг PDF точно так же, как WebKit.
Я использую Веб-Шрифты Google чтобы дать пользователям возможность настроить внешний вид документа, который они редактировали, предлагая им возможность выбора между несколькими шрифтами. Он также отлично работает в браузере.
проблема в том, что я не получаю шрифты Google при конвертации таких HTML файлов в PDF с помощью wkhtmltopdf. Я читал, что у других людей было то же самое вопрос.
может кто-нибудь помочь мне исправить это?
редактировать: объявление @font-face непосредственно в CSS также не работает.
8 ответов
конвертировать HTML в PDF по wkhtmltopdf
старайтесь избегать woff
шрифт. Используйте на Google Web Fonts
С base64
кодировать.
недавно я попытался использовать веб-шрифт Google из веб-шрифтов Google. В браузере он отображается правильно, но не отображается после преобразования HTML в PDF.
после тщательного поиска в интернете, наконец, я нашел инструменты для кодирования шрифтов в base64
формат, а также получил CSS для @font-face
.
Читать решение здесь.
простое решение: Base64-кодируйте свой шрифт и вставляйте его в CSS:
@font-face {
font-family: 'OpenSans';
src: url(data:font/truetype;charset=utf-8;base64,AAEAAAATAQA...
}
FontSquirrel может сделать это за вас через расширенные возможности их Генератор Webfont; Google и другие шрифты могут быть закодированы С помощью этого инструмента.
я использовал это решение с pdfkit
и wicked_pdf
, которые работают через wkhtmltopdf, поэтому я предполагаю, что это должно работать с родным wkhtmltopdf
как хорошо.
у меня была такая же проблема, и я решил ее, загрузив шрифты и запустив его из локального файла на моем веб-сервере с помощью этого объявления шрифта:
@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;
}
я смог найти этот шрифт на Шрифт Белка, но ваш пробег может варьироваться.
Я думаю, что происходит со шрифтами Google, что он пытается загрузить только формат, который, по его мнению, хочет этот браузер, который для WebKit является woff (я считаю). Но!--1--> не удается вставить шрифт woff в PDF, и поэтому по умолчанию возвращается к sans-serif. Объявляя их все, включается шрифт TrueType, который фактически используется в PDF.
кроме того, вам нужно определить шрифт, который вы хотите использовать в качестве первого в любом определении CSS семейства шрифтов, или wkhtmltopdf просто проигнорирует его.
Я только что протестировал это, используя @import
нотация работает:
<style>
@import 'https://fonts.googleapis.com/css?family=Montserrat';
</style>
Я использую django-wkhtmltopdf версии 2.0.3
Я, должно быть, пробовал gazillion вариаций, чтобы получить эту работу (из местных). Я пытаюсь получить Open Sans Condensed, встроенный в pdf через WKHtmlToPdf.
Я думаю, что важно загрузить и установить Open Sans Condensed ttf непосредственно из google и установить его. Также важно перезагрузиться, чтобы разрешить доступ к другим службам после установки. Я загрузил ttf из font-squirrel первоначально и конденсированный был указан как "Open Sans" в windows / fonts, что неправильно, если вы смотрите после установки google он указан как "Open Sans Condensed Light", так что даже google 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');}
Я боролся с этим около двух дней, мой совет вам, если ни один из ответов выше не работает для вас:
установите шрифт (ttf) на машине, на которой размещен веб-сервер, и просто требуйте его в css так же, как вы сделали бы с общим шрифтом.
body{
font-family: 'Lato';
}
теперь wkhtmltopdf должен иметь возможность включать шрифт
в моем случае мне просто нужно было добавить эту опцию
--javascript-delay 1000
и начал появляться текст шрифта Google.
[wkhtmltopdf 0.12.4 (с исправленным qt)]