mpdf與fpdf的使用比較


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

mpdf

首先接觸的是mpdf,從源碼可以看出mpdf是基於fpdf與html2fpdf的成果。
優點:

  • 使用方便,代碼簡單。可以完全由HTML代碼直接轉化成PDF格式輸出到web前端或直接下載。

但應用中發現不足的部分

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

如果對時間要求不高的話可以考慮,三部即可實現輸出

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

可以實現頁面的不同樣式的頁眉頁腳,快速實現封面目錄等,具體可以參見demo

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

fpdf

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

  • 生成速度明顯提升

相比於mpdf代碼量肯定明顯提升,自己構造所需的功能,可以參考mpdf源碼進行改造哦

簡單輸出demo

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

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

可以通過 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會有像素不一的問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM