1:第一種方法:
主要使用PHP的擴展 【 “spatie/browsershot”: “3.57”】
使用這個擴展生成PDF需要環境安裝以下依賴
1.1:NPM【版本:9.2.0】
1.2:NODE【版本:v18.19.1】
1.3:puppeteer【npm install -g puppeteer】
下面是示例代碼:示例是腳本生成pdf的方法;
擴展也可以是接口形式直接輸出給瀏覽器生成pdf,這種,方式不需要安裝依賴。
use console\base\ConsoleBaseController;
use Spatie\Browsershot\Browsershot;class PtdfController extends ConsoleBaseController
{public function actionIndex(){$html = 'html代碼';$savePath = __DIR__ . '/../../runtime/';$fileName = realpath($savePath)."/20250526.pdf";$browsershot = Browsershot::html($html); // 如果是URL頁面,則使用 Browsershot::url()// 配置PDF輸出選項$browsershot->setOption('format', 'A4') // 設置紙張大小->setOption('margin', ['top' => '20px', 'right' => '20px', 'bottom' => '20px', 'left' => '20px']) // 設置頁邊距->showBackground() // 顯示背景圖形->waitUntilNetworkIdle() // 等待網絡空閑后截圖->save($fileName); // 保存PDF到指定路徑echo "PDF has been saved to {$fileName}";}
}
2:第二種方法:TCPDF
主要使用擴展【“tecnickcom/tcpdf”: “6.3.5”】
這個擴展主要問題是默認不支持使用中文,需要自己下載支持中文的ttf文件轉換。具體步驟如下
2.1:安裝tecnickcom/tcpdf
composer require tecnickcom/tcpdf:6.3.5
2.2:下載ttf文件【平臺不支持上傳,自己隨便上網搜的下載一個就行】
STSong.ttf【最好是將這個文件放到下載好的擴展下面,我的是在
vendor/tecnickcom/tools
這個目錄下面有一個文件:tcpdf_addfont.php文件,這個文件是用來生成TCPDF需要的字體工具,執行下面命令【到vendor/tecnickcom/tools目錄下面運行】,命令會在目錄【vendor/tecnickcom/fonts】下,自動生成一個對應的文件 stsong.php
php tcpdf/tools/tcpdf_addfont.php -b -t CID0CS -i STSsong.ttf
3:開始下載pdf
$pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);// 設置文檔信息$pdf->SetCreator(PDF_CREATOR);$pdf->SetAuthor('anson');$pdf->SetTitle('TCPDF Example 001');$pdf->SetSubject('TCPDF Tutorial');$pdf->SetKeywords('TCPDF, PDF, example, test, guide');// 移除默認的頁眉和頁腳$pdf->setPrintHeader(false);$pdf->setPrintFooter(false);// 添加一頁$pdf->AddPage();// 設置字體-這個是自己下載的中文字體$pdf->SetFont('stsong', '', 12);// 添加文本$text = '<h1>Hello World</h1><p>你好</p>';$pdf->writeHTML($text, true, false, true, false, '');// 添加圖片
// $image_file = 'path/to/your/image.jpg'; // 替換為實際圖片路徑
// $pdf->Image($image_file, 15, 140, 75, 113, 'JPG', '', 'T', false, 300, '', false, false, 0, false, false, false);// 輸出PDF文檔$pdf->Output('example_001.pdf', 'I'); // 'I'表示直接在瀏覽器中打開PDF文件
3:第三種方法:MPDF
這個擴展安裝,需要安裝其他依賴,這個安裝的時候,會提示出來,自己根據情況安裝依賴就行,但是 mbstring 和 gd依賴是必須安裝的
3.1:安裝
composer require mpdf/mpdf: "^8.2"
3.2:下載中文字體ttf文件直接放到目錄下就支持中文了【/vendor/mpdf/mpdf/ttfonts/STSong.ttf】
3.3:生成pdf
// 創建一個新的mPDF實例$fontDir = realpath(__DIR__ . '/../../vendor/mpdf/mpdf/ttfonts/');// 字體路徑$mpdf = new Mpdf(['mode' => 'UTF-8','format' => 'A4','fontDir' => $fontDir,'fontdata' => ['msyh' => ['R' => 'STSong.ttf','B' => 'FreeMono.ttf',]],'default_font' => 'msyh',]);
// $mpdf->setBorder()$html = '<h1>Hello World</h1><p>你好</p>';// 將HTML內容寫入PDF對象$mpdf->WriteHTML($html);// 輸出PDF文件給用戶下載,或者直接在瀏覽器中打開$mpdf->Output('hello_world.pdf', 'D'); // 'D' 參數表示下載文件
注意:目前不管用那種方式都不能完全支持所有的css樣式,都需要自己調試