先说下需求:正常点击免责声明是下载的文件,根据用户需求是点击预览,所以这里利用phpword生成一个静态页面并进行预览。不多说,直接上代码附带类文件。
类文件:https://pan.baidu.com/s/1yhZu5JyrtIfKnGllRblPtg 提取码:fbu3 把类文件放在vendor目录下。
html代码:
<!-- 这里是点击下载的html代码,隐藏域是当前的id -->
<p><input type="hidden" value="{$vo.file_id}" class="file_id"><a href="#" class="btn btn-primary click">点击下载</a></p>
<script type="">
//触发ajax把id传到控制器
$(\'.click\').click(function(){
id = $(this).prev().val();
$.ajax({
type: "POST",
url: "{:url(\'home/Single/ajax\')}",
data: {id:id},
dataType: "json",
success: function (msg) {
window.open(msg.html)//新页面打开预览
}
});
return false;
})
</script>
后台代码:
//首先头部引用类
use PhpOffice\PhpWord\IOFactory;
use PhpOffice\PhpWord\PhpWord;
public function ajax(){
//根据id查询数据库存的文档路径
$file_id = $_POST[\'id\'];
$info = M(\'download_file\')->where([\'file_id\'=>$file_id])->find();
$IOFactory = new PhpWord();
$phpWord = \PhpOffice\PhpWord\IOFactory::load(\'./\'.$info[\'file_url\']);
$xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, "HTML");
//生成hello.html文件路径
$xmlWriter->save(\'./Public/doc/hello.html\');
//判断文件是否存在,额庵后传到前台
if(file_exists(\'./Public/doc/hello.html\')){
$html=\'/Public/doc/hello.html\';
$dataa = array(\'html\'=>$html,\'url\'=>$url);
echo json_encode($dataa);
}else{
$dataa = array(\'html\'=>\'0\');
echo json_encode($dataa);
}
}