Dompdf 并设置不同的字体系列

2022-08-30 12:25:13

在生成PDF时,它完全忽略了我应用于CSS的属性。它没有说Verdana,而是使用Times New Roman。所以我的CSS看起来像这样:font-family

.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支持与底层R&OS PDF类相同的字体:类型1(.pfb)和TrueType(.ttf),只要字体指标(.afm / .ufm)可用。捆绑的、基于 PHP 的 php-font-lib 支持加载和子集化字体。

加载字体的过程因您的需求和服务器访问而异。有三种方法可以加载字体:

  1. 使用 CSS @font规则在运行时加载字体。
  2. 在命令行中使用 dompdf/load_font.php。
  3. 浏览到包含的管理站点中的 dompdf/www/fonts.php。

使用 CSS @font规则在运行时加载字体

无需命令行访问。只要您要加载的字体可以在线使用,您就可以通过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 wiki(Unicode How-ToAbout Fonts and Character Encoding)和其他来源。


答案 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中的webfont一样使用它:

<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>

并在php中制作pdf:

require_once 'lib/dompdf/autoload.inc.php';

use Dompdf\Dompdf;

// instantiate and use the dompdf class
$dompdf = new Dompdf();
$dompdf->loadHtml($html, 'UTF-8');

// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4');

$dompdf->set_option('defaultMediaType', 'all');
$dompdf->set_option('isFontSubsettingEnabled', true);

// Render the HTML as PDF
$dompdf->render();

编辑:我做了一篇关于如何使用dompdf和应用自定义字体的博客文章,以便事情可以更详细:https://www.blog.lab21.gr/using-domdpf-create-pdf-php


推荐