php代码实现对word文件的查找与替换,ThinkPHP5使用phpword实现文件模板字符替换
PhpWord文檔
想實現(xiàn)更多功能的朋友可以仔細參考文檔
一、使用環(huán)境
目前是在ThinkPHP5.0.21中使用的PhpWord,其他使用環(huán)境引入方式可能會有一點不同。
使用composer安裝,直接使用下面的代碼引入相關類庫
二、安裝
打開命令行進入項目根目錄執(zhí)行下面命令
composer require phpoffice/phpword
安裝完成 頭部use 引入
use PhpOffice\PhpWord\IOFactory;
use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\TemplateProcessor;
三、使用模式
1. 讀取原有word模板,替換相關變量,word.docx是模板,里面有標簽(注意:標簽最好用“Notepad++編寫,或者記事本、編譯器,不要用word來編輯,然后在復制到word中對應位置,可以加粗,字體大小,字體顏色”),如下圖所示,
替換為:
模板生成Word
使用場景:適合有一套固定的模板,只有幾個關鍵的地方需要改變。
使用方式:下面介紹幾行代碼就足夠完成整個word的替換了,需要更多功能參考文檔。
//生成合同 $order_id 訂單id
public function createContract($order_id)
{
$orderInfo = StationOrder::with(['user', 'station'])->find($order_id);
$data = [
'value1' => $orderInfo->user->name, //用戶名
'value2' => $orderInfo->station->stationNm, //工位名
'value3' => $orderInfo->station->price, //價格
'value4' => date('Y年m月d日', $orderInfo['arrDt']), //入駐時間
'value5' => date('Y年m月d日', $orderInfo['dptDt']), //到期時間
];
$template_path = Db::name('attachment')->where(['extension' => 'docx', 'use' => 'attachment'])->value('file_url');
$template_path = ROOT_PATH . 'public' . $template_path;
//讀取模版word的版本最好是docx,要不然可能會讀取不了
$templateProcessor = new TemplateProcessor($template_path);
foreach ($data as $k => $v) { //讀取模版word的版本最好是docx,要不然可能會讀取不了
$templateProcessor->setValue($k, $v); //替換模板中的變量,對應word里的 ${xxxx}
}
// ROOT_PATH => E:\phpstudy\PHPTutorial\WWW\666\
$save_name = date('YmdHis') . '.docx'; //保存的文件名
$return_path = DS.'uploads'.DS.'contract'.DS. $save_name;
$savepath = ROOT_PATH . 'public'.DS.'uploads'.DS.'contract'.DS;
if (!is_dir($savepath)) {
@mkdir($savepath,0777);
}
$templateProcessor->saveAs($savepath.$save_name); //將內(nèi)容保存到生成新的word中
StationOrder::update(['id' => $order_id, 'contract_url' => $return_path]);
return $return_path;
}
//導出合同
public function daochu($id) {
$contract_url = StationOrderModel::where('id',$id)->value('contract_url');
$file_name = end(explode(DS,$contract_url));
$download_url = ROOT_PATH .'public'.$contract_url; //真實路徑
$file1 = fopen($download_url, "r"); //打開文件
//輸入文件標簽、下載文件
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length: " . filesize($download_url));
Header("Content-Disposition: attachment; filename=" . $file_name);
echo fread($file1, filesize($download_url));
fclose($file1);
}
四、最后
PS:
1、Phpword雖然可以用代碼生成word,但對于一些文字圖片的定位操控起來非常麻煩,甚至無法控制。
2、盡量使用模板,直接改動模板更加方便,只替換一些關鍵字就好。
3、使用模板的時候要注意word格式要是docx,使用doc可能會報錯。除非特殊聲明,本站文章均為原創(chuàng),轉(zhuǎn)載請務必保留本文鏈接
總結(jié)
以上是生活随笔為你收集整理的php代码实现对word文件的查找与替换,ThinkPHP5使用phpword实现文件模板字符替换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全国旅客列车时刻表(全国各版本的列车时刻
- 下一篇: 中国品牌鞋(中国有哪些品牌运动鞋)