如何在 DomPDF 中正确嵌入 Google 字体?打印时中断

Posted

技术标签:

【中文标题】如何在 DomPDF 中正确嵌入 Google 字体?打印时中断【英文标题】:How to properly embed a Google Font in DomPDF? Breaks when printed 【发布时间】:2022-01-12 14:15:26 【问题描述】:

我尝试使用以 Open Sans 作为字体的 DomPDF (v1.0.2) 生成 PDF。

我直接从 Google Fonts 加载 Open Sans(应该根据 DomPDF 文档工作),生成的 PDF 似乎没问题。

打印时出现问题,显然字体没有正确嵌入,打印时会破坏字体。

简化代码示例:

$pdf = new Dompdf(new Options([
    'defaultPaperSize'          => 'a4',
    'defaultPaperOrientation'   => 'portrait',
    'isRemoteEnabled'           => true,
    'allowUrlFopen'             => true,
    'ishtml5ParserEnabled'      => true
]));

$pdf->loadHtml('
    <link href="https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,600;0,700;1,400;1,600&display=swap" rel="stylesheet">
    <style>
        span 
            font-family: "Open Sans", sans-serif;
        
    </style>
    <body>
        <span>This should be in Open Sans</span>
    </body>
');
$pdf->render();
$pdf->stream();

在屏幕上:

印刷:

【问题讨论】:

【参考方案1】:

想通了,问题是 DomPDF 没有正确检测到使用的字体样式,这导致它创建了一个不完整的子集。

将此添加到选项中解决了问题:

'isFontSubsettingEnabled' => false

【讨论】:

以上是关于如何在 DomPDF 中正确嵌入 Google 字体?打印时中断的主要内容,如果未能解决你的问题,请参考以下文章

Dompdf-Laravel Unicode 字符无法正确呈现

codeigniter DOMPDF 显示空白屏幕,没有错误,html 生成正确但 pdf 不生成

DOMPDF 的自定义字体

如何在Drupal 8中使用Dompdf? [关闭]

如何在 dompdf 中应用引导样式

使用 dompdf 的 phpmailer 动态文件