本教程中使用的包版本以及環境:ThinkPHP 5.1.37LTSphpoffice/phpword 0.16.0php 7.0.12
需求
根據已經製作好的 Word 模板,進行內容替換,以達到生成新Word文檔的目的。
注意:模板格式務必為 .docx
安裝
這裡我們使用 composer 安裝。推薦使用阿里雲的 composer 全量鏡像
打開命令行工具,切換到你的 ThinkPHP 項目根目錄下。
執行:composer require phpoffice/phpword 安裝 phpword 包。
使用
在本地環境上準備一個已經製作好的 Word 模板
phpword 包中規定了替換的變量命名規則,務必以如上圖所示的格式。下面我們開始擼代碼。
如圖代碼1所示,我們首先實例化對象並傳入你的模板路徑,其次調用 setValue 方法去替換 Word 模板變量,再次調用 saveAs 方法並傳入保存的文件名保存生成新文檔。最後調用 tp 框架給我們提供的 download 方法下載文件。
值得注意的是,模板樣例中我們有一處地方寫了兩個替換變量 ${sample_num}${sample_num} 最終生成的文檔也將這兩個變量全都替換了,如果我們只替換它一次或者多次的話,怎麼辦呢?
如果你使用的是 phpstorm 工具的話,光標移至 setValue 方法上按住 ctrl+滑鼠左鍵就會跳轉至這個類方法地方了。
setValue 方法提供了三個參數,分別為 $search, $replace, $limit。
$search則是我們需要尋找的模板變量名。
$replace則是我們需要將這個變量名替換成什麼內容。
$limit則是當 phpword 尋找到多個符合條件的模板變量後,替換幾次。
我們只需要在 setValue 方法中添加第三個參數設置為 1,那麼最後就只會替換一次這個變量。
相信聰明的你已經看到了,setValue 方法中對傳進來的參數進行了判斷,判斷了是否為數組格式。沒錯,我們可以傳入一個數組來替換,不必調用多次這個方法。
至此,替換基本的文字是沒問題了,如果你想加入一張圖片,該怎麼辦呢?
TemplateProcessor 對象中除了 setValue 方法,還有一個 setImageValue 方法。
也是跟 setValue 方法一樣使用,只不過第二個參數有點小改變,根據注釋可以得知,第二個參數你可以直接傳入圖片的路徑,或者傳入一個數組,數組中可以設置圖片的路徑,尺寸。
至此,本篇教程也結束了,謝謝您花費時間閱讀本教程。