整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          手把手的教你用PHP將HTML生成PDF

          ompdf是一個可以將HTML生成PD并保留樣式效果的PHP第三方擴展。

          下面就一步步講解如何使用:

          一、通過composer安裝

          composer require dompdf/dompdf


          安裝過程

          二 、編寫測試代碼

          (1)引用autoload.php

          include 'vendor/autoload.php'; 

          (2)實例化Dompdf

          $dompdf=new \Dompdf\Dompdf();

          (3)加載HTML

          $dompdf->loadHtml($html); //$html 為HTML字符串

          (4)設置紙張和方向

          $dompdf->setPaper('A4', 'landscape'); //紙張大小和紙張方向

          (5)生成PDF并下載

           $dompdf->render();
          $dompdf->stream('數據字典.pdf');

          三、導出PDF測試,發現中文亂碼了


          導出PDF發現中文亂碼了

          四、解決中文亂了問題

          (1)下載支持中文的字體包放到根目錄下(和vendor目錄同級),這里演示使用的是阿里巴巴的普惠字體(字體格式是ttf的,小編原先下載使用的字體格式是otf格式的無效)

          (2)下載dompdf字體安裝工具解壓到根目錄(和vendor目錄同級)

          下載地址:https://github.com/dompdf/utils

          (3)在命令行(CMD定位到根目錄)下執行命令

          php load_font.php "puhui" Alibaba-PuHuiTi-Light.ttf

          執行成功后在路徑(vendor\dompdf\dompdf\lib\fonts)下就會出現剛才的字體

          (4)在樣式文件中指定使用剛才安裝的字體

          body{font-family:puhui;}

          (5)再次導出PDF測試成功


          亂碼問題解決

          詳細]php調用python腳本,將word轉為html代碼及調用失敗處理

          起因:因為公司遇到發稿問題,很多人喜歡用word編碼,然后再發布到網站上。PHP的包中雖然有部分可以使用的類庫,但是對于圖片始終處理不好,我就想到了python。研究了下,python將word轉為html還真是方便。但是,怎么結合到服務器上呢?我們的服務器是用PHP開發的。

          1:python腳本

          #!/usr/bin/python# -*- coding: UTF-8 -*-import sysfrom pydocx import PyDocXreload(sys)sys.setdefaultencoding('utf8')FileName = sys.argv[1] #獲取文件名參數ShortName = sys.argv[2] #獲取文件名參數html = PyDocX.to_html(FileName) # f = open("/www/wwwroot/micuer.com/pythoncode/runtime/99.txt", 'w') #服務器的全路徑# f.write(html)# f.close()print(html)

          2:php處理腳本

          public function uploadword(){        try {            $file = request()->file("file");            // 上傳到本地服務器            $savename = \think\facade\Filesystem::disk('upload')->putFile( 'word', $file);            $shotrname = time().".txt"; // 短名稱            $savename = "/www/wwwroot/micuer.com/data/upload/".$savename; //Request::domain().            $python_file_name = "/www/wwwroot/micuer.com/pythoncode/WordToHtml.py";            //組裝命令            $cmd = "python {$python_file_name} ".$savename." {$shotrname}  2>error.txt 2>&1";            $res = exec($cmd,$array, $ret);            return json(["code"=>200,"msg"=>"成功","data"=>$savename,"cmd"=>$cmd,"array"=>$array]);        } catch (think\exception\ValidateException $e) {            return json(["code"=>40000,"msg"=>$e->getMessage()]);        }    }

          上傳界面如下:

          實現的功能就是利用PHP的exec函數,調用py腳本,將html代碼返回給前臺服務器。

          返回數據如下

          其實,再處理這個方案中,也遇到了很多問題,比如在命令行下只能成功,但是exec函數執行不成功等等。
          參考了資料:https://my.oschina.net/u/4427610/blog/3155816
          也就是

          exec("python python_test.py 2>error.txt 2>&1", $array, $ret);

          在bash中0,1,2三個數字分代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,即標準輸入(一般是鍵盤),標準輸出(一般是顯示屏,準確的說是用戶終端控制臺),標準錯誤(出錯信息輸出)。
          也可以通過以下方式將標準錯誤重定向到標準輸出保存到$array中:
          打印之后,發現是沒有權限調用。于是就直接改為輸出了,也就是 py的print(html)函數。

          注意幾點:
          1:執行權限問題
          2:exec(“python python_test.py 2>error.txt 2>&1”, $array, $ret); 中 $array就接受到了 print(html)的值
          3:各個腳本盡量使用全路徑

          日有網友希望有一篇用PHP生成PDF的文章教程,好的今天我們就講一講怎么樣用PHP將HTML生成PDF

          我們使用的開源類庫就是TCPDF

          GITHUB地址:

          https://github.com/tecnickcom/TCPDF

          composer安裝:

          composer require tecnickcom/tcpdf

          demo示例:

          https://tcpdf.org/examples/

          這里主要講的是講HTML生成PDF因為HTML格式絕大部分夠用了,其它個性化的功能大家看下官方的DEMO就行了比如生成圖表等

          下面說下具體使用方式:

          1.實例化TCPDF對象

          $pdf = new TCPDF(PDF_PAGE_ORIENTATIN, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

          2.設置標題關鍵字等(步驟可以省略)

          $pdf->SetCreator(PDF_CREATOR);

          $pdf->SetAuthor('Nicola Asuni');

          $pdf->SetTitle('TCPDF演示');

          $pdf->SetSubject('TCPDF Tutorial');

          $pdf->SetKeywords('TCPDF, PDF, example, test, guide');

          3.設置字體(這步很重要不然中文亂碼)

          $fontname = TCPDF_FONTS::addTTFfont('Droid Sans Fallback.ttf', 'TrueTypeUnicode', '', 32);

          $pdf->SetFont($fontname, '', 20);

          4.添加個頁面

          $pdf->AddPage();

          5.將HTML生成PDF

          $pdf->writeHTML($html);

          6.輸出(默認直接在瀏覽器顯示)

          $pdf->Output();

          $pdf->Output('123.pdf','D');//這個是下載,其他方式請替換參數

          7.生成后的效果

          鏈接列表等演示

          生成圖片演示

          表格演示

          最后總結:

          1.一定要設置字體,否則中文亂碼。最好使用文本的設置方法和字體。網上的設置字體的方法雖然能解決但是用pdfparser這個類讀取生成后的PDF內容還是亂碼(讀取PDF內容的方法在我另一篇文章中有說到)

          2.如果你設置了PDF的頭和腳 還需在設置一遍字體

          $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, 'PDF頭部標題', '代碼庸醫');

          $pdf->setHeaderFont(Array($fontname, '', PDF_FONT_SIZE_MAIN));


          主站蜘蛛池模板: 亚洲美女高清一区二区三区| 国产午夜一区二区在线观看| 国产伦精品一区二区三区免费迷| 国产高清在线精品一区二区三区| AA区一区二区三无码精片| 一区 二区 三区 中文字幕| 交换国产精品视频一区| 日韩一区二区久久久久久| 美女AV一区二区三区| 无码中文字幕乱码一区| 亚洲爆乳无码一区二区三区 | 午夜一区二区免费视频| 变态调教一区二区三区| 国产一区风间由美在线观看| 欧美激情国产精品视频一区二区| 精品一区二区久久| 久久一区不卡中文字幕| 国产亚洲一区二区在线观看| 中文字幕在线观看一区| 国产美女视频一区| 国产精品一区三区| 亚洲国产日韩一区高清在线| 亚洲国产一区在线| 国产乱码精品一区二区三区中| 精品福利视频一区二区三区| 亚洲日韩AV一区二区三区中文| 国产福利微拍精品一区二区| 无码一区二区三区爆白浆| 亚洲国产AV无码一区二区三区 | 日韩一区二区在线观看| AV怡红院一区二区三区| 久久久综合亚洲色一区二区三区| 色老头在线一区二区三区| 中文字幕av日韩精品一区二区 | 精品无码人妻一区二区三区18| 国产一区二区在线|播放| 黑人大战亚洲人精品一区| 亚洲天堂一区在线| 日本一区二区三区在线视频| 久久一区二区三区精品| 日本精品一区二区久久久|