当前位置: 首页 > news >正文

医院HIS系统如何解决CKEditor粘贴Word公式格式丢失问题?

Word一键转存CMS升级大冒险

📅 开发日志:2023年11月15日

大家好!我是广西某高校软件工程专业的"码农小白",正在为我的CMS新闻管理系统做一个超酷的升级——让Word内容能一键粘贴并自动上传图片!下面记录我的开发历程和踩坑经验。

🧐 需求分析

我需要实现:

  1. Word内容粘贴保留所有样式
  2. 图片自动上传到阿里云OSS
  3. 支持LaTeX转MathML
  4. 多终端公式高清显示
  5. 支持Office全家桶导入

预算:99元(穷学生的倔强)

🔍 技术选型过程

第一步:编辑器插件调研

CKEditor虽然有Paste from Word插件,但功能有限,于是我开始全网搜索:

  1. TinyMCE:强大的Word粘贴功能,但商业版超预算
  2. WangEditor:国产优秀,但Word支持一般
  3. UEditor:百度出品,已停止维护
  4. KindEditor:太老旧
  5. CKEditor + 自定义插件:最终选择!因为:
    • 已有基础
    • 插件系统完善
    • 社区活跃

发现宝藏:GitHub上找到ckeditor5-paste-from-office开源插件!🎉

💻 技术方案

前端方案

  • Vue2 + CKEditor5 + paste-from-office插件
  • 自定义图片上传适配器

后端方案

  • PHP处理文件上传
  • 阿里云OSS SDK
  • MathJax处理公式转换

🛠️ 开发实录

第一步:安装CKEditor5
npminstall--save @ckeditor/ckeditor5-vue @ckeditor/ckeditor5-build-classicnpminstall--save @ckeditor/ckeditor5-paste-from-office
第二步:自定义Vue组件
importClassicEditorfrom'@ckeditor/ckeditor5-build-classic';importPasteFromOfficefrom'@ckeditor/ckeditor5-paste-from-office/src/pastefromoffice';classMyUploadAdapter{constructor(loader){this.loader=loader;}upload(){returnthis.loader.file.then(file=>{returnnewPromise((resolve,reject)=>{// 这里调用你的PHP上传接口constformData=newFormData();formData.append('file',file);axios.post('/api/upload',formData).then(response=>{resolve({default:response.data.url});}).catch(error=>{reject('上传失败: '+error);});});});}}exportdefault{data(){return{editor:ClassicEditor,editorData:'',editorConfig:{extraPlugins:[PasteFromOffice],pasteFromOffice:{styles:true,formatting:true},image:{toolbar:['imageTextAlternative','|','imageStyle:alignLeft','imageStyle:full','imageStyle:alignRight'],styles:['full','alignLeft','alignRight']},math:{engine:'mathjax',outputType:'script',forceOutputType:false}}}},methods:{onEditorReady(editor){editor.plugins.get('FileRepository').createUploadAdapter=(loader)=>{returnnewMyUploadAdapter(loader);};}}}
第三步:PHP后端处理
uploadFile($bucket,$object,$file['tmp_name']);$signedUrl=$ossClient->signUrl($bucket,$object,3600);echojson_encode(['url'=>$signedUrl,'status'=>'success']);}catch(OssException$e){echojson_encode(['error'=>$e->getMessage(),'status'=>'error']);}}

🌟 公式处理方案

为了支持LaTeX公式,我找到了MathJax:

MathJax = { tex: { inlineMath: [['$', '$'], ['\$', '\$']] }, svg: { fontCache: 'global' } };

🐛 踩坑记录

  1. Word表格样式丢失

    • 解决:添加CSS样式强制继承
    .ck-content table{border-collapse:collapse;width:100%;}
  2. 图片上传失败

    • 原因:阿里云OSS跨域问题
    • 解决:在OSS控制台设置CORS规则
  3. 公式显示异常

    • 解决:使用MathJax渲染后手动触发重新渲染
    if(window.MathJax){MathJax.typesetPromise();}

📦 插件打包

由于项目需要,我整理了一个完整的插件包结构:

word-paste-plugin/ ├── ckeditor.js # 自定义构建的CKEditor ├── paste-from-office/ # 官方插件 ├── image-upload/ # 自定义图片上传适配器 ├── mathml-support/ # 公式支持插件 └── demo/ # 示例代码

💰 99元预算分配

  1. CKEditor商业插件授权:0元(使用开源方案)
  2. MathJax服务:0元(使用CDN)
  3. 阿里云OSS:已包含在现有服务中
  4. 咖啡:99元(开发必备燃料)☕

🤝 求同行交流

欢迎加入我们的技术交流群:

  • QQ群:223813913
  • 福利:新人红包1-99元
  • 内容:技术讨论、项目合作、工作内推

🏆 最终效果

现在我的CMS可以:

  1. 完美粘贴Word内容
  2. 自动上传图片到OSS
  3. 高清显示公式
  4. 支持多平台查看

整个开发耗时2周,喝了7杯咖啡,掉了若干头发,但成就感爆棚!

给同行的建议

  • 先尝试开源方案
  • 仔细阅读文档
  • 加入社区讨论
  • 做好备份(血泪教训)

希望我的经验对你有帮助!如果有问题,欢迎加群交流~ 🚀

复制插件

说明:此教程以CKEditor4.x为例,使用其他编辑器的查看对应教程。
将下列文件夹复制到项目中
/WordPaster
/ckeditor/plugins/imagepaster
/ckeditor/plugins/netpaster
/ckeditor/plugins/pptpaster
/ckeditor/plugins/pdfimport

上传插件

上传插件文件夹

将imagepaster,netpaster文件夹上传到现有项目ckeditor/plugins目录中

在工具栏中增加插件按钮

引用js

初始化控件

WordPaster.getInstance({//上传接口:http://www.ncmem.com/doc/view.aspx?id=d88b60a2b0204af1ba62fa66288203edPostUrl:api,//为图片地址增加域名:http://www.ncmem.com/doc/view.aspx?id=704cd302ebd346b486adf39cf4553936ImageUrl:"",//设置文件字段名称:http://www.ncmem.com/doc/view.aspx?id=c3ad06c2ae31454cb418ceb2b8da7c45FileFieldName:"file",//提取图片地址:http://www.ncmem.com/doc/view.aspx?id=07e3f323d22d4571ad213441ab8530d1ImageMatch:'',Cookie:'PHPSESSID='});//加载控件

配置上传接口

注意

1.如果接口字段名称不是file,请配置FileFieldName。ueditor接口中使用的upfile字段

点击查看详细教程

配置ImageMatch

用于匹配JSON数据,

点击查看详细教程

配置ImageUrl

用于为图片增加域名前缀

点击查看详细教程

配置Session

如果接口有权限验证(登陆验证,SESSION验证),请配置COOKIE。或取消权限验证。
参考:点击查看详细教程

说明

1.请先测试您的接口:点击查看详细教程

功能演示

编辑器界面

导入Word文档,支持doc,docx

导入Excel文档,支持xls,xlsx

粘贴Word

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

Word转图片

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

导入PDF

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

导入PPT

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

上传网络图片

一键自动上传网络图片,自动下载远程服务器图片,自动上传远程服务器图片

下载示例

点击下载完整示例

http://www.jsqmd.com/news/369801/

相关文章:

  • Opencv 学习笔记:像素亮暗交界点检测 + 鼠标交互操作
  • 计算机毕业设计springboot博客系统的设计与实现 基于SpringBoot框架的个人内容发布平台的设计与实现 基于Java Web的在线日志分享系统的设计与开发
  • python微信小程序的社区老年人健康管理系统
  • python微信小程序的高校自习室在线预约系统
  • JAVA如何通过切片方式实现大文件上传?
  • 军工项目如何通过CKEditor插件实现Word公式精准粘贴?
  • python碎片化驾考学习系统 驾校考试微信小程序
  • 分块上传大文件在JAVA网页中如何实现?
  • Vue+Node.js+express象棋协会赛事活动管理系统
  • 2026年无锡好用的电子元器件采购渠道推荐,看看哪家口碑好 - 工业设备
  • 计算机毕业设计springboot在线农产品购物网站 基于Spring Boot的生鲜农产品电商平台设计与实现 乡村特产在线销售系统开发——采用Spring Boot框架
  • FreeSWITCH 1.10.12 在 Debian 最新版本系统中的编译指南
  • JAVA分段上传大文件到网页的解决方案是什么?
  • 2026年中药培训机构费用大揭秘,看看哪家收费更合理 - myqiye
  • 视频大文件在JAVA网页上传中怎么解决?
  • 盘点2026年口碑好的悬臂货架型材厂家,哪家更值得选 - mypinpai
  • 生鲜配送路线规划 软件 - 资讯焦点
  • 2026控油去屑洗发水最新实测,精准去油屑+快速止痒,用户公认口碑最好 - 资讯焦点
  • 农业大数据平台如何通过CKEditor导入带公式的Word文档?
  • 2026年口碑好的凸轮分度器品牌排名,稳定分度器选购指南 - 工业品牌热点
  • 两个bm|分块
  • 闭眼入!自考必备AI论文写作软件,千笔ai写作 VS WPS AI
  • 已读不回 387 次后,AI 把我的“垃圾简历”改成了面邀收割机
  • 从此告别拖延 8个降AIGC工具测评:本科生降AI率必备指南
  • 雷视一体机RV943产品易用性界面检测车流量功能调试指导
  • nw打包成exe文件
  • 别再瞎找了!专科生论文神器 —— 千笔·专业学术智能体
  • 聊聊郑东新区口碑好的海鲜烧烤喝酒好去处有哪些 - 工业设备
  • 照着用就行:自考必备的降AI率平台,千笔·降AIGC助手 VS 灵感ai
  • Linux命令-lsb_release(显示发行版本信息)