联系官方销售客服
QQ1835022299
028-61286886
利用LibreOffice将word文件导入到编辑器中,代码复杂点,但是导入效果非常好,基本上跟word内容一致
1、修改发布内容的模板文件share_post.html,加入html和js代码实现导入word的界面
前端html和js代码代码如下
上传word文档上传格式要求:doc、docx(2MB)
2、在服务器端安装LibreOffice,安装时注意路径,路径不能有空格,假设你安装在c:/phpstudy/LibreOffice
3、编写服务器端代码,实现导入word文档:
/** * 文件上传 ----- 转为上传word使用 */ public function upload_word() { //限制文件类型 $files = $this->request->getFiles(); $ext =strtolower($files['file_data']->getClientExtension()); if ($ext!='doc' && $ext!='docx') exit(dr_array2string(['code' => 0, 'msg' => '只能上传word文档!'])); // 验证上传权限 $this->_check_upload_auth(); $p = $this->_get_upload_params(); $rt = \Phpcmf\Service::L('upload')->upload_file([ 'path' => '', 'form_name' => 'file_data', 'file_exts' => @explode(',', $p['exts']), 'file_size' => (int)$p['size'] * 1024 * 1024, 'attachment' => \Phpcmf\Service::M('Attachment')->get_attach_info((int)$p['attachment'], (int)$p['image_reduce']), ]); if (!$rt['code']) { exit(dr_array2string($rt)); } // 上传成功 if (IS_API_HTTP) { $data['data'] = [ 'id' => $data['code'], 'url' => $rt['data']['url'], ]; exit(dr_array2string($data)); } else { //利用libreOffice进行转换 $f=$rt['data']['path']; //计算上传的文件名 $f_name=basename($f); $offset = strrpos($f_name,'.'); $f_name_html=substr($f_name,0,$offset).'.html'; // $path='uploadfile/'.date('Ym').'/'; $f_path=$_SERVER['DOCUMENT_ROOT'].'/'.$path; //网页输入文件路径 $cmd = 'c:/phpstudy/LibreOffice/program/soffice.exe --convert-to html:HTML --outdir '.$f_path.' '.$f; //该命令会生成与上传文件同名的网页文件 //return array('result' => $cmd); shell_exec($cmd); //获取文件内容 if(!file_exists($f_path.$f_name_html)) exit(dr_array2string(['code' => 0, 'msg' =>'文件读取失败,请重试!'])); //获取网页地址 $url=$rt['data']['url']; $url=str_replace(".docx",".html",$url); $url=str_replace(".doc",".html",$url); //获取网页内容,原来的file_get_contents太慢,换成了curl方式 $ch = curl_init(); $timeout = 50; curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $s = curl_exec($ch); curl_close($ch); //处理获取的数据 $s = iconv("gb2312", "utf-8//IGNORE",$s); //libreoffice生成的网页默认是gb2312,需转换 preg_match("/(.*?)<\/body>/is", $s, $match1); $s = trim($match1[1]); if ($s==false or $s=='') exit(dr_array2string(['code' => 0, 'msg' =>'没有获取到文档内容,请重试!'])); //替换图片中路径中的默认路径 src="../ $s=str_replace('src="../','src="/'.$path,$s); //替换特殊的符号 $s=str_replace('“','"',$s); $s=str_replace('”','"',$s); exit(dr_array2string(['code' => 1, 'msg' =>$s])); } }
导入效果如图:
学习学习!!
想问下,我点击上传为什么一直显示在上传中。
功能很强大
我来看看 应该不错喔
我来看看 应该不错喔