PHP替換Word中變量并導出PDF圖片的實現方法
在線生成合同信息,一個 word 文件里面有些信息需要通過數據庫讀取計算出并填寫到 word 文檔中最終顯示在線 pdf 預覽功能,接下來我交大家如果實現該需求
2、接下來實現如何替換文檔內容
我們新建一個 aa.docx 的文檔,里面放了一個變量信息
3、接下來使用 php 來替換這個變量信息 代碼如下
... use PhpOfficePhpWordTemplateProcessor; ... $path = storage_path(’aa.docx’); // 生成world 存放目錄 $filePath = storage_path(’contract.docx’); // 聲明模板象并讀取模板內容 $templateProcessor = new TemplateProcessor($path); // 替換模板內容 $templateProcessor->setValue(’contract’, ’北京乙方’); // 乙方 // 生成新的 world $templateProcessor->saveAs($filePath);
這樣我們就完成了 word 里面模板變量的替換是不是比較簡單呢
4、接下來我們需要處理 word 文檔轉為 pdf 我也在網上了查了比較多的資料,什么先轉為 html 然后通過 其它包的方式或者擴展來轉 pdf 確實都能實現,但是有一點 word 轉為 html 的時候格式會丟失這就和我們的需求有點偏離,后面轉換了方向,使用工具來把 word 轉為 pdf 這里我推薦的工具為 unoconv 安裝方式如下
apt-get install unoconv#如果報錯請求服務器語言設置為 LANG=”en_US.UTF-8″ #使用命令把 word 轉為 pdfunoconv -f pdf aa.docx#這個時候在當前目錄下就會有一個 aa.pdf 的文件出來#但是會發現如果是中文的情況下轉出來的 pdf 是亂碼該如何解決
5、pdf 生成出來中文亂碼解決方案,安裝一個中文字體
# 把電腦本機的宋體上傳到服務器字體目錄下 /usr/share/fonts 新建一個目錄 win 或者其它,把中文字體上傳到該目錄下 apt-get install mkfontscale #安裝這個工具 # 進入到/usr/share/fonts/win/ 執行命令 mkfontscale && sudo mkfontdir && sudo fc-cache -fv # 然后重啟服務器讓字體生效 reboot # 最后在執行 unoconv -f pdf aa.docx # 看是不是中文亂碼的問題解決了
6、使用 php 的執行 shell 的函數來調用該函數自動生成即可
shell_exec(’/usr/binunoconv -f pdf aa.docx’)
注:如 php 執行 shell 腳本命令不生效時,此處的問題是用戶權限不正確導致不能執行該命令 解決方案如下:
# 編輯 vim /etc/sudoers文件root ALL=(ALL:ALL) ALLwww-data ALL=(ALL) ALL%www-data ALL=(ALL) NOPASSWD:ALL zhouyao ALL=(ALL) ALLzhouyao ALL=(ALL) NOPASSWD:ALL# 增加用戶zhouyao 忽略執行命令需要密碼# 增加用戶組和用戶zhouyaouseradd zhouyao -m # -m 創建家目錄# 更改php-fpm的用戶和用戶組cd /etc/php/7.1/fpm/pool.dvim www.confuser = zhouyaogroup = zhouyao# 退出保存重啟php-fpm和nginx,此時在瀏覽器在執行該文件可以看到pdf下載下來了# 如pdf中下載的中文是亂碼,請自行安裝一個中文字體到服務器字體目錄即可
總結
到此這篇關于PHP替換Word中變量并導出PDF圖片的實現方法的文章就介紹到這了,更多相關PHP替換Word變量并導出PDF圖片內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!
相關文章: