太阳成游戏网站

联系官方销售客服

QQ1835022299

028-61286886

分享经验 版主:论坛审计组
利用LibreOffice将word文件导入到编辑器
类型:太阳成游戏网站CMS 更新时间:2024-12-09 21:24:08

利用LibreOffice将word文件导入到编辑器中,代码复杂点,但是导入效果非常好,基本上跟word内容一致


1、修改发布内容的模板文件share_post.html,加入html和js代码实现导入word的界面

     F3C(W[E(PH97OH90_EH}~_3

  前端html和js代码代码如下

  




  {dr_lang('上传word文档')}
  
    
          上传word文档 
        
        
           删除  
          
                           
        
      
    
    上传格式要求:doc、docx(2MB)

                
            $(function() {   fileupload_file_init2({"name":"word","ext":" \/(\\.|\\\/)(doc||docx)$\/i","size":10485760,"url":"\/index.php?s=api&c=file&token={dr_get_csrf_token()}&siteid=1&m=upload_word&fid=2","unused_url":"\/index.php?s=api&c=file&m=input_file_list&fid=2","input_url":"\/index.php?s=api&c=file&m=input_file_url&token={dr_get_csrf_token()}&siteid=1&fid=2&file=&one=1","tpl":"
{preview}<\/div><\/div><\/div>","area":["70%","70%"],"chunk":0});  });           //初始化组件 function fileupload_file_init2(json){  //     $("#fileupload_"+json.name).fileupload({         disableImageResize: false,         autoUpload: true,         maxFileSize: json.size,         url: json.url,         dataType: "json",         acceptFileTypes: json.ext,         maxChunkSize: json.chunk,         progressall: function (e, data) {                    },         add: function (e, data) {    var tishi = layer.msg('文件上传中..', {icon: 16,shade: 0.3,time: false});             $("#fileupload_"+json.name+" .fileupload-progress").hide();             data.submit();         },         done: function (e, data) {             $("#fileupload_"+json.name+" .fileupload-progress").addClass("fade");             $("#fileupload_"+json.name+" .fileupload-progress").hide();             if (data.result.code == 0) {                  dr_tips(data.result.code, data.result.msg);     return false;             }            UE.getEditor('dr_content').setContent(data.result.msg);      dr_tips(data.result.code, '读取完成!');          },         fail: function (e, data) {                       dr_tips(0, "系统故障:"+data.errorThrown);                    },     });         $("#fileupload_"+json.name+" .fileinput-url").click(function(){         layer.open({             type: 2,             title: ' ',             fix:true,             scrollbar: false,             shadeClose: true,             shade: 0,             area: json.area,             btn: [ lang['ok'] ],             yes: function(index, layero){                 var body = layer.getChildFrame('body', index);                 // 延迟加载                 var loading = layer.load(2, {                     time: 10000000                 });                 $.ajax({type: "POST",dataType:"json", url: json.input_url, data: $(body).find('#myform').serialize(),                     success: function(json2) {                         layer.close(loading);                         if (json2.code == 1) {                             layer.close(index);                             var tpl = json.tpl;                             tpl = tpl.replace(/\{preview\}/g, json2.data.preview);                             tpl = tpl.replace(/\{id\}/g, json2.data.id);                             tpl = tpl.replace(/\{filepath\}/g, json2.data.file);                             tpl = tpl.replace(/\{title\}/g, json2.data.name);                             tpl = tpl.replace(/\{upload\}/g, json2.data.upload);                             $('#fileupload_'+json.name+'_files').html(tpl);                             $('#fileupload_'+json.name).find('.fileinput-delete').show();                             dr_tips(1, json2.msg);                         } else {                             dr_tips(0, json2.msg);                         }                         return false;                     }                 });                 return false;             },             success: function(layero, index){                 // 主要用于权限验证                 var body = layer.getChildFrame('body', index);                 var json2 = $(body).html();                 if (json2.indexOf('"code":0') > 0 && json2.length < 150){                     var obj = JSON.parse(json2);                     layer.close(index);                     dr_tips(0, obj.msg);                 }                 if (json2.indexOf('"code":1') > 0 && json2.length < 150){                     var obj = JSON.parse(json2);                     layer.close(index);                     dr_tips(1, obj.msg);                 }             },             content: json.input_url+'&is_ajax=1'         });     }); }             


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]));       
        }
    }


导入效果如图:

C[H(ZYR]7O8WN~VMK@%Q_Z8

  9R02KC}X@{17$E0%N$UU9AD


回帖
  • AAAA染
    #1楼    AAAA染
    2020-09-07 23:36:35
    Firefox 80.0 1
    功能很强大
  • 张明宇
    #2楼    张明宇
    2020-09-07 23:39:00
    Chrome 0
    影响升级吗?
  • K大帅
    #3楼    K大帅
    2020-09-08 09:16:53
    Chrome 0
    实现导入word文档
  • 易学习
    #4楼    易学习
    2020-09-08 09:18:58
    Chrome 0
    修改发布内容的模板文件share_post.html,这句话就是修改系统文件了,为什么不用diy字段呀
  • 繁星
    #5楼    繁星
    2020-09-08 14:34:01
    Chrome 0
    学习下!!!!!!!!!!!!
  • chengjp
    #6楼    chengjp
    2020-09-08 20:03:39
    Chrome 0
    易学习 好建议。
  • chengjp
    #7楼    chengjp
    2020-09-08 20:04:22
    Chrome 0
    张明宇 可以做到不影响升级
  • 流浪的乞丐
    #8楼    流浪的乞丐
    2020-09-26 19:15:37
    小米手机 0
    功能强大。老哥,挺好的!!!
  • 黄老邪
    #9楼    黄老邪
    2020-09-26 19:26:48
    Chrome 0
    学习一下,正在找这个
  • 西山居
    #10楼    西山居
    2020-11-20 20:10:52
    Chrome 0
    看看
  • 吃不痴
    #11楼    吃不痴
    2021-03-11 23:15:26
    Chrome 0
    学习一下
  • kitenchen
    #12楼    kitenchen
    2021-12-22 17:12:01
    Chrome 0
    LibreOffice 在非windows能装吗
  • hflingfan
    #13楼    hflingfan
    2022-05-12 16:22:53
    Chrome 0
    学习一下
  • 找寻知音
    #14楼    找寻知音
    2022-05-16 21:33:34
    华为手机 0
    哈哈,学习了
  • ljcdada
    #15楼    ljcdada
    2022-07-05 17:24:11
    Chrome 0
    哈哈,学习了
  • jazzfreak
    #16楼    jazzfreak
    2022-07-11 13:51:41
    Chrome 0
    很不错很不错
  • 昵称
    #17楼    昵称
    2022-07-14 17:12:37
    Edge 0
    学习学习!!
  • gaogaokan
    #18楼    gaogaokan
    2022-09-06 09:31:02
    Chrome 0




    学习学习!!
  • xiaobo888
    #19楼    xiaobo888
    2022-09-09 11:33:14
    Chrome 0
    学习一下,学习学习!!
  • 胡银萍
    #20楼    胡银萍
    2022-09-09 15:53:09
    Chrome 0
    1111111
  • 颗粒国
    #21楼    颗粒国
    2022-09-25 12:11:19
    Firefox 105.0 0
    希望这个代码有帮助
  • siyuid
    #22楼    siyuid
    2022-10-02 11:52:23
    Chrome 0
    希望这个代码有帮助
  • 李白怕喝酒
    #23楼    李白怕喝酒
    2022-10-11 14:55:46
    Firefox 104.0 0
    希望这个代码有帮助
  • 丛林灰太狼
    #24楼    丛林灰太狼
    2022-10-12 11:14:17
    Edge 0
    这个可以好好学习下
  • tugoy
    #25楼    tugoy
    2022-10-14 16:19:29
    Chrome 0
    需要学习下
  • tugoy
    #26楼    tugoy
    2022-10-14 16:20:07
    Chrome 0
    回复了 怎么看不见呢
  • sbmtv5202
    #27楼    sbmtv5202
    2022-10-18 14:39:04
    Chrome 0
    有很多网站需要这功能,厉害啊
  • yin
    #28楼    yin
    2022-10-19 17:35:54
    Chrome 0
    需要学习下
  • ppmm
    #29楼    ppmm
    2022-11-10 16:07:24
    Chrome 0
    学习刻苦能不能使用上
  • qijifuwu
    #30楼    qijifuwu
    2022-11-13 00:06:20
    小米手机 0
    学习了 感谢分享
  • zhangcy
    #31楼    zhangcy
    2023-01-03 15:13:50
    Chrome 0
    学习了 感谢分享
  • fkenuiabcd
    #32楼    fkenuiabcd
    2023-01-06 05:45:49
    华为手机 0
    学习一下正好要的
  • 2718405296
    #33楼    2718405296
    2023-02-20 13:45:56
    Edge 0
    AAAA染 确实
  • coffer26
    #34楼    coffer26
    2023-03-21 07:45:48
    Edge 0
    学习一下学习一下
  • 种花家
    #35楼    种花家
    2023-03-24 14:58:13
    Chrome 0
    看看效果看看效果
  • 唯墨
    #36楼    唯墨
    2023-03-26 19:25:30
    Chrome 0
    学习学习一下,看看效果如何
  • xiaohaima888
    #37楼    xiaohaima888
    2023-05-27 17:27:11
    Chrome 0
    楼主牛逼了,正好是我需要的。
  • xiaohaima888
    #38楼    xiaohaima888
    2023-06-02 16:29:27
    Chrome 0

    19d0e424222d83bc20c4826c910e81c
    想问下,我点击上传为什么一直显示在上传中。
  • 1309617271
    #39楼    1309617271
    2023-06-03 17:59:26
    Chrome 0
    牛的啊楼主6666666666666666666
  • guibing
    #40楼    guibing
    2023-06-19 15:30:41
    Edge 0
    学习下看看效果
  • yuhuibar
    #41楼    yuhuibar
    2023-07-03 10:46:16
    Edge 0
    太好了,感谢分享。
  • 31673soft
    #42楼    31673soft
    2024-03-22 07:42:02
    Edge 0
    不错不错,我要看看
  • 晕菜菜
    #43楼    晕菜菜
    2024-03-29 23:17:50
    Chrome 0
    学习,谢谢楼主分享
  • 学习狂人
    #44楼    学习狂人
    2024-04-01 13:12:08
    Chrome 0
    • 功能很强大

  • 大鱼
    #45楼    大鱼
    2024-04-01 15:51:07
    Chrome 0
    学习下看看效果
  • 凌云大大
    #46楼    凌云大大
    2024-07-25 17:01:19
    Chrome 0
    我来看看 应该不错喔
  • (~ ̄(OO) ̄)ブ
    #47楼    (~ ̄(OO) ̄)ブ
    2024-07-27 16:43:25
    Edge 0

    我来看看 应该不错喔

    我来看看 应该不错喔

  • 华华呀
    #48楼    华华呀
    2024-12-09 21:24:08
    Chrome 0
    我来看看 应该不错喔