日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php代码实现对word文件的查找与替换,ThinkPHP5使用phpword实现文件模板字符替换

發布時間:2024/9/19 php 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php代码实现对word文件的查找与替换,ThinkPHP5使用phpword实现文件模板字符替换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PhpWord文檔

想實現更多功能的朋友可以仔細參考文檔

一、使用環境

目前是在ThinkPHP5.0.21中使用的PhpWord,其他使用環境引入方式可能會有一點不同。

使用composer安裝,直接使用下面的代碼引入相關類庫

二、安裝

打開命令行進入項目根目錄執行下面命令

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); //將內容保存到生成新的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可能會報錯。除非特殊聲明,本站文章均為原創,轉載請務必保留本文鏈接

總結

以上是生活随笔為你收集整理的php代码实现对word文件的查找与替换,ThinkPHP5使用phpword实现文件模板字符替换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。