新版的phpword支持中文不用再修改插件代码

应客户需求需要在用户创建简历后把简历以附件的形式发送到其指定邮箱,所有想到 先把数据存储到数据库,然后把数据读取出来处理后保存为word文档,然后在以附件的形式发送

刚开始实现的方法是把内容写成html的形式然后保存为word文档,但是这种方式在Foxmail (邮件客户端)上无法预览而且还不能添加水印和页眉等,客户不太满意,就改为使用phpword插件来实现。

phpword英文版文档(我用的谷歌浏览器自带翻译,里面的介绍可以用翻译后的中文查看,复制代码时需先返回英文模式再进行复制):

http://phpword.readthedocs.io/en/latest

插件GitHub地址:

https://github.com/PHPOffice/PHPWord

thinkphp5版

1、将下载的phpoffice 文件放在vender下

2、创建单独用于生成word的Makeword.php控制器和word方法

部分代码 (内部的自定义变量根据自己需求自行修改)

<?php
namespace app\index\controller;use think\Db;
use think\Controller;class Makeword extends Controller
{public function word($arr){Vendor('phpoffice.phpword.bootstrap.php');//导入phpoffice插件//创建新文档…$phpWord = new \PhpOffice\PhpWord\PhpWord();$phpWord->setDefaultFontSize(10.5);/* 注意:任何添加到文档的元素都必须位于一个区域内。 */// 在文档中添加空白部分…$section = $phpWord->addSection();//页眉$header = $section->addHeader();
        // 将文档保存为OOXML文件…$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');$objWriter->save('uploads/word/resume'.$arr['id'].'.docx');

3、调用生成方法生成word

$makeword =  new Makeword();$makeword->word($arr);//邮件正文$body_data = <<<hoa<p>简历请查看附件</p><p>(这是一封自动发送的邮件,请不要直接回复)</p><p><br  /></p>
hoa;if ($sub_type) {
                    //发送邮件send_mail('****@****.com',$title_name,$body_data,$arr['id']);}   echo "<script language='javascript' type='text/javascript'> alert('提交成功');window.location.href = '/index/index/usercenter';</script>"; 

4、send_mail 配置发送邮件方法

在common.php中 配置发送邮件的公共函数(需要添加发送邮件插件),与普通发送邮件函数的区别在于需要开启附件方法

function send_mail($mail_to, $mailsubject, $mailbody,$id){Vendor('PHPMailer.PHPMailerAutoload');//邮件插件$email_config = db('system')->field('value')->where('name', 'email_config')->find();$email_config = unserialize($email_config['value']);$address = explode(',',$mail_to);$mail = new \PHPMailer; //https://github.com/PHPMailer/PHPMailer//$mail->SMTPDebug = 3;                         // 启用详细的调试输出$mail->isSMTP();                                // 设置邮件程序使用SMTP$mail->Host = $email_config['smtp'];                       // 指定主服务器和备份SMTP服务器$mail->SMTPAuth = true;                         // 启用SMTP验证$mail->CharSet = "UTF-8";                       // 设置邮件编码$mail->Username = $email_config['loginname'];               // SMTP username,发件箱$mail->Password = $email_config['password'];               // SMTP password,发件箱密码$mail->SMTPSecure = 'ssl';                            // Enable TLS encryption, `ssl` also accepted$mail->Port = 465;                                 // TCP port to connect to$mail->AddAttachment("uploads/word/resume".$id.".docx"); // 添加附件方法(附件所在地址)$mail->setFrom($email_config['loginname'],$email_config['sender']);                 //发件人foreach($address as $v){$mail->addAddress($v);                    // 添加收件人,名称是可选的}$mail->isHTML(true);                            // 将电子邮件格式设置为HTML$mail->Subject = $mailsubject;$mail->Body    = $mailbody;if(!$mail->send()) {// return false;     return 'Mailer Error: ' . $mail->ErrorInfo;} else {return true;}
}

注:虽然新版phpword插件支持中文但是对于一些特殊符号仍会无法识别

当有特殊符号时office无法打开word文件

但是wps可以打开(office和wps部分格式不兼容,一般以office为基准)

wps打开后错误位置显示为

此处应输入为2-5 但是用户输入成2–5 ,office 无法识别“–” 所以报错

所以对于输入的数据需要做过滤处理

我自己的处理方法是对于一些常见的特殊符号进行替换处理

其他可根据自己的方法自己做屏蔽处理

部分无法识别符号

http://www.w3school.com.cn/tags/html_ref_symbols.html

使用phpword实现php生成word文件同时以邮件的形式发送word附件相关推荐

  1. 使用正则表达式查找Word文件中AABB和ABAC形式的成语

    使用正则表达式查找Word文件中AABB和ABAC形式的成语 1.实验目的 (1)熟练安装Python扩展库python-docx. (2)了解Word文件的内容组织方式. (3)熟悉Python标准 ...

  2. Excel-vba打开word文件读取内容处理并保存至word中

    Excel-vba打开word文件读取内容处理并保存至word中 Sub 按钮1()Dim myPath As StringSet wdapp = CreateObject("Word.Ap ...

  3. python怎么读取word文件_使用python编辑和读取word文档

    python调用word接口主要用到的模板为python-docx,基本操作官方文档有说明. 使用python新建一个word文档,操作就像文档里介绍的那样: 1 from docx importDo ...

  4. python怎么读取word文件_python之python-docx编辑和读取word文档

    python调用word接口主要用到的模板为python-docx,基本操作官方文档有说明. 使用python新建一个word文档,操作就像文档里介绍的那样:1 from docx import Do ...

  5. java使用easyExcel生成excel文件直接写入邮件附件并发送

    目录 一:引入pom依赖 二:完整代码如下(真实可用) 本文章主要是讲述如何使用EasyExcel生成excel文件,并将文件写入到邮件附件中进行邮件发送. 一:引入pom依赖 <!-- 邮件 ...

  6. word文件做一半未响应_Win7的word为什么老是出现未响应?

    展开全部 1.按Win+R键,打开运行,输入winWord /safe,点击确定进入无加载项word; 2.进入word界面,点击文件; 3.点62616964757a686964616fe4b893 ...

  7. word合并邮件无法发送html,Word邮件合并批量发送带附件的邮件

    应张老师的需求,修改制作了一个可以批量发送带附件的电子邮件VBA. 目的:给N多人发送电子邮件,而不是抄送模式,并带有对方的称谓. 实现: 用到Word的邮件合并功能,以及调用Outlook发送邮件. ...

  8. php读取word文件并解析图片,PHP读取office word文档内容及图片

    PHP读取word文档里的文字及图片,并保存 一.composer安装phpWord composer require phpoffice/phpword 二.phpWord 读取 docx 文档(注 ...

  9. 批量处理word文件内容_用python批量提取word文件信息,导出到excel文件

    技术的运用可以解决大量重复处理的工作,提高效率. 比如,有大量的论文电子文档(.docx格式),需要提取文档中的题目.作者.单位等信息制成表格(.xlsx格式),一般每篇论文的题目在第1行,副标题在第 ...

最新文章

  1. vex机器人比赛 一队人数_VEX世锦赛中国区总决赛在渝闭幕 重庆晚报记者带你了解VEX机器人的那些事...
  2. 前松鼠拼拼产品总监吴天:做一个接地气的产品经理
  3. 数据库设计笔记——概述(一)
  4. c 复杂的前置后置面试题_OPPO Reno拆解:优秀工艺由外而内,复杂用料不负旗舰之名...
  5. c++模板---1(模板概念,利用模板实现数组排序,函数模板调用规则)
  6. Citrix XenApp 5.0 Uninstall
  7. Gradle+IDEA使用说明
  8. java.lang.IllegalArgumentException: Must specify o
  9. vue+element Form键盘回车事件页面刷新解决
  10. c++ poco 使用mysql中文乱码问题
  11. 学习计算机如何有一个质的飞越?
  12. Linux系统如何添加IP别名
  13. 数据库设计-逻辑结构设计
  14. 使用uni-app把h5网页封装成app
  15. 【杂记】EMC、EMI、EMS、TVS、ESD概念学习总结
  16. 微信新版本(6.6.7)功能设计背后的逻辑及需求
  17. 微信小程序 input 的 type属性 text、number、idcard、digit 区别
  18. 朗强:HDMI视频画面分割器基本工作原理和性能
  19. 100天精通Python丨办公效率篇 —— 14、Python这些小技巧,让文件管理更加智能
  20. vue-router 报错Error: Avoided redundant navigation to current location: “/index/user“解决方式

热门文章

  1. 玩战塔英雄不显示服务器,王者荣耀的这个问题,国家点名了仍没有改正过来!战塔英雄就没有...
  2. 根式进入计算机的方法
  3. 没有开发经验的程序员,怎么快速学习进入工作?
  4. Zigbee入网流程
  5. 一款易用的视频云是如何迅速积累客户的?
  6. NR协议学习——RLC
  7. 吉米_王:浅谈“并行计算”
  8. python 绕过国科大教务系统获取所有学生成绩
  9. 通俗易懂的csrf漏洞(token为什么能放cookie)
  10. Volley,Glide,Swiperefreshlayout 简单使用