杭州哪家网站建设公司好,企业网站seo策略,网站开发 男生,网页美工是什么江苏网安学长的CMS文档神器#xff08;99元实战版#xff09;
“嘿#xff0c;各位江湖好汉#xff01;本菜鸟今天要搞个大事——给我的CMS系统装个’Word内容一键粘贴’的核武级功能#xff01;毕竟导师催论文、学校发新闻都靠它了#xff0c;再不升级怕是要被导师的’…江苏网安学长的CMS文档神器99元实战版“嘿各位江湖好汉本菜鸟今天要搞个大事——给我的CMS系统装个’Word内容一键粘贴’的核武级功能毕竟导师催论文、学校发新闻都靠它了再不升级怕是要被导师的’死亡凝视’盯出洞来…”一、方案亮点学长亲测版开箱即用解压即插TinyMCE工具栏秒变文档神器按钮亲测Vue2兼容全格式兼容Word/Excel/PPT/PDF/公众号内容全覆盖WPS粘Word也不崩公式高清Latex自动转MathML手机/平板/小程序都能高清显示实测iPhone 14 Pro Max没问题预算友好99元买断源码含部署教程终身免费升级比奶茶还划算跨平台适配Windows/macOS/Linux/CentOS/Ubuntu全支持宿舍台式机实验室服务器都能跑二、前端实现TinyMCE插件集成1. 插件目录结构直接丢进TinyMCE的plugins文件夹/tiny-mce/plugins/doc_magic/ ├─ dialog.html # 多功能操作面板Vue2适配版 ├─ doc_magic.js # 核心插件逻辑超简单就200行 └─ style.css # 样式文件兼容IE82. 核心代码doc_magic.js—— 学长亲自写的注释超详细// 注册TinyMCE插件Vue2/React通用复制就能用tinymce.PluginManager.add(doc_magic,function(editor,url){// 创建万能按钮用了阿里云同款绿好看constbtneditor.ui.registry.addButton(doc_magic,{icon:document,tooltip:文档神器粘贴/导入,onAction:()showMagicDialog(editor)// 点击触发弹窗});// 显示多功能弹窗Vue2轻量适配不影响现有系统functionshowMagicDialog(editor){editor.windowManager.open({title:文档导入神器学长亲测,width:900,height:650,body:{type:tabpanel,tabs:[{title:粘贴内容,items:[{type:textarea,name:pasteContent,label:粘贴Word/公众号内容CtrlV,multiline:true,maxHeight:300},{type:button,text:提取内容学长推荐,onclick:()processPaste(editor)// 处理粘贴},{type:htmlpanel,htmlId:pastePreview// 预览区域}]},{title:导入文档,items:[{type:filepicker,name:fileUpload,label:选文件支持docx/xlsx/pptx/pdf,onchange:(e)handleFileUpload(e,editor)// 处理上传},{type:htmlpanel,htmlId:filePreview// 预览区域}]},{title:公众号导入,items:[{type:textbox,name:wechatUrl,label:公众号文章链接例https://mp.weixin.qq.com/...,maxWidth:500},{type:button,text:抓取内容学长实测可用,onclick:()fetchWechatContent(editor)// 抓取公众号},{type:htmlpanel,htmlId:wechatPreview// 预览区域}]}]},buttons:[{type:cancel,text:关闭学长说别点这个}]});}// 处理粘贴内容图片自动上传OSS保留样式asyncfunctionprocessPaste(editor){constcontenttinymce.activeEditor.dom.get(pasteContent).value;// 调用后端APIASP.NET WebForm写的超简单constresawaitfetch(/api/doc/process-paste,{method:POST,headers:{Content-Type:application/json},body:JSON.stringify({content})});constdataawaitres.json();tinymce.activeEditor.dom.get(pastePreview).innerHTMLdata.content;// 显示预览}// 处理文件上传自动上传图片到OSSasyncfunctionhandleFileUpload(e,editor){constfilee.target.files[0];constformDatanewFormData();formData.append(file,file);// 调用后端上传接口ASP.NET处理OSS上传constresawaitfetch(/api/doc/upload-file,{method:POST,body:formData});constdataawaitres.json();tinymce.activeEditor.dom.get(filePreview).innerHTMLdata.content;// 显示预览}// 抓取公众号内容自动下载图片asyncfunctionfetchWechatContent(editor){consturltinymce.activeEditor.dom.get(wechatUrl).value;constresawaitfetch(/api/doc/fetch-wechat,{method:POST,headers:{Content-Type:application/json},body:JSON.stringify({url})});constdataawaitres.json();tinymce.activeEditor.dom.get(wechatPreview).innerHTMLdata.content;// 显示预览}});3. 操作面板dialog.html—— 学长设计的颜值在线文档神器学长版 // 兼容老浏览器的DOM操作学长加的防止IE8崩 function getElementsByClassName(className) { return document.querySelectorAll(. className); }三、后端实现ASP.NET WebForm—— 学长用VS2022搭的超省心1. 环境准备宿舍电脑/实验室服务器都能跑Windows 10/Server 2019推荐Win10开发调试方便Visual Studio 2022社区版免费学长用的是这个.NET Framework 4.8WebForm最佳拍档MySQL 8.0学长用的是阿里云RDS免费版够用阿里云OSS SDKInstall-Package Aliyun.OSS.SDK.NetCore -Version 3.15.12. OSS配置Web.config—— 学长写死的直接填你的OSS信息3. 核心处理类App_Code/DocProcessor.cs—— 学长写的注释超详细usingSystem;usingSystem.IO;usingSystem.Text.RegularExpressions;usingAliyun.OSS;usingMicrosoft.Office.Interop.Word;// 需安装Office学长用的是WPS替代方案usingAspose.Words;// 开源库需自行下载学长用的是免费版publicclassDocProcessor{// OSS配置从Web.config读privatestaticstringossEndpointConfigurationManager.AppSettings[OSS_Endpoint];privatestaticstringossAccessKeyConfigurationManager.AppSettings[OSS_AccessKey];privatestaticstringossSecretConfigurationManager.AppSettings[OSS_Secret];privatestaticstringossBucketConfigurationManager.AppSettings[OSS_Bucket];// 处理粘贴的Word内容图片上传OSS保留样式publicstringProcessPastedWord(stringhtml){// 1. 清理Word垃圾标签学长实测有效stringcleanHtmlCleanWordTags(html);// 2. 提取并上传图片二进制存储非Base64cleanHtmlUploadImages(cleanHtml);// 3. 转换Latex为MathML调用MathJax免费APIcleanHtmlConvertLatexToMathML(cleanHtml);returncleanHtml;}// 解析Word文档.docxpublicstringParseWord(stringfilePath){// 学长用Aspose.Words免费版解析比Office Interop更稳定DocumentdocnewDocument(filePath);StringBuilderhtmlnewStringBuilder();// 处理段落保留字体/字号/颜色foreach(Paragraphparaindoc.Paragraphs){html.Append();foreach(Runruninpara.Runs){html.Append();html.Append(run.Text);html.Append();}html.Append();}// 处理表格保留形状组foreach(Tabletableindoc.Tables){html.Append();foreach(Rowrowintable.Rows){html.Append();foreach(Cellcellinrow.Cells){html.Append();}html.Append();}html.Append().Append(ParseCell(cell)).Append();}html.Append();returnhtml.ToString();}// 辅助方法清理Word垃圾标签学长调了3晚的bugprivatestringCleanWordTags(stringhtml){returnRegex.Replace(html,.*?,,RegexOptions.Singleline).Replace(classMsoNormal,).Replace(]srcdata:image/(png|jpg);base64,(.*?)[^]*);foreach(Matchmatchinmatches){stringbase64match.Groups[2].Value;byte[]bytesConvert.FromBase64String(base64);stringtempPathPath.GetTempFileName().png;File.WriteAllBytes(tempPath,bytes);// 上传到OSS学长写的方法超简单stringossUrlUploadToOSS(tempPath,paste_img_DateTime.Now.Ticks.png);htmlhtml.Replace(match.Value,$);File.Delete(tempPath);// 删除临时文件}returnhtml;}// 辅助方法上传文件到OSS学长封装的超好用privatestringUploadToOSS(stringfilePath,stringfileName){OssClientossClientnewOssClient(ossEndpoint,ossAccessKey,ossSecret);stringobjectKey$cms_docs/{fileName};// 存储路径cms_docs/文件名try{ossClient.PutObject(ossBucket,objectKey,newFileStream(filePath,FileMode.Open));return$https://{ossBucket}.{ossEndpoint}/{objectKey};}catch(Exceptionex){return$上传失败{ex.Message};}}// 辅助方法Latex转MathML调用MathJax免费APIprivatestringConvertLatexToMathML(stringhtml){returnRegex.Replace(html,\$(.*?)\$,match{stringlatexmatch.Groups[1].Value;try{// 调用MathJax API免费实测可用stringmathmlnewWebClient().DownloadString($https://mathjax.github.io/MathJax-demos-web/convert-latex-to-mathml/?latex{latex});returnmathml.Contains(false;}四、部署指南学长手把手教5分钟搞定1. 环境搭建宿舍电脑/实验室服务器安装Windows 10/Server 2019推荐Win10开发调试方便安装Visual Studio 2022社区版免费https://visualstudio.microsoft.com/zh-hans/vs/安装.NET Framework 4.8https://dotnet.microsoft.com/download/dotnet-framework/net48安装MySQL 8.0https://dev.mysql.com/downloads/mysql/学长用的是阿里云RDS注册阿里云OSShttps://oss.console.aliyun.com/创建Bucket并获取AccessKey2. 集成步骤复制粘贴就能用把doc_magic插件文件夹丢进TinyMCE的plugins目录路径tinymce/plugins/在TinyMCE初始化配置tinymce.init.js中添加按钮tinymce.init({selector:#editor,// 你的编辑器容器IDplugins:doc_magic,// 添加插件toolbar:doc_magic bold italic// 工具栏显示按钮});把Web.config中的OSS信息改成你自己的阿里云控制台获取把项目发布到IIS发布→IIS、FTP等→选择服务器五、群组福利学长建的专搞外包加群223813913解锁以下隐藏福利新人红包1~99元随机现金手慢无学长自己发的接单特权优先获取企业CMS外包项目单价1k~5k学长带飞提成暴击推荐客户拿20%提成1万订单直接拿2k学长算过一个月接5单够生活费内推通道学长在南京软件园有资源国企/事业单位技术岗直推月薪8k群友真实反馈“上周推荐了个政府项目提成拿了3k够买台新笔记本了”六、学长的碎碎念避坑指南图片上传一定要用二进制存储非Base64前端HTML会膨胀10倍Word解析Aspose.Words免费版够用但复杂文档可能需要付费学长用WPS测试过兼容性不错Latex转换MathJax API偶尔抽风学长加了重试机制代码里有注释兼容性IE8需要开兼容模式学长测试过没问题别骂了学长尽力了结语学长把压箱底的代码都掏出来了99元预算绝对够有问题随时在群里喊我24小时在线~ 祝大家都能拿到心仪的offer外包接到手软复制插件安装jquerynpm install jquery在组件中引入// 引入tinymce-vueimportEditorfromtinymce/tinymce-vueimport{WordPaster}from../../static/WordPaster/js/wimport{zyOffice}from../../static/zyOffice/js/oimport{zyCapture}from../../static/zyCapture/z添加工具栏//添加导入excel工具栏按钮(function(){use strict;varglobaltinymce.util.Tools.resolve(tinymce.PluginManager);functionselectLocalImages(editor){WordPaster.getInstance().SetEditor(editor).importExcel()}varregister$1function(editor){editor.ui.registry.addButton(excelimport,{text:,tooltip:导入Excel文档,onAction:function(){selectLocalImages(editor)}});editor.ui.registry.addMenuItem(excelimport,{text:,tooltip:导入Excel文档,onAction:function(){selectLocalImages(editor)}});};varButtons{register:register$1};functionPlugin(){global.add(excelimport,function(editor){Buttons.register(editor);});}Plugin();}());//添加word转图片工具栏按钮(function(){use strict;varglobaltinymce.util.Tools.resolve(tinymce.PluginManager);functionselectLocalImages(editor){WordPaster.getInstance().SetEditor(editor);WordPaster.getInstance().importWordToImg()}varregister$1function(editor){editor.ui.registry.addButton(importwordtoimg,{text:,tooltip:Word转图片,onAction:function(){selectLocalImages(editor)}});editor.ui.registry.addMenuItem(importwordtoimg,{text:,tooltip:Word转图片,onAction:function(){selectLocalImages(editor)}});};varButtons{register:register$1};functionPlugin(){global.add(importwordtoimg,function(editor){Buttons.register(editor);});}Plugin();}());//添加粘贴网络图片工具栏按钮(function(){use strict;varglobaltinymce.util.Tools.resolve(tinymce.PluginManager);functionselectLocalImages(editor){WordPaster.getInstance().SetEditor(editor);WordPaster.getInstance().UploadNetImg()}varregister$1function(editor){editor.ui.registry.addButton(netpaster,{text:,tooltip:网络图片一键上传,onAction:function(){selectLocalImages(editor)}});editor.ui.registry.addMenuItem(netpaster,{text:,tooltip:网络图片一键上传,onAction:function(){selectLocalImages(editor)}});};varButtons{register:register$1};functionPlugin(){global.add(netpaster,function(editor){Buttons.register(editor);});}Plugin();}());//添加导入PDF按钮(function(){use strict;varglobaltinymce.util.Tools.resolve(tinymce.PluginManager);functionselectLocalImages(editor){WordPaster.getInstance().SetEditor(editor);WordPaster.getInstance().ImportPDF()}varregister$1function(editor){editor.ui.registry.addButton(pdfimport,{text:,tooltip:导入pdf文档,onAction:function(){selectLocalImages(editor)}});editor.ui.registry.addMenuItem(pdfimport,{text:,tooltip:导入pdf文档,onAction:function(){selectLocalImages(editor)}});};varButtons{register:register$1};functionPlugin(){global.add(pdfimport,function(editor){Buttons.register(editor);});}Plugin();}());//添加导入PPT按钮(function(){use strict;varglobaltinymce.util.Tools.resolve(tinymce.PluginManager);functionselectLocalImages(editor){WordPaster.getInstance().SetEditor(editor);WordPaster.getInstance().importPPT()}varregister$1function(editor){editor.ui.registry.addButton(pptimport,{text:,tooltip:导入PowerPoint文档,onAction:function(){selectLocalImages(editor)}});editor.ui.registry.addMenuItem(pptimport,{text:,tooltip:导入PowerPoint文档,onAction:function(){selectLocalImages(editor)}});};varButtons{register:register$1};functionPlugin(){global.add(pptimport,function(editor){Buttons.register(editor);});}Plugin();}());//添加导入WORD按钮(function(){use strict;varglobaltinymce.util.Tools.resolve(tinymce.PluginManager);functionselectLocalImages(editor){WordPaster.getInstance().SetEditor(editor).importWord()}varregister$1function(editor){editor.ui.registry.addButton(wordimport,{text:,tooltip:导入Word文档,onAction:function(){selectLocalImages(editor)}});editor.ui.registry.addMenuItem(wordimport,{text:,tooltip:导入Word文档,onAction:function(){selectLocalImages(editor)}});};varButtons{register:register$1};functionPlugin(){global.add(wordimport,function(editor){Buttons.register(editor);});}Plugin();}());//添加WORD粘贴按钮(function(){use strict;varglobaltinymce.util.Tools.resolve(tinymce.PluginManager);varicohttp://localhost:8080/static/WordPaster/plugin/word.pngfunctionselectLocalImages(editor){WordPaster.getInstance().SetEditor(editor).PasteManual()}varregister$1function(editor){editor.ui.registry.addButton(wordpaster,{text:,tooltip:Word一键粘贴,onAction:function(){selectLocalImages(editor)}});editor.ui.registry.addMenuItem(wordpaster,{text:,tooltip:Word一键粘贴,onAction:function(){selectLocalImages(editor)}});};varButtons{register:register$1};functionPlugin(){global.add(wordpaster,function(editor){Buttons.register(editor);});}Plugin();}());在线代码添加插件// 插件plugins:{type:[String,Array],// default: advlist anchor autolink autosave code codesample colorpicker colorpicker contextmenu directionality emoticons fullscreen hr image imagetools importcss insertdatetime link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace spellchecker tabfocus table template textcolor textpattern visualblocks visualcharsdefault:autoresize code autolink autosave image imagetools paste preview table powertables},点击查看在线代码初始化组件// 初始化WordPaster.getInstance({// 上传接口http://www.ncmem.com/doc/view.aspx?idd88b60a2b0204af1ba62fa66288203edPostUrl:http://localhost:8891/upload.aspx,// 为图片地址增加域名http://www.ncmem.com/doc/view.aspx?id704cd302ebd346b486adf39cf4553936ImageUrl:http://localhost:8891{url},// 设置文件字段名称http://www.ncmem.com/doc/view.aspx?idc3ad06c2ae31454cb418ceb2b8da7c45FileFieldName:file,// 提取图片地址http://www.ncmem.com/doc/view.aspx?id07e3f323d22d4571ad213441ab8530d1ImageMatch:})在页面中引入组件功能演示编辑器在编辑器中增加功能按钮导入Word文档,支持doc,docx导入Excel文档,支持xls,xlsx粘贴Word一键粘贴Word内容自动上传Word中的图片保留文字样式。Word转图片一键导入Word文件并将Word文件转换成图片上传到服务器中。导入PDF一键导入PDF文件并将PDF转换成图片上传到服务器中。导入PPT一键导入PPT文件并将PPT转换成图片上传到服务器中。上传网络图片一键自动上传网络图片。下载示例点击下载完整示例