想实现在线电子签名,及生成签名到合同文件 第一部分:uniapp小程序端 1.从插件市场导入手写签名canvas电子签名,按照操作步骤即可使用。我这里是调整了样式,修改了组件,根据自己实际UI调整 我的UI效果图: 2.通过组件的submit方法可以得到签名后的图片临时文件,将图片上传到后台得到服务器图片地址,保存下来
sumbit(res){
console.log('sumbit',res)
var _this = this;
try {
// this.resultUrl = res.tempFilePath
//将签名上传后台
uni.uploadFile({
url: web.webUrl+'/api/common/upload', //仅为示例,非真实的接口地址
filePath: res.tempFilePath,
name: 'file',
formData: {
// 'user': 'test'
},
success: (uploadFileRes) => {
console.log(uploadFileRes.data);
// 判断是否json字符串,将其转为json格式
let data = _this.$u.test.jsonString(uploadFileRes.data) ? JSON.parse(uploadFileRes.data) : uploadFileRes.data;
console.log(data);
_this.resultUrl = data.data.url;
console.log(_this.resultUrl);
_this.confirm()
// _this.resultUrl = res.tempFilePath;
}
})
} catch (e) {
// error
}
},
第二部分:php接口部分 图片上传接口就不写了,直接写合同生成,使用的是PHPWord
1.composer安装PHPWord PHPWord composer链接
composer require phpoffice/phpword
2.准备合同模板文件,既然是PHPWord,那肯定是word文档,将文档里面的需要替换的文字设置为变量,变量的格式例如:${user_name},那么模板变量替换的时候使用 $templateProcessor->setValue(‘user_name’, ‘张三’); 图片也是一样的操作,在文件里面设置好模板变量,然后替换
PHPWord文档中有给出使用方法
3.生成合同文件
//生成合同文件,参数是签名图片的路径
public static function generate_contract($sign_img_url)
{
//获取后台配置的模板文件
$contract = explode(',',getConfigvalue('register_file'));
$contract_list = array();
$file_path = ROOT_PATH.'public/contract/';
if(!is_dir($file_path)){
mkdir($file_path,0777,true);
}
foreach ($contract as $key=>$value) {
//读取模板文件
$templateProcessor = new TemplateProcessor(ROOT_PATH.'public'.$value);
//模板变量替换
$templateProcessor->setValue('user_name', '张三'); //模板变量值替换
$templateProcessor->setValue('user_mobile', '13112345678'); //变量值替换
$templateProcessor->setImageValue('sign_image', ['path' => ROOT_PATH.'public'.$sign_img_url, 'width' => 40, 'height' => 40, 'ratio' => true]); //写入图片
//输出文件
$out_docx_name = $file_path.time().$key.'.docx';
$templateProcessor->saveAs($out_docx_name);
$contract_list[] = $out_docx_name;
}
return $contract_list;
}
4.得到文件,out_docx_name就是文件路径,将路径保存
|