FPDF即“Free PDF”,FPDF類庫提供了基本的PDF創建功能,其源代碼和使用權是免費的。
PDF格式文檔優勢
- 通用:PDF文檔在UNIX和Windows系統均可正常使用。
- 安全:PDF文檔可設置為只讀模式,並且可以添加密碼等保護措施。
- 美觀:PDF文檔可以很大程度上兼容中文編碼,並且保留當前頁面排版。
- 精巧:大多數情況下,生成PDF文檔會減小文件體積。
FPDF類庫下載
- FPDF類庫下載地址: http://www.fpdf.org/
- FPDF類庫中文插件下載地址: http://www.fpdf.org/download/chinese.zip
FPDF類庫配置
- 下載FPDF文件。
- 將下載壓縮文件解壓到項目根目錄下。
- 在項目中引用FPDF類庫(如下代碼)。
<?php define('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()
方法設置頁眉和頁腳。
<?php require_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()
函數循環創建單元格,最終組成表格。
<?php require_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(); ?>
注意事項
- 部分資料中含有FPDF類庫的
Open()
方法,但實際上類庫中並不包含。使用Open()
方法將會造成錯誤。 - 使用FPDF類生成PDF文件時,編碼格式應設置為GB2312(或GB相關編碼),否則即使繼承了PDF_Chinese類依然是亂碼。
- 火狐瀏覽器無法直接將創建的PDF文檔內容顯示在瀏覽器,僅提供下載選項。
原文章來源:https://blog.csdn.net/w18211679321/article/details/78284814