使用dompdf/dompdf實現生成pdf檔案

huaweichenai發表於2022-12-20

一:dompdf/dompdf地址

github:https://github.com/dompdf/dompdf

packagist:http://packagist.p2hp.com/pac...

二:dompdf/dompdf安裝

composer require dompdf/dompdf

三:dompdf/dompdf簡單例項

$pdf = new \Dompdf\Dompdf();
$content = 'pdf內容';
$pdf->loadHtml($content);
//設定紙張大小和方向
$pdf->setPaper('A4', 'landscape');
$options = new Options();
//設定使用遠端圖片填充pdf內容
$options->setIsRemoteEnabled(true);
$pdf->setOptions($options);
//將html轉為PDF
$pdf->render();
//下載生成的pdf檔案
$pdf->stream('xxx.pdf');

//將生成的pdf儲存到伺服器
file_put_contents('xxx.pdf',$pdf->output());

//將生成的pdf檔案渲染到頁面
$pdf->stream('xxx.pdf', [
    'compress' => 0,
    'Attachment' => 0
]);

四:解決生成的pdf檔案中文亂碼

1:下載字型包安裝指令碼utils

https://github.com/dompdf/utils

2:字型包安裝指令碼處理

將下載下來的安裝指令碼中的load_font.php檔案複製到專案的vender平級目錄下,然後將需要的字型包檔案ttf也放到load_font.php同一級目錄下(例如simsun.ttf)

3:執行字型包安裝指令碼

php load_font.php simsun simsun.ttf

4:修改安裝字型包中的檔案路徑(注意:不操作此項再本機上是正常的,放到伺服器就會有問題了)

找到dompdf\dompdf\lib\fonts\installed-fonts.json檔案,這時候我們就可以看到我們剛剛安裝的字型包

image.png

這裡我們可以看到引入的字型包相關路徑都是本機路徑,我們可以看到 dompdf\dompdf\lib\fonts路徑下存在我們需要的檔案,修改引入路徑即可,如:

image.png

5:html使用字型包樣式即可

body {
    font-family: simsun;
}

根據如上操作我們就可以解決中文亂碼問題

相關文章