mpdf與fpdf的使用比較

php擴展 ---mpdf/fpdf
最近用到pdf擴展,需求是生成合同與簡歷的pdf,可供下載打印php

mpdf

首先接觸的是mpdf,從源碼能夠看出mpdf是基於fpdf與html2fpdf的成果。
優勢:css

  • 使用方便,代碼簡單。能夠徹底由HTML代碼直接轉化成PDF格式輸出到web前端或直接下載。

但應用中發現不足的部分html

  • css樣式支持不足
  • 生成時間過長(硬傷)簡單測試下,當生成3頁純文字版時,所佔內存25M-28M,輸入html轉化pdf的時間爲4s-5s,輸出到頁面的時間爲4-5s;將近10s,時間太長。

若是對時間要求不高的話能夠考慮,三部便可實現輸出前端

$mpdf=new mPDF(); 
$mpdf->WriteHTML($html);//$html 爲所要輸出的html內容
$mpdf->Output();

能夠實現頁面的不一樣樣式的頁眉頁腳,快速實現封面目錄等,具體能夠參見demoweb

PS:雖然mpdf基於fpdf,但對其部分方法進行了改寫;直接使用fpdf語法可能報錯,詳見mpdf源碼。測試

fpdf

既然mpdf基於fpdf,直接轉戰到fpdf研究,相比與mpdf,fpdf更像積木,全部想要實現的功能,須要使用基礎的方法進行構造。優勢:字體

  • 生成速度明顯提高

相比於mpdf代碼量確定明顯提高,本身構造所需的功能,能夠參考mpdf源碼進行改造哦this

簡單輸出democode

$pdf = new FPDF();
$pdf->AddPage();  //添加頁面
$pdf->SetFont('Arial','B',16); //設置字體 
$pdf->Cell(40,10,'Hello World!');  //添加單元
$pdf->Output();  //輸出

PS:默認fpdf是不支持中文字符集的,方法詳見fpdf中文字符集htm

能夠經過 header footer方法設置頁眉頁腳

function Header()
{   
    //引入圖片 參數(文件,x距,y距,寬,高)
    $this->Image('images/plan/12.png',90,150,100);
    //實現單雙頁不一樣頁眉 pageNo可獲取當前頁數
    if($this->PageNo()%2==0)
    {
        $this->Image('images/plan/title.png',6,3,200);
        $this->Cell(80);
        $this->Cell(30,10,double,1,0,'C');
        $this->Ln(20);
    }else
    {
        $this->Image('images/plan/12.png',10,6,25);
        $this->Cell(80);
        $this->Cell(30,10,single,1,1,'C');
        $this->Ln(20);
    }
    
}

function Footer()
{
    $this->SetY(-15);
    $this->SetFont('Arial','I',8);
    $this->Cell(0,10,'Page '.$this->PageNo(),0,0,'C');
}

一般頁面中會有根據A,B兩種狀況作不一樣調整,須要常常使用 getX,getY,setX,setY來獲取當前所在位置,跳轉到位置的X,Y座標。
還有不少設置顏色,連接等方法詳情見 http://www.fpdf.org/

PS:因爲fpdf是用cell實現單元生成,在表格生成時不會有影響,mpdf會出現丟失上下border的狀況,或設置表格boder會有像素不一的問題。

相關文章
相關標籤/搜索