Dompdf и установить разные шрифты
При создании PDF он полностью игнорирует мой атрибут font-family
, применяемый к моему CSS. Вместо Verdana он использует Times New Roman. Итак, мои CSS выглядят так:
.sub-header {
font-size: 1.4rem;
text-transform: uppercase;
font-family: NeutraText-Book !important;
padding-bottom: 1.5rem;
}
PDF создается следующим образом:
$pdf = PDF::loadHTML($view);
return $pdf->stream();
Как установить шрифт, который я хочу?
Ответы
Ответ 1
Документы PDF внутренне поддерживают следующие шрифты: Helvetica, Times-Roman, Courier, Zapf-Dingbats и Symbol (все используют кодировку Windows ANSI). dompdf будет встраивать любой ссылочный шрифт в PDF, если он был предварительно загружен или доступен для dompdf и ссылается в правиле CSS @font-face
. Процесс загрузки необходим для получения метрик шрифта, используемых для настройки типа.
dompdf поддерживает те же шрифты, что и базовый класс PDF R & OS: Type 1 (.pfb) и TrueType (.ttf), если доступны метрики шрифта (.afm/.ufm). Связанный php-font-lib на основе PHP обеспечивает поддержку загрузки и установки шрифтов.
Процесс загрузки шрифта варьируется в зависимости от ваших потребностей и доступа к серверу. Вы можете загрузить шрифт тремя способами:
- Используйте правила CSS @font-face для загрузки шрифта во время выполнения.
- Из командной строки используйте dompdf/load_font.php.
- Перейдите на dompdf/www/fonts.php на прилагаемом сайте администратора.
Используйте правила CSS @font-face для загрузки шрифта во время выполнения
Доступ к командной строке не требуется. Пока шрифт, который вы хотите загрузить, доступен онлайн, вы можете легко загрузить его с помощью CSS.
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: normal;
src: url(http://themes.googleusercontent.com/static/fonts/opensans/v8/cJZKeOuBrn4kERxqtaUH3aCWcynf_cDxXwCLxiixG1c.ttf) format('truetype');
}
Из командной строки используйте dompdf/load_font.php
Если у вас есть доступ к командной строке, тогда загрузить шрифт так же просто, как:
[php] load_font.php "NeutraText-Book" /path/to/neutratext.ttf
Запустите команду без параметров, чтобы увидеть текст справки. Быстро, однако, параметры: имя шрифта, файл нормального шрифта, файл полужирного шрифта, файл курсивного шрифта, файл шрифта полужирного курсива
Перейдите на dompdf/www/fonts.php на прилагаемом сайте администратора
Самоочевидный (образец). Единственное, что вам нужно сделать, это убедиться, что вы изменили комбинацию имени пользователя и пароля администратора
Примечание: load_font.php и сайт администратора не будут включены по умолчанию, начиная с dompdf 0.7.0
Адаптировано из вики dompdf (Unicode How-To, О шрифтах и кодировке символов) и других источников.
Ответ 2
У меня похожая проблема, и я искал решение в течение 2 дней... В новой версии принятый ответ больше не работает.
@Jay-Bienvenu ответ правильный. Новая версия DomPDF не включает в себя все, а также есть очень плохая документация.
Так что вам придется:
-
загрузите файл load_font.php и поместите его в корневой каталог вашего проекта: curl -o load_font.php https://raw.githubusercontent.com/dompdf/utils/master/load_font.php
-
затем откройте load_font.php в вашем редакторе и укажите правильный путь к вашему autoload.inc.php, например require_once 'lib/dompdf/autoload.inc.php';
-
Откройте командную строку, перейдите в корневую папку вашего проекта и запустите утилиту с именем регистрируемого шрифта и путем к файлу TFF, например php load_font.php SourceSansPro./pathToYourFolder/lib/dompdf/SourceSansPro-Regular.ttf./pathToYourFolder/lib/dompdf/SourceSansPro-Bold.ttf
Теперь шрифт установлен. Вы можете использовать его, как обычно, как веб-шрифт в HTML:
<html>
<head>
<meta http-equiv="Content-Type" content="charset=utf-8" />
<style type="text/css">
@page {
margin: 0;
}
* { padding: 0; margin: 0; }
@font-face {
font-family: "source_sans_proregular";
src: local("Source Sans Pro"), url("fonts/sourcesans/sourcesanspro-regular-webfont.ttf") format("truetype");
font-weight: normal;
font-style: normal;
}
body{
font-family: "source_sans_proregular", Calibri,Candara,Segoe,Segoe UI,Optima,Arial,sans-serif;
}
</style>
</head>
<body>
Your code here ....
</body>
</html>
Ответ 3
Dompdf О шрифтах и кодировке символов говорит, что утилита шрифта включена, но не говорит вам, как ее получить и запустить. Вот как:
-
Загрузите load_font.php в корневую директорию вашего проекта. curl -o load_font.php https://raw.githubusercontent.com/dompdf/utils/master/load_font.php
-
Откройте файл load_font.php с помощью текстового редактора (например, vim). Измените require_once "autoload.inc.php";
на require_once "vendor/autoload.php";
-
Запустите утилиту с именем шрифта, который вы регистрируете, и укажите путь к файлу TFF. Например: php load_font.php 'Brush Script MT' https/fonts/brush-script-mt.ttf
Для получения дополнительной информации о том, как использовать эту команду, прочитайте код load_font.php.
Ответ 4
Вам нужно, чтобы шрифт загружался в DomPDF. Чтобы узнать подробности, эту страницу.
Ответ 5
Спасибо за ответ от Brians выше, но в моем случае работает только один параметр, который заключается в установке шрифта с использованием "dompdf/www/fonts.php"
он установил шрифт
Просмотр на dompdf/www/fonts.php на включенном сайте администратора. (это будет что-то вроде http://yoursite.com/sites/all/modules/print/lib/dompdf/www/fonts.php)
Внизу страницы и нажмите ссылку
[Authenticate to access this section][1]
появляется предупреждение: "пароль должен быть изменен в dompdf_config.custom.inc.php".
- Перейдите в файл dompdf_config.custom.inc.php и добавьте имя пользователя и
пароль в нижней части файла. ты можешь найти
"DOMPDF_ADMIN_USERNAME" и "DOMPDF_ADMIN_PASSWORD". раскомментировать эти
2 строки и добавьте имя пользователя и пароль для установки шрифта.
-
Теперь снова нажмите [Authenticate to access this section][2]
, он спрашивает
для имени пользователя и пароля. введите имя пользователя пользователя и пароль, которые вы указали на первом шаге.
-
если вы снова просмотрите один и тот же путь fonts.php в своем браузере, вы можете найти новый раздел шрифтов в нижней части страницы (вы можете видеть на изображении)
(однако, я переместил мой роквелл .ttf и rockwell.afm файлы в папку шрифтов, а затем я установил здесь)
-
выберите нужный файл ttf шрифта, а затем установите его. он установлен и отображается в установленных шрифтах, но это не сработало для меня. поэтому мне пришлось создать файл .afm для моего нового шрифта (здесь я хотел использовать шрифт Rockwell)
шаги, которые я сделал для создания файла rockwell.afm.
1
Я сделал это как dompdf другие 14 родных шрифтов, я не уверен, насколько это приемлемо. но это сработало для меня. Я просто хотел сделать это.
-
Я добавил свой шрифт rockwell, где когда-либо я нашел собственные имена шрифтов dompdf в php файлах
-
Добавлен массив "rockwell" в массив public static $native_fonts
в файле dompdf/include/dompdf.cls.php
- Добавлен массив "rockwell" в
dompdf/lib/fonts/dompdf_font_family_cache.dist.php файл, как показано ниже ![adding rockwell array]()
вот оно. он создал файл rockwell.afm для меня вроде этого ![rockwell afm file]()
-
просто используйте любую семейство шрифтов, которую вы хотите использовать, например
body {
font-family: 'rockwell';
font-size:10;
}
Ответ 6
Вам нужно использовать библиотеку dompdf для создания PDF с определенным семейством шрифтов.
$html ='<!doctype html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>';
$html.='</head><body>';
$html.="<style>
@font-face { font-family: 'Roboto Regular'; font-weight: normal; src: url(\'fonts/Roboto-Regular.ttf\') format(\'truetype\'); }
@font-face { font-family: 'Roboto Bold'; font-weight: bold; src: url(\'fonts/Roboto-Bold.ttf\') format(\'truetype\'); }
body{ font-family: 'Roboto Regular', sans-serif; font-weight: normal; line-height:1.6em; font-size:17pt; }
h1,h2{ font-family: 'Roboto Bold', sans-serif; font-weight: bold; line-height:1.2em; }
</style>";
$html.='test <br>
<span style="font-family:\'Open Sans\'"> test </span> <br> ';
$html.= '</body></html>';
$dompdf = new Dompdf\Dompdf();
$dompdf->load_html($html,'UTF-8');
$dompdf->set_paper('A4', 'portrait');
$dompdf->render();
$dompdf->stream();