php生成PDF文件(FPDF)


FPDF即“Free PDF”,FPDF類庫提供了基本的PDF創建功能,其源代碼和使用權是免費的。

PDF格式文檔優勢

  1. 通用:PDF文檔在UNIX和Windows系統均可正常使用。
  2. 安全:PDF文檔可設置為只讀模式,並且可以添加密碼等保護措施。
  3. 美觀:PDF文檔可以很大程度上兼容中文編碼,並且保留當前頁面排版。
  4. 精巧:大多數情況下,生成PDF文檔會減小文件體積。

FPDF類庫下載

FPDF類庫配置

  1. 下載FPDF文件。
  2. 將下載壓縮文件解壓到項目根目錄下。
  3. 在項目中引用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:圖片高度。
*/

解決中文亂碼問題

  1. 下載FPDF中的中文插件chinese.php文件,創建PDF_Chinese()對象。
  2. 將頁面編碼設置為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


免責聲明!

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



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