Dompdf 并设置不同的字体系列

新手上路,请多包涵

生成 PDF 时,它完全忽略了应用于我的 CSS 的 font-family 属性。它没有说 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();

如何设置我想要的字体?

原文由 John 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

PDF 文档内部支持以下字体:Helvetica、Times-Roman、Courier、Zapf-Dingbats 和 Symbol(均使用 Windows ANSI 编码)。 dompdf 将在 PDF 中嵌入任何引用的字体,只要它已预先加载或可由 dompdf 访问并在 CSS @font-face 规则中引用。为了生成用于类型设置的字体度量,加载过程是必要的。

dompdf 支持与底层 R&OS PDF 类相同的字体:Type 1 (.pfb) 和 TrueType (.ttf),只要字体规格 (.afm/.ufm) 可用。捆绑的、基于 PHP 的 php-font-lib 支持加载和子设置字体。

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

  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

不言自明( 示例)。您唯一需要做的就是确保您已修改管理员用户名/密码组合


_注意:从 dompdf 0.7.0 开始,默认不包含 loadfont.php 和管理站点

改编自 dompdf wiki( Unicode How-ToAbout Fonts and Character Encoding )和其他来源。

原文由 BrianS 发布,翻译遵循 CC BY-SA 3.0 许可协议

我在实现自定义字体时遇到了很多困难。

我找到了一个简单且有效的解决方案。所有学分转到 https://peterdev.pl/how-to-set-a-font-in-pdf/

如果您使用 composer 安装了 dompdf,那么您就是这样做的:

 $html = '<style type="text/Css">
      @font-face {
         font-family: "Muli";
         font-style: normal;
         font-weight: normal;
      }

      div{
         font-family: "Muli";
      }
   </style>

    <div>My PDF File in Muli</div>';

$fontDirectory = '/var/www/html/fonts'; //change to the diretory where you fonts is located on your server
$options = new Dompdf\Options();
$options->setChroot($fontDirectory);

$dompdf = new Dompdf\Dompdf($options);
$dompdf->getFontMetrics()->registerFont(
        ['family' => 'Muli', 'style' => 'normal', 'weight' => 'normal'],
        $fontDirectory . '/muli-v20-latin-regular.ttf'
); // you have to set the style (e.g. italic) and weight (e.g. bold)
$dompdf->loadHtml($html);
$dompdf->render();

Dompdf 会将字体保存到此目录:

供应商/dompdf/dompdf/lib/字体

您的脚本需要对该目录的写入权限(chmod 775 和 chown www-data:www-data 应该可以工作)。

而已。希望它也对你有用:)

原文由 hansrouge 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题