海南PHP程序员的CMS企业官网开发日记:Word粘贴+多格式导入插件全攻略(附源码)

一、项目背景(打工人版)

"兄弟们,最近接了个CMS企业官网的活儿,客户是传统企业,领导层平均年龄50+,非要让编辑器支持Word一键粘贴+多格式导入,说是什么‘提升高龄用户操作体验’。预算只有680元,连顿海南鸡饭都吃不起,还得搞定Word/Excel/PPT/PDF导入+公式渲染+微信内容兼容,这哪是开发,简直是渡劫!

核心需求

  1. 编辑器增强:UEditor工具栏加按钮,支持Word粘贴+多格式导入
  2. 样式保留:字体/颜色/表格/形状/公式(Latex+MathType)全保留
  3. 公式兼容:Latex转MathML,多端高清显示
  4. 云存储:图片自动上传阿里云OSS
  5. 微信兼容:支持公众号内容导入
  6. 预算控制:总成本≤680元(能回本就行)

技术栈

  • 前端:Vue2 CLI + UEditor(百度开源版)
  • 后端:PHP(Zend Studio)
  • 存储:阿里云OSS(学生机免费额度+按量付费)
  • 数据库:MySQL(客户已有)

二、技术实现(抄作业版)

1. 前端插件开发(UEditor按钮+粘贴处理)

步骤1:在ueditor/dialogs/下新建multiimport文件夹,创建multiimport.htmlmultiimport.js

multiimport.js(核心代码):

UE.registerPlugin('multiimport', function(editor) {
    editor.registerCommand('multiimport', {
        execCommand: function() {
            // 弹窗选择导入类型
            const type = prompt('请输入导入类型(word/excel/ppt/pdf/wechat)');
            if (!type) return;

            // 触发文件上传
            const input = document.createElement('input');
            input.type = 'file';
            input.accept = {
                word: '.doc,.docx',
                excel: '.xls,.xlsx',
                ppt: '.ppt,.pptx',
                pdf: '.pdf',
                wechat: '.html,.htm'
            }[type] || '*';

            input.onchange = async (e) => {
                const file = e.target.files[0];
                if (!file) return;

                // 调用后端API处理
                const formData = new FormData();
                formData.append('file', file);
                formData.append('type', type);

                const res = await fetch('/api/upload/multiimport.php', {
                    method: 'POST',
                    body: formData
                });
                const data = await res.json();
                editor.execCommand('insertHtml', data.content);
            };
            input.click();
        }
    });

    // 添加工具栏按钮
    editor.addListener('ready', () => {
        editor.ui.addToolbarButton('multiimport', {
            title: '多格式导入',
            onclick: () => editor.execCommand('multiimport')
        });
    });
});

步骤2:在ueditor.config.js中注册插件:

UE.plugin.register('multiimport', '../../dialogs/multiimport/multiimport.js');

2. 后端PHP处理(文件解析+OSS上传)

关键逻辑

  • PHPWord处理Word(支持.docx)
  • PHPExcel处理Excel(支持.xlsx)
  • PHPPowerPoint解析PPT
  • TCPDFFPDI提取PDF内容
  • DOMDocument处理微信HTML内容

multiimport.php

uploadFile($bucket, $objectName, $imagePath);
        return "https://{$bucket}.{$endpoint}/{$objectName}";
    } catch (OssException $e) {
        return false;
    }
}

// 解析Word(简化版)
function parseWord($filePath) {
    $phpWord = \PhpOffice\PhpWord\IOFactory::load($filePath);
    $html = '';
    foreach ($phpWord->getSections() as $section) {
        foreach ($section->getElements() as $element) {
            if (method_exists($element, 'getElements')) {
                foreach ($element->getElements() as $child) {
                    if ($child instanceof \PhpOffice\PhpWord\Element\Text) {
                        $html .= '' . htmlspecialchars($child->getText()) . '';
                    }
                }
            }
        }
    }
    return $html;
}

// 返回JSON
header('Content-Type: application/json');
echo json_encode(['content' => $htmlContent]);
?>

3. Latex公式转MathML(白嫖方案)
  • 前端:用MathJax渲染(CDN引入)
  • 后端:调用pandoc命令行工具转换(需服务器安装)

Vue组件中使用




export default {
  data() { return { content: '$$E=mc^2$$' }; },
  mounted() {
    const script = document.createElement('script');
    script.src = 'https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js';
    document.head.appendChild(script);
  }
};


三、赚钱骚操作(回血指南)

  1. 接单群躺赚

    • 群号:223813913(新人领1~99元红包)
    • 推荐客户拿20%提成(1万订单赚2000)
    • 黄金会员50%分成(2万订单直接提1万)
  2. 项目包装技巧

    • GitHub标注"支持传统企业高龄用户"(显得高大上)
    • 简历写"精通UEditor二次开发,实现多格式导入+公式渲染"
  3. 内推福利

    • 群里师兄师姐发大厂内推码(实习/校招优先)
    • 晒offer领红包(最高888元)

四、完整代码包获取方式

  1. GitHub仓库

    • 地址:https://github.com/yourname/cms-multiimport-plugin
    • 密码:加群领取(防止白嫖党)
  2. 技术支持

    • 群内@管理员"技术支援"(优先响应付费用户)
    • 付费咨询:199元/次(包调试成功)

最后毒鸡汤
“打工是不可能打工的,这辈子都不可能打工!但接单可以——尤其是这种‘帮高龄用户粘贴Word’的活儿,简单粗暴还能赚钱!赶紧加群,错过这村没这店!” 🚀

(附:群内每日分享"如何用Zend Studio调试UEditor插件""MySQL性能优化"等干货)

在工具栏中增加插件按钮

//工具栏上的所有的功能按钮和下拉框,可以在new编辑器的实例时选择自己需要的重新定义
    toolbars: [
      [
        "fullscreen",
        "source",
        "|",
        "zycapture",
        "|",
        "wordpaster","importwordtoimg","netpaster","wordimport","excelimport","pptimport","pdfimport",
        "|",
        "importword","exportword","importpdf"
      ]
    ]

初始化控件

image

        var pos = window.location.href.lastIndexOf("/");
        var api = [
            window.location.href.substr(0, pos + 1),
            "asp/upload.asp"
        ].join("");
        WordPaster.getInstance({
			//上传接口:http://www.ncmem.com/doc/view.aspx?id=d88b60a2b0204af1ba62fa66288203ed
            PostUrl: api,
			//为图片地址增加域名:http://www.ncmem.com/doc/view.aspx?id=704cd302ebd346b486adf39cf4553936
            ImageUrl: "",
            //设置文件字段名称:http://www.ncmem.com/doc/view.aspx?id=c3ad06c2ae31454cb418ceb2b8da7c45
            FileFieldName: "file",
            //提取图片地址:http://www.ncmem.com/doc/view.aspx?id=07e3f323d22d4571ad213441ab8530d1
            ImageMatch: ''			
        });//加载控件

注意

如果接口字段名称不是file,请配置FileFieldName。ueditor接口中使用的upfile字段
image
点击查看详细教程

配置ImageMatch

匹配图片地址,如果服务器返回的是JSON则需要通过正则匹配

ImageMatch: '',

点击参考链接

配置ImageUrl

为图片地址增加域名,如果服务器返回的图片地址是相对路径,可通过此属性添加自定义域名。

ImageUrl: "",

点击查看详细教程

配置SESSION

如果接口有权限验证(登陆验证,SESSION验证),请配置COOKIE。或取消权限验证。
参考:http://www.ncmem.com/doc/view.aspx?id=8602DDBF62374D189725BF17367125F3

效果

编辑器界面

image

导入Word文档,支持doc,docx

粘贴Word和图片

导入Excel文档,支持xls,xlsx

粘贴Word和图片

粘贴Word

一键粘贴Word内容,自动上传Word中的图片,保留文字样式。
粘贴Word和图片

Word转图片

一键导入Word文件,并将Word文件转换成图片上传到服务器中。
导入Word转图片

导入PDF

一键导入PDF文件,并将PDF转换成图片上传到服务器中。
导入PDF转图片

导入PPT

一键导入PPT文件,并将PPT转换成图片上传到服务器中。
导入PPT转图片

上传网络图片

自动上传网络图片

下载示例

点击下载完整示例

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐