news 2026/5/11 23:15:29

汽车制造企业如何用富文本编辑器处理CAD图纸粘贴?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
汽车制造企业如何用富文本编辑器处理CAD图纸粘贴?

【技术宅の毕业求生指南】CMS系统Word一键粘贴功能开发实录

(附代码+红包群安利+内推彩蛋)


背景

作为新疆某高校计算机科学与技术专业的大三狗,最近被导师逼着给CMS系统升级Word内容一键粘贴功能。要求支持Word/Excel/PPT/PDF导入、公式高清显示、跨终端适配,预算只有99元(连阿里云OSS流量费都不够啊喂!)。经过一周爆肝,终于用UEditor+JSP+Vue3搞定了这个需求,现在把技术方案和避坑指南分享给各位道友。


一、技术架构设计(穷鬼版)

前端Vue3

UEditor插件

JSP后端

MySQL

阿里云OSS

多终端适配

关键组件选择:
  1. 编辑器插件:基于UEditor二次开发(开源免费)
  2. 文档解析:使用mammoth.js解析Word(免费但需魔改)
  3. 公式转换MathJax+KaTeX双引擎(CDN免费)
  4. 文件导入docx.js+pdf.js(MIT协议)

二、前端实现(Vue3+UEditor)

1. 安装依赖
npminstallueditor-vue3 mammoth docx pdfjs-dist
2. 编辑器组件封装
import UEditor from 'ueditor-vue3' import * as mammoth from 'mammoth' export default { components: { UEditor }, data() { return { editorId: 'editor-' + Math.random().toString(36).substr(2), editor: null } }, mounted() { this.editor = UEditor.getEditor(this.editorId, { serverUrl: '/api/ueditor/upload', // 后端接口 toolbars: [['source', 'importword']] // 自定义按钮 }) // 注册自定义按钮 UE.registerUI('importword', (editor, uiName) => { const btn = new UE.ui.Button({ name: 'importword', title: '导入Word', cssRules: 'background-image: url(/import.png) !important;', onclick: () => this.importWord() }) editor.addListener('ready', () => { editor.registerCommand('importword', { execCommand: () => this.importWord() }) }) return btn }) }, methods: { async importWord() { const [file] = await this.$refs.fileInput.files const result = await mammoth.extractRawText({arrayBuffer: await file.arrayBuffer()}) // 处理图片上传(简化版) const html = result.value.replace(/<img src="data:image\/(jpeg|png);base64,(.*?)"/g, (match, type, base64) => { const formData = new FormData() formData.append('file', this.dataURLtoBlob(`data:image/${type};base64,${base64}`), 'word-img.jpg') return fetch('/api/upload', { method: 'POST', body: formData }) .then(res => res.json()) .then(data => `<img src="${data.url}"`) }) this.editor.setContent(html) } } }

三、后端实现(JSP+OSS)

1. 文件上传接口
<%@ page import="com.aliyun.oss.*, com.aliyun.oss.model.*" %> <%@ page import="java.io.*, java.util.*" %> <% // /api/upload.jsp response.setContentType("application/json"); String accessKeyId = "your-key"; String accessKeySecret = "your-secret"; String endpoint = "oss-cn-hangzhou.aliyuncs.com"; String bucket = "your-bucket"; try { OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret); String object = "uploads/" + UUID.randomUUID() + "_" + request.getParameter("name"); ossClient.putObject(bucket, object, request.getInputStream()); String url = "https://" + bucket + "." + endpoint + "/" + object; out.print("{\"url\":\"" + url + "\"}"); } catch (Exception e) { response.setStatus(500); out.print("{\"error\":\"上传失败\"}"); } %>
2. UEditor适配接口
<%@ page import="org.json.*" %> <% // /api/ueditor/upload.jsp String action = request.getParameter("action"); JSONObject json = new JSONObject(); if ("config".equals(action)) { json.put("imageUrlPrefix", "https://your-bucket.oss-cn-hangzhou.aliyuncs.com"); json.put("imagePathFormat", "/uploads/{yyyy}{mm}{dd}/{time}{rand:6}"); } else if ("uploadimage".equals(action)) { // 复用上面的上传逻辑 String url = uploadToOSS(request.getPart("upfile")); json.put("state", "SUCCESS"); json.put("url", url); json.put("title", request.getPart("upfile").getSubmittedFileName()); } out.print(json.toString()); %>

四、公式转换方案

1. LaTeX转MathML(前端实现)
// 使用MathJax进行转换functionconvertLaTeXToMathML(latex){returnnewPromise((resolve)=>{constmath=MathJax.tex2svg(latex,{display:false});constmathml=math.querySelector('svg').outerHTML.replace(/]*)>/,'').replace(/<\/svg>/,'');resolve(mathml);});}// 使用示例convertLaTeXToMathML('\\frac{1}{2}').then(mathml=>{document.getElementById('output').innerHTML=mathml;});

五、避坑指南

  1. Word解析mammoth.js不支持表格样式,需手动解析document.xml
  2. 跨域问题:阿里云OSS需配置CORS规则
  3. 公式显示:移动端推荐使用KaTeX(性能更好)
  4. 文件导入:Excel/PPT需使用xlsx.jspptxjs分别处理

六、求职彩蛋

正在寻找Java/JSP后端岗位,求各位师哥师姐内推!附上我的技术栈:

  • 熟练:JSP/MySQL/Linux/Vue3
  • 熟悉:Docker/Redis
  • 了解:Go/Python

加入技术交流群(QQ:223813913)

  • 新人领1-99元红包
  • 推荐客户得20%提成(黄金会员50%!)
  • 定期分享内推机会和面试题

(群主承诺:本群绝不涉黄赌毒,只聊技术和赚钱,违者群主直播倒立洗头!)


完整代码仓库:GitHub链接(含UEditor插件源码)
预算说明:实际开发成本≈0元(白嫖开源组件+阿里云学生机)
技术支持:加群后私聊群主获取《UEditor魔改手册》

(群主偷偷说:推荐客户还能赚外快,毕业前赚够去新疆旅游的钱!😎)

复制插件目录

引入插件文件

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转换成图片上传到服务器中。

上传网络图片

下载示例

点击下载完整示例

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 10:09:19

深度学习十年演进

深度学习&#xff08;Deep Learning&#xff09; 的十年&#xff08;2015–2025&#xff09;&#xff0c;是从“局部特征模拟”向“通用世界认知”演进的十年。 这十年中&#xff0c;深度学习不仅完成了从 CNN&#xff08;卷积神经网络&#xff09; 到 Transformer 的架构统治&…

作者头像 李华
网站建设 2026/5/2 15:58:34

文本翻译十年演进

文本翻译&#xff08;Machine Translation, MT&#xff09; 的十年&#xff08;2015–2025&#xff09;&#xff0c;经历了从“支离破碎的直译”到“流畅的神经翻译”&#xff0c;再到如今“理解全语境、具备文化常识”的认知翻译。 这十年中&#xff0c;翻译的技术底层经历了从…

作者头像 李华
网站建设 2026/5/11 2:08:04

【韩公子的Linux大集市】C语言 1.4 程序的编写、编译与运行全流程

文章目录 C语言程序的编写、编译与运行全流程 1. 程序编写 1.1 创建源代码文件 2. 编译过程详解 2.1 编译的四个阶段 2.2 各阶段说明 3. 完整的命令行操作 3.1 一步完成编译(推荐) 3.2 分步编译示例 4. 运行程序 4.1 运行可执行文件 4.2 查看输出 5. 实际示例 5.1 示例程序 5…

作者头像 李华
网站建设 2026/5/1 13:57:34

【计算机网络 | 第七篇】数据链路层及三个基本问题

文章目录3.1 数据链路层概述数据链路层的信道类型数据链路层的简单模型3.2 数据链路和帧链路与数据链路的区别帧3.1.2 数据链路层的三个基本问题1. 封装成帧2. 透明传输3. 差错检测3.1 数据链路层概述 在计算机网络体系结构中&#xff0c;数据链路层主要研究在同一个局域网中&…

作者头像 李华
网站建设 2026/5/3 4:55:15

真的太省时间!千笔,专科生论文写作神器

你是否曾在论文写作中感到力不从心&#xff1f;选题无头绪、资料难查找、结构混乱、查重率高得让人焦虑……这些困扰&#xff0c;是不是让你夜不能寐&#xff1f;专科生的论文之路本就不易&#xff0c;再加上时间紧迫和写作技巧不足&#xff0c;更是雪上加霜。但如今&#xff0…

作者头像 李华
网站建设 2026/5/5 13:25:31

Raspberry Pi 4摄像头模块启用完整指南(Bullseye适用)

Raspberry Pi 4摄像头模块启用实战手记&#xff1a;Bullseye系统下从黑屏到稳定输出的完整通关路径你刚把树莓派4B通电&#xff0c;接上官方Camera Module v2&#xff0c;运行libcamera-hello——屏幕一片漆黑。终端里只有一行冷冰冰的提示&#xff1a;No cameras available这不…

作者头像 李华