FPDF即“Free PDF”,FPDF類庫提供了基本的PDF建立功能,其原始碼和使用權是免費的。本文主要和大家分享php中pdf頁面製作方法,希望能協助到大家。
PDF格式文檔優勢
通用:PDF文檔在UNIX和Windows系統均可正常使用。
安全:PDF文檔可設定為唯讀模式,並且可以添加密碼等保護措施。
美觀:PDF文檔可以很大程度上相容中文編碼,並且保留當前頁面排版。
精巧:大多數情況下,產生PDF文檔會減小檔案體積。
FPDF類庫下載
FPDF類庫配置
下載FPDF檔案。
將下載壓縮檔解壓到項目根目錄下。
在項目中引用FPDF類庫(如下代碼)。
<?phpdefine('FPDF_FONTPATH','font/');require_once('fpdf/fpdf.php');?>
FPDF類庫的具體操作
建立對象
new FPDF([string page-orientation [, string measure-unit [, string page-format]]]);/* page-orientation:選擇性參數,表示PDF文檔為橫向或縱向,預設 P 取值:P:縱向 L:橫向 measure-unit:選擇性參數,表示計量單元,預設 mm 取值:pt:點 mm:毫米 cm:厘米 in:英寸 page-format:選擇性參數,紙張類型,預設 A4 取值: A4、A5、Letter等*/
添加新頁
void AddPage([string page-orientation]);/* page-orientation:選擇性參數,表示PDF文檔為橫向或縱向,預設 P 取值:P:縱向 L:橫向*/
設定字型
void SetFont(string font [, string style [, float size]]);/* font:表示字型; style:選擇性參數,表示樣式,預設為普通樣式; 取值:B:粗體 I:斜體 U:底線 size:選擇性參數,表示字型大小,預設為12pt;*/
增加儲存格
void Cell(float width, float height, string txt, int border, int ln, string align, boolean fill, string link);/* width:增加儲存格寬度。 height:增加儲存格高度。 str:放置在儲存格中的文本。 border:儲存格邊框。 ln:換行高度,預設為0,即換一行。 align:對齊,預設居左,R時居右,C時置中。 fill:是否顏色填充,預設false。 link:添加連結,預設無連結. * Cell()函數是FPDF中輸出文字的主要方式之一。*/
輸出文檔
String Output([string name [, string dest]]);/* name:選擇性參數,表示要儲存的檔案名稱。 dest:選擇性參數,操作內容。 取值: I:將PDF文檔直接在瀏覽器中顯示。 D:下載PDF文檔。 F:儲存為本地檔案。 S:返回一個字串值。*/
插入圖片
void Image(string file, float x, float y float width, float height);/* file:圖片路徑。 x:圖片位置的橫座標。 y:圖片位置的縱座標。 width:圖片寬度。 height:圖片高度。*/
解決中文亂碼問題
下載FPDF中的中文外掛程式chinese.php檔案,建立PDF_Chinese()對象。
將頁面編碼設定為GB2312或使用iconv()函數改變字串編碼方式。
/*範例程式碼如下*/<?php require_once('fpdf/chinese.php'); $pdf=new PDF_Chinese('P','mm','A4'); $pdf -> AddGBFont ('GB',iconv("UTF-8","gbk",'微軟雅黑')); $pdf -> AddPage (); $pdf -> SetFont ('GB', '', 20); $pdf -> Cell(0,0,iconv("UTF-8","gbk",'你好,世界!')); $pdf -> Write (5, iconv("UTF-8","gbk",'你好,世界!')); $pdf -> Output(); ?>
設定頁首和頁尾
通過重寫FPDF類中的Header() 方法和Footer() 方法設定頁首和頁尾。
<?phprequire_once('fpdf/chinese.php');class PDF extends PDF_Chinese{ function Header(){ $this->SetFont('GB','',10); $this->Write(10,iconv("UTF-8","gbk",'這是頁首!')); $this->Ln(20); } function Footer(){ $this->SetY(-15); $this->SetFont('GB','',10); $this->Cell(0,10,iconv("UTF-8","gbk",'這是頁尾!')); }}$pdf=new PDF('P','mm','A4');$pdf -> AddGBFont ('GB',iconv("UTF-8","gbk",'微軟雅黑')); $pdf -> AddPage (); $pdf -> SetFont ('GB', '', 20); $pdf -> Cell(0,0,iconv("UTF-8","gbk",'你好,世界!'));$pdf -> Write (5, iconv("UTF-8","gbk",'你好,世界!')); $pdf -> Output(); ?>
設定/擷取某元素在頁面中的位置
void setX(float x); //設定某元素在頁面的X座標,單位為mm。如x為負數,則表示自頁面右端向左的距離。void setY(float y [, boolean resetX]); //設定某元素在頁面的Y座標,單位為mm。如y為負數,則表示自頁面底部向上的距離。若選擇性參數resetX為真則重設X座標。void setXY(float x, float y); //設定某元素在頁面的(X,Y)座標,規則如上,定位Y時不重設X座標。float getX(); //獲得某元素當前X座標。float getY(); //獲得某元素當前Y座標。
輸出字串
void Write(float h, string txt [, mixed link]);/* h:定義字串的行高。 txt:指定輸出字串。 link:選擇性參數,設定連結。*/
換行
void Ln([float h]);//h:設定行高,預設值為最後輸出的行的高度。
本文輸出
void MultiCell(float width, float height, string txt, int border, string align, boolean fill);/* width:儲存格寬度。 height:儲存格高度。 txt:放置在儲存格中的文本。 border:儲存格邊框,預設為0。 align:對齊。預設居左,R=居右,C=置中。 fill:是否顏色填充。預設false。 * MultiCell()函數是FPDF輸出大段文字的主要方法,可自動換行。*/
繪製表格
利用Cell()函數迴圈建立儲存格,最終組成表格。
<?phprequire_once('fpdf/chinese.php');$pdf = new PDF_Chinese('P','mm','A4');$pdf -> AddGBFont();$pdf -> AddPage();$pdf -> SetFont('GB','',14);$header = array('姓名','年齡','性別','工資');$data = array();$data[0] = array('小張','24','男','5,000.00');$data[1] = array('小王','22','女','4,000.00');$width = array(40,40,40,40);for($i=0;$i<count($header);$i++){ $pdf -> Cell($width[$i],6,iconv("UTF-8","gbk",$header[$i]),1);}$pdf -> Ln();foreach($data as $row){ $pdf -> Cell($width[0],6,iconv("UTF-8","gbk",$row[0]),1); $pdf -> Cell($width[1],6,iconv("UTF-8","gbk",$row[1]),1); $pdf -> Cell($width[2],6,iconv("UTF-8","gbk",$row[2]),1); $pdf -> Cell($width[3],6,iconv("UTF-8","gbk",$row[3]),1); $pdf -> Ln();}$pdf -> Output();?>
注意事項