1. 基本使用
安裝
1 在項目下composer文件中 添加 "mpdf/mpdf":"~7.1.9" 測試環境為Yii項目 其他框架composer安裝大同小異
"require": { 這里是其它擴展 "mpdf/mpdf":"~7.1.9" },
然后在bash命令行執行
composer update mpdf/mpdf
安裝完畢之后打開mpdf文件夾下這些目錄的寫權限
src/ tmp/ ttfonts/
在controller中使用
use Mpdf\Mpdf; //yii中獲取 html 的方法 PDFHtml為需要轉換的html文件 $data為動態展示的數據 $html = "抓取html頁面作為字符串賦值到$html中使用 例如:<h1>我是html中的一個標題</h1> 可以直接使用file_get_content()獲取";
$mpdf = new Mpdf(); //設置中文字體 $mpdf->autoScriptToLang = true; $mpdf->autoLangToFont = true; $mpdf->WriteHTML($html); //直接展示 $mpdf -> Output(); //保存文件 $mpdf -> Output('路徑和文件名稱.pdf');
2.基本定制化使用
安裝
官方手冊中安裝方法為composer安裝 Packagist php擴展包庫地址 https://packagist.org/packages/mpdf/mpdf
截止到2019年5月 mpdf版本更新到8.0.1>,主要大版本為6~. 7~. 8~
6~版本 php版本要求為5.4-7.0,版本不符會報錯,不需要php擴展依賴
7~版本 php版本要求為5.6- 7.2,需要php擴展支持 gd庫與mbstring庫
8~版本 php版本要求為5.6-7.3,需要php擴展支持 gd庫與mbstring庫,php版本高可以試下。目前官方文檔支持到7.1.
更改目錄權限
7~版本需要打開mpdf文件夾下
src/ tmp/ ttfonts/
的目錄寫權限。
6~版本打開
ttfontdata/ tmp/ graph_cache/
寫權限。
使用
引用方法大版本有明顯差異
//6~版本 use mpdf; $mpdf=new mPDF();
//7~版本 use Mpdf\Mpdf; $mpdf = new mPDF(); $mpdf = new Mpdf();
屬性設置及方法參數
1.輸出方法 Output()
$mpdf = new \Mpdf\Mpdf(); $mpdf->WriteHTML('Hello World'); $name = "路徑和文件名稱.pdf"; 1 直接展示在瀏覽器頁面 $mpdf->Output(); 2 以文件形式保存到服務器 $mpdf->Output( $name ); 3 帶第二個參數 $mpdf->Output( $name , "F"); //服務器保存以$name為名稱的文件 $mpdf->Output( $name , "D"); //瀏覽器下載以$name為名稱的文件 $mpdf->Output( $name , "S"); //以字符串形式返回 $name忽略 $mpdf->Output( $name , "I"); //瀏覽器展示,但當用戶另存為時以$name為默認文件名
2.寫入方法 WriteHTML()
$mpdf->WriteHTML( $html , 0 ); //默認 以html為標准分析寫入內容 $mpdf->WriteHTML( $css , 1 ); //會以style樣式錄入寫入內容 等同於<style></style>標簽中的內容 $mpdf->WriteHTML( $body , 2 ); //會以html body體形式錄入寫入內容 等同於<body></body>標簽內的內容 $mpdf->WriteHTML( $thml , 0 ); //默認 以html為標准
自動分析錄入內容字體
$mpdf->autoScriptToLang = true; $mpdf->autoLangToFont = true;
4.加水印
$mpdf->SetWatermarkImage('../web/static/img/water-min.png',1);//參數一是圖片的位置(圖片相對目錄 為處理腳本的相對目錄),參數二是透明度0.1-1 $mpdf->showWatermarkImage = true;
5.設置頁眉頁腳
//設置PDF頁眉內容 $header='<table width="95%" style="margin:0 auto;border-bottom: 1px solid #4F81BD; vertical-align: middle; font-family:serif; font-size: 9pt; color: #000088;"><tr> <td width="10%"></td><td width="80%" align="center" style="font-size:16px;color:#A0A0A0">頁眉</td> <td width="10%" style="text-align: right;"></td></tr></table>'; //設置PDF頁腳內容 在頁腳html中添加 {PAGENO}/{nb} (當前頁/總頁數) 可添加頁碼 $footer='<table width="100%" style=" vertical-align: bottom; font-family:serif; font-size: 9pt; color: #000088;"><tr style="height:30px"></tr><tr> <td width="10%"></td><td width="80%" align="center" style="font-size:14px;color:#A0A0A0">頁腳</td> <td width="10%" style="text-align: left;">頁碼:{PAGENO}/{nb}</td></tr></table>'; $mpdf->SetHTMLHeader($header); $mpdf->SetHTMLFooter($footer);
6.合並多張PDF
$mpdf = new Mpdf(); $mpdf->SetImportUse();
//單頁pdf導入方式 $pagecount = $mpdf->SetSourceFile('單頁PDF地址'); $tplId = $mpdf->ImportPage(1); $mpdf->UseTemplate($tplId); $mpdf->WriteHTML('');
//多頁pdf導入方式 $pagecount = $mpdf->SetSourceFile('多頁PDF地址'); for ($i=1;$i<=$pagecount;$i++) { $mpdf->AddPage(); $tplId = $mpdf->ImportPage($i); $mpdf->UseTemplate($tplId); $mpdf->WriteHTML(''); } $mpdf->Output($outPut);
7.關於字體設置
//獲取mpdf擴展字體配置文件目錄(此處路徑需要根據項目空間規則修改 例如我的是設置了命名空間 Mpdf為composer use引用所以使用絕對路徑) $defaultConfig = (new \Mpdf\Config\ConfigVariables())->getDefaults(); $fontDirs = $defaultConfig['fontDir']; //獲取mpdf擴展字體配置文件配置信息 $defaultFontConfig = (new \Mpdf\Config\FontVariables())->getDefaults(); $fontData = $defaultFontConfig['fontdata']; $mpdf = new \Mpdf\Mpdf([ 'fontDir' => array_merge($fontDirs, [ __DIR__ ,//此處的路徑為你ttf文件存放目錄 ]), 'fontdata' => $fontData + [ 'msyh' => [ 'R' => 'msyh.ttf',//此處為你從字體網站下載的想要顯示的字體 'I' => 'msyh.ttf', ] ], 'default_font' => 'msyh' ]); $mpdf->SetFont('msyh'); //設置你要使用的字體配置名稱 //注意如此設置需要注釋掉 //$mpdf->autoScriptToLang = true; //$mpdf->autoLangToFont = true;
8.關於中文符號在數字后面亂碼的問題
個別字體會出現數字后面的中文字符出現亂碼情況,目前沒有很好的解決方式,只列舉一個簡單方式:使用gb字體顯示中文字符 例如要顯示:【213456789】 <span style:"font-family:自定義字體;">【123456798<span style="font-family: gb;">】</span></span>
更多方法參照官方文檔
http://mpdf.github.io/reference/mpdf-functions/overview.html