互联网医疗怎样实现电子处方公式跨平台转存?

富文本编辑器集成文档导入与图片自动上传功能开发记录

作为一名技术开发人员,我独立搭建了一个网站,目前正着手解决富文本编辑器中粘贴 Word 图片以及支持多种文档导入且图片自动上传至服务器的问题。以下是我详细的查找过程与开发记录。

一、需求明确

(一)功能需求

  1. 粘贴功能:在百度富文本编辑器 UEditor 中粘贴 Word 内容时,其中的图片能够自动上传到服务器,服务器再将图片保存到对象存储(如阿里云、华为云等)。
  2. 文档导入功能:支持 Word、Excel、PPT、PDF 文档导入到富文本编辑器中,导入后图片同样自动上传至服务器并保存到对象存储,同时要保留文档的样式,包括字体、字号、颜色等信息。

(二)技术环境

  • 前端框架:vue2 - cli
  • 富文本编辑器:百度富文本编辑器 UEditor
  • 后端语言:PHP
  • 数据库:MySQL
  • 服务器:阿里云

二、查找解决方案

(一)在线资源搜索

我首先在各大技术论坛(如 CSDN、掘金)、开源社区(GitHub、Gitee)以及搜索引擎(百度、谷歌)上进行了广泛搜索。输入的关键词包括“UEditor 粘贴 Word 图片自动上传”“UEditor 导入 Word Excel PPT PDF 文档”“vue2 UEditor 文档导入图片上传”等。

在搜索过程中,我发现了一些相关的讨论和技术文章,但大多只是提到了部分功能的实现思路,缺乏完整的代码示例和详细的实现步骤。例如,有些文章介绍了如何通过修改 UEditor 的配置来实现粘贴图片的自动上传,但没有涉及到多种文档导入以及图片上传到对象存储的具体操作。

(二)加入交流群

为了能更直接地与同行交流经验,我加入了 QQ 群 223813913。在群里,我向大家描述了目前遇到的问题和需求,得到了不少热心同行的回应。

有同行建议我参考 UEditor 官方文档中关于自定义插件和后端接口的部分,通过编写自定义插件来实现文档导入和图片上传的功能。还有同行分享了他们之前类似项目的开发经验,提醒我注意文档格式解析的兼容性问题以及图片上传过程中的安全性问题。

三、开发过程

(一)前端部分(vue2 - cli + UEditor)

1. 引入 UEditor

在 vue2 项目中引入 UEditor,我按照官方文档的步骤进行了配置。首先下载 UEditor 的压缩包,解压后将相关文件放置在项目的 public 目录下。然后在 vue 组件中通过动态创建 script 标签的方式引入 UEditor 的 JS 文件,并初始化编辑器。

export default { mounted() { this.initUEditor(); }, methods: { initUEditor() { const script = document.createElement('script'); script.src = '/ueditor/ueditor.config.js'; script.onload = () => { const ueScript = document.createElement('script'); ueScript.src = '/ueditor/ueditor.all.min.js'; ueScript.onload = () => { this.ue = UE.getEditor('editor'); this.bindPasteEvent(); }; document.body.appendChild(ueScript); }; document.body.appendChild(script); }, bindPasteEvent() { this.ue.addListener('ready', () => { this.ue.addListener('afterPaste', this.handlePaste); }); }, handlePaste(html) { // 处理粘贴内容,提取图片并上传 console.log('粘贴内容:', html); // 这里可以添加代码来解析 html 中的图片并触发上传 } } };
2. 处理粘贴事件

为了实现粘贴 Word 图片自动上传,我监听了 UEditor 的afterPaste事件。在事件处理函数中,需要对粘贴的 HTML 内容进行分析,提取出其中的图片元素。由于 Word 粘贴过来的图片可能是以 base64 编码的形式存在,也可能是以外部链接的形式存在,因此需要进行分类处理。

handlePaste(html){constparser=newDOMParser();constdoc=parser.parseFromString(html,'text/html');constimages=doc.querySelectorAll('img');images.forEach(img=>{if(img.src.startsWith('data:image')){// 处理 base64 编码的图片this.uploadBase64Image(img.src);}else{// 处理外部链接图片(这里可能需要根据实际情况进一步处理,比如判断是否为合法链接等)console.log('外部链接图片:',img.src);}});},uploadBase64Image(base64Data){// 提取 base64 数据中的图片类型和纯数据部分constmatches=base64Data.match(/^data:(.+);base64,(.+)$/);if(matches&&matches.length===3){constmimeType=matches[1];constimageData=matches[2];// 调用后端接口上传图片this.$http.post('/api/uploadImage',{imageData:imageData,mimeType:mimeType}).then(response=>{console.log('图片上传成功:',response.data);// 替换编辑器中的图片链接为上传后的链接// 这里需要根据实际情况找到编辑器中对应的图片元素并进行替换}).catch(error=>{console.error('图片上传失败:',error);});}}
3. 文档导入功能

对于文档导入功能,由于 UEditor 本身并不直接支持多种文档的导入,因此需要借助第三方库来进行文档解析。我选择了 mammoth.js 来解析 Word 文档,对于 Excel、PPT 和 PDF,考虑使用相应的解析库(如 SheetJS 解析 Excel,pptxjs 解析 PPT,pdf.js 解析 PDF)。

以 Word 文档导入为例,我在前端添加了一个文件上传按钮,当用户选择 Word 文件后,使用 FileReader 读取文件内容,然后调用 mammoth.js 进行解析,将解析后的 HTML 内容插入到 UEditor 中。

import mammoth from'mammoth'; export default { methods: { handleFileChange(event) { const file = event.target.files[0]; if (file) { const reader = new FileReader(); reader.onload = (e) => { const arrayBuffer = e.target.result; mammoth.extractRawText({ arrayBuffer: arrayBuffer }) .then(result => { // 这里只是简单获取文本内容,实际需要获取包含样式的 HTML // 更完整的做法是使用 mammoth.convertToHtml mammoth.convertToHtml({ arrayBuffer: arrayBuffer }) .then(htmlResult => { this.ue.setContent(htmlResult.value); // 处理导入文档中的图片(如果有) this.processImportedImages(htmlResult.value); }); }) .catch(error => { console.error('文档解析失败:', error); }); }; reader.readAsArrayBuffer(file); } }, processImportedImages(html) { // 类似于粘贴事件处理中的图片处理逻辑 // 解析 html 中的图片并上传 } } };

(二)后端部分(PHP)

1. 图片上传接口

我编写了一个 PHP 接口来处理前端上传的图片数据。接口接收到图片的 base64 编码数据和图片类型后,将 base64 数据解码为二进制数据,然后上传到阿里云对象存储(OSS)。

'Base64 解码失败']);exit;}try{// 创建 OssClient 实例$ossClient=newOssClient($accessKeyId,$accessKeySecret,$endpoint);// 生成图片文件名$fileName=uniqid().'.'.pathinfo(parse_url($mimeType,PHP_URL_PATH),PATHINFO_EXTENSION);// 上传图片到 OSS$ossClient->putObject($bucket,$fileName,$binaryData);// 返回图片的 OSS 访问链接$objectUrl='https://'.$bucket.'.'.$endpoint.'/'.$fileName;echojson_encode(['url'=>$objectUrl]);}catch(OssException$e){echojson_encode(['error'=>$e->getMessage()]);}?>
2. 文档导入相关接口(预留)

对于文档导入功能,后端可能需要提供一些辅助接口,例如处理文档解析后的数据、存储文档相关信息到 MySQL 数据库等。目前这部分功能还在进一步完善中。

四、遇到的问题与解决方案

(一)图片上传失败

在开发过程中,遇到了图片上传失败的问题。经过排查,发现是由于阿里云 OSS 的权限配置不正确导致的。解决方法是检查并修改 OSS 的 Bucket 权限,确保 PHP 脚本有足够的权限进行文件上传操作。

(二)文档样式丢失

在导入 Word 文档时,发现部分样式(如字体、字号、颜色等)丢失。这是因为使用的文档解析库(mammoth.js)在解析过程中对样式的支持不够完善。解决方案是寻找更强大的文档解析库或者对解析后的 HTML 进行二次处理,手动添加丢失的样式。

五、总结与展望

通过这段时间的查找和开发,我已经基本实现了富文本编辑器中粘贴 Word 图片自动上传以及 Word 文档导入的功能,但 Excel、PPT 和 PDF 文档的导入功能还在进一步完善中。在开发过程中,与同行的交流和分享给了我很多帮助,让我能够更快地解决问题。

接下来,我将继续优化文档导入功能,确保各种文档的样式能够完整保留,并提高图片上传的稳定性和性能。同时,我也会将开发过程中的经验整理成文档,分享给更多的开发者,希望能为大家提供一些参考和帮助。

复制插件目录

引入插件文件

UEditor 1.4.3.3示例

注意:不要重复引入jquery,如果您的项目已经引入了jq,则不用再引入jq-1.4

在工具栏中增加插件按钮

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

初始化控件

varpos=window.location.href.lastIndexOf("/");varapi=[window.location.href.substr(0,pos+1),"asp/upload.asp"].join("");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:''});//加载控件

注意

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

点击查看详细教程

配置ImageMatch

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

ImageMatch:'',

点击参考链接

配置ImageUrl

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

ImageUrl:"",

点击查看详细教程

配置SESSION

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

效果

编辑器界面

导入Word文档,支持doc,docx

导入Excel文档,支持xls,xlsx

粘贴Word

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

Word转图片

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

导入PDF

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

导入PPT

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

上传网络图片

下载示例

点击下载完整示例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1159018.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国产化数据库如何存储网页编辑器中的动态公式?

针对在 Vue2 UEditor .NET Core 环境中实现 Word/Excel/PPT/PDF 粘贴导入且图片自动上传 的需求,结合你的技术栈和云服务(华为云 OBS),以下是可直接落地的开源解决方案: 一、核心方案:UEditor WordPast…

.NET MVC中如何支持教育行业的大文件夹上传解决方案?

【一个.NET程序员的悲喜交加:前端搞定了,后端求包养!】 各位道友好!俺是山西某个人.NET程序员,刚啃完《C#从入门到住院》,就被客户按头要求搞个20G大文件上传下载系统。现在前端用Vue3原生JS硬怼出了半成品…

如何搜索学术论文:实用方法与高效技巧指南

刚开始做科研的时候,我一直以为: 文献检索就是在知网、Google Scholar 里反复换关键词。 直到后来才意识到,真正消耗精力的不是“搜不到”,而是—— 你根本不知道最近这个领域发生了什么。 生成式 AI 出现之后,学术检…

怎么找出一篇论文的研究问题——实用技巧与方法解析

刚开始做科研的时候,我一直以为: 文献检索就是在知网、Google Scholar 里反复换关键词。 直到后来才意识到,真正消耗精力的不是“搜不到”,而是—— 你根本不知道最近这个领域发生了什么。 生成式 AI 出现之后,学术检…

机械CAD如何与网页编辑器实现公式参数同步?

Word粘贴与文档导入功能解决方案 作为江西IT行业网络公司的PHP工程师,我最近接到一个企业网站后台管理系统的新需求,需要实现Word粘贴和文档导入功能。以下是我的专业解决方案: 需求分析 Word粘贴功能:允许用户从Word复制内容并…

Springboot音乐网站890a8(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表项目功能:用户,歌手信息,歌曲分类,歌曲信息,热门推荐开题报告内容一、研究背景与意义随着互联网技术的飞速发展,音乐行业正经历从实体唱片向数字化、在线化的深刻转型。传统音乐平台存在版权分散、推荐精度低、社交互动弱等问题&#xf…

Springboot应急物资采购系统2548l(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表项目功能:学生,物资分类,物资商品,普通管理员开题报告内容一、研究背景与意义(一)现实背景近年来全球自然灾害与公共卫生事件频发,如2020年新冠疫情导致全球医疗物资缺口超20亿件,2021年河南暴雨造成应…

革了程序员再革打工人:Anthropic发布Cowork,Claude Code走进数字办公自动化

刚刚,Anthropic发布Cowork。 让Claude Code走进了数字办公自动化。 比如简单的桌面整理: 革了程序员再革打工人:Anthropic发布Cowork,Claude Code走进数字办公自动 让人震惊的是,Claude之父爆料Cowork的代码&#xf…

导师严选2026最新!9款AI论文网站测评:本科生毕业论文必备

导师严选2026最新!9款AI论文网站测评:本科生毕业论文必备 2026年AI论文工具测评:为何需要一份权威榜单? 随着人工智能技术的不断进步,越来越多的本科生开始借助AI工具辅助毕业论文写作。然而,市面上的AI论文…

搜索研究文献的渠道有哪些

刚开始做科研的时候,我一直以为: 文献检索就是在知网、Google Scholar 里反复换关键词。 直到后来才意识到,真正消耗精力的不是“搜不到”,而是—— 你根本不知道最近这个领域发生了什么。 生成式 AI 出现之后,学术检…

告别昂贵人工标注,英伟达全自动视频理解助力小模型逆袭顶级大模型

麻省理工学院 (MIT)、英伟达、密歇根大学、加州大学伯克利分校和斯坦福大学刚刚推出了FoundationMotion(又称Wolf V2)。FoundationMotion让AI读懂物理世界的运动逻辑,用自动化工厂重塑视频理解与推理,告别昂贵人工标注。心理学家B…

十二大顶尖大模型决战华尔街与量化投资

大模型越来越强,人们开始探索用大模型来做量化投资。比如25年11月火遍全网的Alpha Arena全球首个AI投资大赛,现在依然在进行(全军覆没囧...)。AI能否战胜市场?一直没有系统的研究报告或论文,刚刚,一篇重磅论…

顶峰相见,「算网杯」2025 AIGC 开发者大赛1月17日苏州迎来决赛!

1月17日,「算网杯」2025 AIGC 开发者大赛即将在中国科学技术大学苏州高等研究院迎来精彩决赛!大赛自启动便备受瞩目,吸引 500 余名企业、高校开发爱好者踊跃参与。经过层层激烈角逐,最终 99 支实力强队脱颖而出,成功晋…

医疗多任务学习适配层优化

📝 博客主页:jaxzheng的CSDN主页 医疗多任务学习适配层优化:动态调整策略应对医疗数据异质性目录医疗多任务学习适配层优化:动态调整策略应对医疗数据异质性 引言:医疗AI的瓶颈与适配层的崛起 维度四:问题与…

python实现dbc生成矩阵(csv格式)

直接上代码。必要依赖库自行安装: #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ dbc_to_matrix.py 解析 DBC 文件(不依赖 cantools),导出 signals.csv, messages.csv, 并为每个消息生成 64-bit bitmap 文本…

普拉替尼pralsetinib治疗RET融合阳性肺癌的快速客观缓解与治疗持续时间分析

RET融合作为非小细胞肺癌(NSCLC)中的罕见驱动基因变异,其发生率虽仅占1%-2%,但传统化疗与免疫治疗对此类患者的疗效有限,生存期长期停滞不前。普拉替尼(Pralsetinib)作为全球首个高选择性RET酪氨…

手把手教你用8款免费AI论文工具:从零到一轻松搞定知网查重,不留AIGC痕迹!

一、先搞懂:为什么你需要AI论文工具?(附8款工具对比表) 作为研究生,你是不是经常遇到这些问题? 开题报告卡了一周,框架怎么搭都不对;导师批注密密麻麻,改到第三版还是“…

震惊!这家胶片定制厂竟让照片“活”过来,背后真相揭秘!

震惊!这家胶片定制厂竟让照片“活”过来,背后真相揭秘!在数字影像泛滥的今天,一张能够“呼吸”、仿佛承载着时光温度的实体照片,显得尤为珍贵。近期,一家专注于胶片定制与影像艺术化处理的工厂,…

‌UI自动化终于不崩了!我用VLM让脚本自己修复定位,维护成本直降80%

当UI自动化成为“高维护成本的奢侈品”‌ 在2024年之前,我的团队每天有超过3小时的时间花在修复UI自动化脚本上。 不是因为测试逻辑错了,而是因为——‌按钮位置偏移了2像素‌,‌加载动画延迟了0.5秒‌,‌CSS类名被前端重构改成了…

别再用Selenium了!2026年主流工具已全面接入AI视觉识别

软件测试的十字路口 在2026年的今天,软件测试行业正经历一场静默的革命。曾几何时,Selenium作为自动化测试的黄金标准,被无数测试工程师奉为圭臬。然而,随着人工智能(AI)技术的爆发式发展,特别…