tp5 使用phpword 替換word模板並利用com組件轉換pdf


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,也可以自己在網上找一個安裝

 

 

 

 

 

配置不難,但小細節需要注意,否則一個小問題就被搞死。

 


免責聲明!

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



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