Laravel DomPDF Google字体未加载

时间:2017-05-16 14:23:00

标签: php laravel dompdf

尝试将Google字体与Laravel DomPDF 0.7。*一起使用,但我很难让它们显示出来。事实上,我无法使用任何自定义字体,而不仅仅是Google字体。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <link href="https://fonts.googleapis.com/css?family=Caveat" rel="stylesheet">
        <style type="text/css">

            .signature {
                font-family: 'Caveat', cursive !important;
                font-size: 30px;
            }
        </style>
    </head>

    <body>
        <p class="signature">Name</p>
    </body>
</html>

这就是显示的内容,它应该是手写字体。

enter image description here

dompdf.php配置文件中,字体目录和字体缓存都是可写的。

"DOMPDF_FONT_DIR" => storage_path('app/tmp/'), 
"DOMPDF_FONT_CACHE" => storage_path('app/tmp/'),

这是控制器代码:

public function download(Request $request, string $contractKey)
{
    $item = Item::findOrFail($contractKey);

    $body = @$item->contract;

    $pdf = PDF::loadView('pdf.contract', [
        'body'  => $this->cleanContract($body),
        'docId' => md5($item->id),
        'item'  => $item,
        'ip'    => $ip = @$request->ips()[1] ?: $request->ip(),
    ]);

    $pdf->output();
    $dom_pdf = $pdf->getDomPDF();

    $canvas = $dom_pdf->get_canvas();
    $canvas->page_text($canvas->get_width() - 70, $canvas->get_height() - 30, "Page {PAGE_NUM} of {PAGE_COUNT}", null, 10, [0, 0, 0]);


    return $pdf->stream();
}

1 个答案:

答案 0 :(得分:0)

字体位置答案

我只能通过在我的服务器上使用字体来实现这一点。

你需要告诉DomPDF字体在哪里。

public function download(Request $request, string $contractKey)
{
    $item = Item::findOrFail($contractKey);

    $body = @$item->contract;

    $pdf = PDF::loadView('pdf.contract', [
        'body'  => $this->cleanContract($body),
        'docId' => md5($item->id),
        'item'  => $item,
        'ip'    => $ip = @$request->ips()[1] ?: $request->ip(),
    ]);

    $pdf->output();
    $dom_pdf = $pdf->getDomPDF();

    // set font dir here
    $dom_pdf->set_option('font_dir', storage_path('fonts/'));

    $canvas = $dom_pdf->get_canvas();
    $canvas->page_text(
        $canvas->get_width() - 70, 
        $canvas->get_height() - 30, 
        "Page {PAGE_NUM} of {PAGE_COUNT}", null, 10, [0, 0, 0]);    
    return $pdf->stream();
}

将字体下载到storage/fonts

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
   "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <style type="text/css">

            .signature {
                font-family: 'Caveat', cursive;
                font-size: 30px;
            }
        </style>
    </head>

    <body>
        <p class="signature">Name</p>
    </body>
</html>

我使用DOMPDF Wrapper for Laravel 5将其与Laravel集成。这很容易。

错字回答

您需要从!important移除'Caveat', cursive; !important;,然后查看jsfiddle。还有一个额外的分号。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
  http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <link href="https://fonts.googleapis.com/css?family=Caveat" rel="stylesheet">
        <style type="text/css">

            .signature {
                font-family: 'Caveat', cursive;
                font-size: 30px;
            }
        </style>
    </head>

    <body>
        <p class="signature">Name</p>
    </body>
</html>