tp5 使用phpword 替換word模板並利用com組件轉換pdf
一、首先composer安裝PHPword,就不多說了
二、然后是把模板中要替換的部分用變量代替
三、把原始的模板文件放入項目目錄,tp框就放在了public/upload/目錄下
四、
查看php.ini中是否已經開啟了com.allow_dcom = true 從php/ext/里面查找一下有沒有這個php_com_dotnet.dll這個文件 如果沒有網上下載個,一般都會有的吧應該大概可能。。 然后查找這個php.ini里面查找下#extension=php_com_dotnet.dll把前面的#號去掉 如果找不到就復制,手動添加一下 然后輸出下phpinfo() 看看有沒有com_dotnet COM support enabled DCOM support enabled .Net support enabled 表示COM組件開啟成功
五、
然后新建一個php文件在里面寫上: $com = new COM('word.application'); (#注意word.application 是電腦中必須有word文檔才可以的) echo $com; 如果沒錯的話應該會顯示 Microsoft Word 說明COM擴展已經安裝完成了!
六、代碼
1 public function word2pdf() 2 { 3 4 5 $server=$_SERVER['DOCUMENT_ROOT']; 6 // $filenamedoc =$server.'/upload/basedoc/one.docx'; 7 $filenamedoc =$server.'/'.$templet['url'];//模板路徑 8 $filenamepdf = $server.'/upload/basedoc/one'.$templet['id'].'_new.docx';//替換變量,新的word路徑 9 $fiel='/upload/basedoc/one'.$templet['id'].'_new'.time().'.pdf';//word轉換pdf路徑 10 $pdf = $server.$fiel; 11 $tmp=new \PhpOffice\PhpWord\TemplateProcessor($filenamedoc);//打開模板 12 $tmp->setValue('name',$sq); 13 $tmp->setValue('hcwz',$hcwz); 14 15 $tmp->setValue('ayear',$apply_date_y); 16 $tmp->setValue('amonth',$apply_date_m); 17 $tmp->setValue('aday',$apply_date_d); 18 19 $tmp->setValue('year',date("Y",time())); 20 $tmp->setValue('month',date("m",time())); 21 $tmp->setValue('day',date("d",time())); 22 $tmp->setValue('mishu',$mishu);//${year}年${month}月${day} 23 $tmp->saveAs($filenamepdf);//另存為 24 $url=word2pdf($filenamepdf,$pdf); 25 return config("PdfUrl").$fiel; 26 27 }
function word2pdf($srcfilename,$destfilename) { try { if(!file_exists($srcfilename)){ unlink($srcfilename); } $word = new \COM("word.application") or die("Can't start Word!"); $word->Visible=0; $word->Documents->Open($srcfilename, false, false, false, "1", "1", true); $word->ActiveDocument->final = false; $word->ActiveDocument->Saved = true; $word->ActiveDocument->ExportAsFixedFormat( $destfilename, 17, // wdExportFormatPDF false, // open file after export 0, // wdExportOptimizeForPrint 3, // wdExportFromTo 1, // begin page 5000, // end page 7, // wdExportDocumentWithMarkup true, // IncludeDocProps true, // KeepIRM 1 // WdExportCreateBookmarks ); $word->ActiveDocument->Close(); $word->Quit(); } catch (\Exception $e) { if (method_exists($word, "Quit")){ $word->Quit(); } return; } }
七、權限問題
如果你有權限問題比如不能打開或保存文檔,可能出現這樣的錯誤: 由於沒有打開文檔,所以無法使用此命令 或 ——命令失敗 試試這個(如果你正在運行IIS): ——執行“dcomcnfg” -打開組件服務>計算機>我的計算機> DCOM配置 -搜索Microsoft Office Word 97- 2003文檔(它會像這樣翻譯成你的語言,所以花點時間搜索一下) -右鍵單擊並打開屬性 ——選擇“身份”選項卡 -通常情況下設置為“啟動用戶”。您必須將其更改為“交互式用戶”或您選擇的管理用戶。
如果還是有問題,就要捕獲異常信息了,建議放在try catch里面
告誡一下,本機安裝的office一定下載完整版,否則轉換pdf一直失敗(如果一直失敗,可能是缺少插件Save As PDF and XPS插件 正式版)
下載地址:http://www.onlinedown.net/soft/1109902.htm,也可以自己在網上找一個安裝
配置不難,但小細節需要注意,否則一個小問題就被搞死。
