mPDF的簡單使用

1. 基本使用

安裝

1、全新安裝。

composer require mpdf/mpdf

2、在項目下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

由於本人能力有限,文章可能有偏差,請批評指出,謝謝!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章