fpdf fpdi 操作pdf文件 寫入中文漢字

    今天給公司做一個線上合約簽約功能,用戶簽約後 生成pdf版的文件 。網上搜了搜大概都是用fpdf進行操作的  ,

通過fpdi 可以進行讀取pdf模板。 在通過繼承fpdf 操作現有的pdf文檔 。

      功能很簡單,用戶手寫用頁面canvas生成圖片,圖片保存png到伺服器 。然後粘貼圖片到對應的pdf模板上。

但是在實際操作上就出現了問題。國外的fpdf 對中文支援並不是很好,在pdf上加入中文漢字的時候,會出現亂碼。

而且他只提供文件夾中的幾種字體。而且這幾種字體都是英文字體,所以無法正常支援漢字的寫入。

       下面說一下具體的解決方案:

   1.   //github.com/DCgithub21/cd_FPDF  下載程式碼 

 2. 將上一步的源碼放入vendor中  

    3. 修改composer源碼  修改 fpdi中的  fpdfTpl.php  將他基礎的fpdf類改成 咱們剛才引入的程式碼  而之前引入的程式碼再繼承fpdf

  

 

  4.編寫相關程式碼 

  

 /**
     * 合成pdf
     * @param $sgin_img
     * @param $order_sn
     * @return string
     * @throws \setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException
     * @throws \setasign\Fpdi\PdfParser\Filter\FilterException
     * @throws \setasign\Fpdi\PdfParser\PdfParserException
     * @throws \setasign\Fpdi\PdfParser\Type\PdfTypeException
     * @throws \setasign\Fpdi\PdfReader\PdfReaderException
     */
    public function pdf($sgin_img,$order_sn,$orderInfo){
    
        $sgin_img=ROOT_PATH.'public/'.$sgin_img;
        $name=$order_sn;
        $outputPath=ROOT_PATH.'public/uploads/pdf/'.$name.'.pdf';
        $url='/uploads/pdf/'.$name.'.pdf';
        $pdf=new Fpdi();
        $pdf->AddPage();
        $pdf->setSourceFile('UI.pdf'); //設置模板文件
        $template = $pdf->importPage(1);
        $pdf->useTemplate($template); 
        $count=mb_strlen($orderInfo['order_name']);
        $x=81+2.5*(9-$count); //計算寬度
        /*寫入項目名稱*/
        $pdf->SetTextColor(0, 0, 0);
        $pdf->SetXY($x, 67);
      //  $pdf->SetFont($font_path);
        $pdf->AddGBFont('songti');  //使用字體
        $pdf->SetFont('songti','',13); 
     //注意此處一定要用iconv改一下編碼 我之前沒有想到這個 浪費很多時間
        $pdf->Write(0,iconv("utf-8","gbk",$orderInfo['order_name']));
        /*添加簽名圖片*/
        $pdf->Image($sgin_img,50,130,50,0);
        $pdf->Output($outputPath,'F');
        return $url;
    }

展示一下生成的效果:

 

 

 

 

 

 

 有可能你還會遇見其他的問題 :還是字體問題  上面貼的github中有一個黑體字體 ,但是你可能需要其他的字體

比如說我用的是宋體 。而fpdf中是有自己的字體庫的  只能應用庫中的 字體,這裡可能還需要我們自己生產字體庫,

網上也有相關的方法  這裡我發一下比較簡單便捷的。

  通過訪問 //www.fpdf.org/makefont/  這裡地址 就可以生產所需要的字體庫  圖片如下:

 

 

將兩個文件放入到對應的font文件夾中, 引入的時候 在Addfont 就可以正常使用了。

如果你還遇到了其他的問題,可以在留言中給我回饋。

 

Tags: