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 обеспечивает поддержку загрузки и установки шрифтов.

Процесс загрузки шрифта варьируется в зависимости от ваших потребностей и доступа к серверу. Вы можете загрузить шрифт тремя способами:

  1. Используйте правила CSS @font-face для загрузки шрифта во время выполнения.
  2. Из командной строки используйте dompdf/load_font.php.
  3. Перейдите на 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 не включает в себя все, а также есть очень плохая документация.

Так что вам придется:

  1. загрузите файл load_font.php и поместите его в корневой каталог вашего проекта: curl -o load_font.php https://raw.githubusercontent.com/dompdf/utils/master/load_font.php

  2. затем откройте load_font.php в вашем редакторе и укажите правильный путь к вашему autoload.inc.php, например require_once 'lib/dompdf/autoload.inc.php';

  3. Откройте командную строку, перейдите в корневую папку вашего проекта и запустите утилиту с именем регистрируемого шрифта и путем к файлу 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 в своем браузере, вы можете найти новый раздел шрифтов в нижней части страницы (вы можете видеть на изображении) install new fonts (однако, я переместил мой роквелл .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();