联系官方销售客服

1835022288

028-61286886

分享经验 版主:论坛审计组
利用LibreOffice将word文件导入到编辑器
类型:迅睿CMS 更新时间:2024-04-01 15:51:07

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


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

     F3C(W[E(PH97OH90_EH}~_3

  前端html和js代码代码如下

  

<!--上传word 前端html和js-->

<div class="form-group" id="dr_row_word">
  <label class="col-md-2 control-label">{dr_lang('上传word文档')}</label>
  <div class="col-md-9">
    <div class="row fileupload-buttonbar" id="fileupload_word">
      <div class="col-lg-12"> <span class="btn blue btn-sm fileinput-button"> <i class="fa fa-plus"></i> <span> 上传word文档 </span>
        <input type="file" name="file_data">
        </span>
        <button onclick="fileupload_file_remove('word')" style="margin-left: 5px;display:none" type="button" class="btn red btn-sm fileinput-delete"> <i class="fa fa-trash"></i> <span> 删除 </span> </button>
        <span class="fileupload-process"> </span> </div>
      <div class="col-lg-12 fileupload-progress fade" style="display:none">
        <div class="progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100">
          <div class="progress-bar progress-bar-success" style="width:0%;"> </div>
        </div>
      </div>
    </div>
    <p class="finecms-file-ts">上传格式要求:doc、docx(2MB)</p>
    <div id="fileupload_word_files" class="files">
      <input type="hidden"  id="dr_word" name="data[thumb]" value="" />
    </div>
    <!--  <link href="/static/assets/global/plugins/jquery-fileupload/css/jquery.fileupload.css?v=20200824095754" rel="stylesheet" type="text/css" />
                  <script src="/static/assets/global/plugins/jquery-fileupload/js/jquery.fileupload.js?v=20200824095754" type="text/javascript"></script> --> 
    <script type="text/javascript">
 $(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":"<div  id=\"dr_thumb_files_row\" class=\"file_row_html files_row\"><div><div class=\"files_row_preview preview\">{preview}<\/div><\/div><input type=\"hidden\"  id=\"dr_thumb\" class=\"files_row_id\" name=\"data[thumb]\" value=\"{id}\" \/><\/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: '<i class="fa fa-edit"></i> ',
            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'
        });
    });


}     
       
</script></div>
</div>
<!---->


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.*?>(.*?)<\/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('&ldquo;','"',$s);
   $s=str_replace('&rdquo;','"',$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
    学习下看看效果