CAD图纸粘贴到TinyMCE保持矢量输出:DXF解析与SVG插入全攻略
2026/9/16 3:18:42 网站建设 项目流程

芯片厂内部的MES、PLM、知识库、缺陷追踪系统里,几乎都能看到TinyMCE的身影——工程师在网页端写工艺文档、录异常工单、做版图评审记录,都要把这个富文本编辑器当Word用。但只要涉及贴CAD图纸,问题马上就来了:从AutoCAD或中望CAD里复制一个图形,Ctrl+C到网页编辑器,贴出来是一张糊糊的PNG位图。放大想看一下引脚间距,全是马赛克;想用浏览器的测量工具量一段走线,根本选不中对象。更麻烦的是,图纸里的图层信息、标注样式、字体全部丢光,最后打印归档时完全不能用。

这篇文章就专门解决这一个问题:芯片制造企业如何让CAD图纸粘贴到TinyMCE之后,仍然保持矢量输出,而不是被浏览器强制转成位图。我会从剪贴板原理开始拆,对比几种技术路线,再给出一套能直接落地的“DXF解析+SVG插入”方案,最后把生产环境里踩过的坑一并列出来。适合企业内部工具链工程师、CAD管理员、Web前端开发参考,你可能不用全部看完,但“为什么会有这个问题”和“哪些路线靠谱”这两段建议别跳。

1. 先搞清楚为什么CAD图纸一进TinyMCE就成了“马赛克”

很多工程师的第一反应是骂TinyMCE太弱,其实这个锅浏览器要背一大半。要解决问题,得先弄明白CAD图纸从剪贴板进浏览器,中间到底发生了什么。

1.1 从剪贴板开始追线索:浏览器到底拿到了什么

先说一个Windows下屡试不爽的实验:在AutoCAD里用Ctrl+C复制几个图元,回到桌面上打开画图软件,Ctrl+V,得到的是什么?是一张图片。打开Word,Ctrl+V,得到的是什么?还是一张图片,不过Word聪明一点,它还会尝试从剪贴板里读AutoCAD的私有数据,所以有时候能保持可编辑状态。

问题就在这里。Windows剪贴板支持多格式同时存放,CAD软件复制图元时,通常会同时写入好几种格式:EMF/WMF增强型图元文件、DIB位图、HTML片段,甚至还有AutoCAD自己的私有Object格式。普通桌面应用可以根据自己的需求挑一种最合适的取用。但浏览器不行,浏览器出于安全沙箱的限制,读剪贴板时只会给你公开的几类数据,最常见的就是image/pngtext/plain。也就是说,TinyMCE接到的不是CAD原生的矢量数据,而是CAD为了兼容其他软件,顺手贴进去的一张位图预览。

从产品的角度说,CAD软件已经尽力了,它把能给的都给了,但浏览器只认最后那张PNG。如果用的是网页版的CAD或者说某些以WebGL为核心的轻量化看图工具,复制出来的对象可能压根不是矢量,就是纯栅格化输出,那更没救。

1.2 位图和矢量在富文本编辑器里的本质区别

位图是一个一个像素点,矢量是一条一条有坐标、有方向、有数学定义的图元。在TinyMCE里插入一张PNG图纸,编辑器存储的是一个<img>标签,图片的尺寸和分辨率固定。放大超过100%就会看到锯齿;想量两段线之间的实际距离,编辑器层面做不到,因为位图本身没有语义。

矢量图纸则完全不同。SVG格式的图纸里有<line><path><circle>这些真正的图元节点,浏览器可以无限缩放不模糊,开发者也可以从DOM里直接读取坐标数据,甚至给图元绑定点击事件做交互。对于芯片制造企业来说,这个区别不是“清晰一点”那么简单。工艺工程师在评审一份封测框架图时,需要在图里量焊盘间距;质量工程师在缺陷分析系统里标注失效位置时,需要把图形精确圈出来;文档管理员在归档时,需要打印成高分辨率PDF。这些场景都需要图纸保持矢量语义。

1.3 这个问题的三个核心矛盾

理完技术机制,我们把问题压缩成三个矛盾。

第一个矛盾是格式不通:CAD图纸的核心格式是DWG(Autodesk封闭二进制)和DXF(开放的ASCII/二进制交换格式),而浏览器能原生识别的是SVG、PNG、JPEG、WebP。DWG没法在浏览器里直接解析,DXF本质上是一种文本描述语言,浏览器也不认识。

第二个矛盾是编辑器清洗策略:TinyMCE出于XSS安全考虑,对HTML有严格的白名单过滤机制。SVG里可以嵌脚本,比如<svg onload="...">这种,TinyMCE默认会把这类标签直接吞掉,只留一个空壳。所以就算你拿到了SVG字符串,直接往编辑器里塞,也不一定塞得进去。

第三个矛盾是数据安全:芯片企业的图纸往往涉密,不可能随便丢给第三方在线转换服务。很多网上搜到的攻略会告诉你“用xxx在线转换器把DWG转成SVG”,但企业内部系统接这种服务,法务和IT审计第一个不答应。所以解决方案必须能在内网自闭环。

这三个矛盾决定了我们后面所有技术路线的基本走向。

2. 可行技术路线横向对比:不要一上来就写代码

我见过不少团队,一听说要解决矢量输出,第一反应就是去Github上找DWG解析库,然后闷头写解析器。说实话,除非你们团队有图形学背景,否则不建议这么干。先看一下市面上成熟的技术路线,结合企业自身情况做选择题。

2.1 路线A:前端解析DXF,粘贴时转换为SVG

这条路线是利用dxf-parser这类前端库,在浏览器里把DXF文本解析成JS对象,再把图元拼成SVG字符串,插入TinyMCE。

优点很直观:链路短,不用做后端服务,实时性好,工程师在CAD里导出DXF文件,拖进网页就能看到矢量图。但缺点也不能忽视。第一,DWG格式不支持,因为DWG是封闭的,前端纯解析基本不现实。第二,DXF中复杂的BLOCK块引用、HATCH填充、动态块、代理实体这些高级特性,解析出来很可能残缺。第三,大图纸性能堪忧,一个几十MB的DXF在浏览器里逐实体解析再生成DOM,Chrome都可能卡死。

这条路线适合“中小图纸、结构清晰的DXF,对复杂块和填充要求不高”的场景。比如展示一个简单的机构示意图、工艺流程图、点位布局图,完全够用。

2.2 路线B:CAD端一键导出SVG,配合TinyMCE文件拖拽上传

这条路线不是在网页里做转换,而是在CAD软件内部做转换。AutoCAD高版本自带EXPORT命令,可以选择输出SVG格式;中望CAD也有类似能力;如果CAD版本不支持,可以装一个免费的导出插件。工程师在CAD里把图纸另存为SVG,然后把SVG文件拖到TinyMCE编辑区域,系统读取文件内容后以合适的方式插入。

优点非常明显:转换质量最高,因为转换动作发生在CAD软件内部,字体、线型、图层、标注这些信息保留得最完整。缺点也实在:工程师多了一步操作,部门要强制执行流程,否则有人偷懒直接把图截图粘贴,又回到位图的老路。

这条路线适合“对图纸质量要求高、对操作规范性有把控能力”的团队。芯片厂如果有CAD管理员统一发插件、统一下发操作手册,这条路会异常好用。

2.3 路线C:后端转换微服务统一兜底

企业内部搭一个转换服务,接收上传的DWG/DXF/PDF/GDS文件,调用底层转换引擎(ODA、Open CASCADE、Autodesk Platform Services等)生成SVG,返回给前端插入编辑器。

这条路线的好处是格式覆盖最广,DWG、DXF、DGN甚至GDSII都能处理,而且可以在服务端保存转换日志,做权限审计,满足企业合规要求。缺点是实施成本高,需要专门开发,需要处理服务资源占用和队列机制,大图纸转换可能耗时十几秒。适合图纸敏感度高、格式复杂、企业有自建IT团队的大规模场景。

2.4 三种路线的对比选型

维度路线A:前端解析DXF路线B:CAD端导出SVG路线C:后端转换服务
矢量质量中等,复杂实体丢失高,保留CAD元数据高,依托专业引擎
实施成本低,纯前端低,但需要推行流程高,需开发与运维
支持格式DXF为主DWG/DXF均可DWG/DXF/GDS/PDF等
数据安全内网闭环内网闭环内网闭环,可控审计
运维难度中高
用户操作成本中,需导出DXF低,一键导出最低,拖拽上传

我的建议是:如果企业刚起步,第一版先用“路线B为主,路线A做补充”。路线B能解决大部分高质量诉求,因为工程师从CAD里导出SVG是确定性最高的操作;路线A可以覆盖“手头只有DXF文件、不想再打开CAD”的场景。等用户量上来、图纸复杂度上来了,再考虑路线C。一上来就推翻重做后端转换服务,投入产出比很差。

3. 动手实现:以“前端DXF解析+TinyMCE自定义粘贴”为例

我以路线A为例,给出一套能直接用的实现。就算你最后选了路线B或C,本节里的TinyMCE配置和SVG插入方法也是通用的。

3.1 准备工作与库选型

前端解析DXF,社区里比较成熟的是dxf-parser这个npm包。它能把DXF文件的文本内容解析成一个对象,里面有entities数组,每个实体包含type、坐标点、图层、颜色这些信息。还有一个常用但偏重的方案是用Three.js的DXFLoader,它也能解析,但依赖整个三维渲染引擎,而且默认输出的是Three.js场景对象,不是SVG字符串,我们还得再转换一层,没必要。所以我的建议是dxf-parser加手写SVG生成逻辑。

安装很简单:

npm install dxf-parser

引入后的基础用法:

import DxfParser from 'dxf-parser'; const parser = new DxfParser(); let dxf = parser.parseSync(dxfText); console.log(dxf.entities);

dxf.entities里面装的是所有图元。常见的类型有LINE(线段)、CIRCLE(圆)、ARC(圆弧)、LWPOLYLINE(轻量多段线)、TEXT(单行文本)、MTEXT(多行文本)、INSERT(块引用)。实际生成的SVG主要就是处理这些实体。

3.2 自定义TinyMCE粘贴事件:拿到剪贴板里的DXF文本

先说一个现实情况:工程师在CAD里直接Ctrl+C复制图元,然后到网页里Ctrl+V,浏览器剪贴板里是拿不到DXF文本的。前面讲过,剪贴板里大部分是EMF和PNG,Text/Plain里一般是空字符串或者简单的图元说明。所以指望纯Ctrl+C到粘贴这条路,基本是死路。

比较可靠的操作方式是:工程师在CAD里把相关图元导出成DXF文件(CAD里的SAVEAS或者EXPORT都可以),然后从文件管理器里把DXF文件拖进TinyMCE,或者点击编辑器工具栏的上传按钮。我们在前端拦截拖拽和上传事件,读取文件内容,做后续解析。

如果你非要做“支持粘贴”,那得在CAD端配合一个能“复制为DXF文本”的插件,把DXF内容以纯文本形式写入剪贴板。这种插件网上有,但实时性和兼容性参差不齐,我认为不值得优先投入。

3.3 文件拖拽方式:把DXF文件拖进编辑器,转成SVG后再插入

下面是一个简化但能跑通的核心逻辑。在TinyMCE初始化时注册drop事件,读取拖进来的File对象,判断扩展名是.dxf后,用FileReader读取文本,交给解析函数,最终生成SVG字符串并插入。

核心代码:

editor.on('drop', (event) => { const files = event.dataTransfer.files; if (!files || files.length === 0) return; const dxfFile = Array.from(files).find((f) => f.name.toLowerCase().endsWith('.dxf')); if (!dxfFile) return; event.preventDefault(); event.stopPropagation(); const reader = new FileReader(); reader.onload = (e) => { const dxfText = e.target.result; const svgMarkup = dxfToSvg(dxfText); editor.insertContent(svgMarkup); }; reader.readAsText(dxfFile); });

重点在dxfToSvg这个函数。它的核心工作是遍历实体,生成对应的SVG图元,并把DXF世界坐标系(Y轴向上)转换成SVG坐标系(Y轴向下)。

function dxfToSvg(dxfText) { const parser = new DxfParser(); const doc = parser.parseSync(dxfText); // 收集所有实体的坐标范围,用于计算viewBox let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity; const paths = []; for (const ent of doc.entities) { if (ent.type === 'LINE') { minX = Math.min(minX, ent.start.x, ent.end.x); maxX = Math.max(maxX, ent.start.x, ent.end.x); minY = Math.min(minY, ent.start.y, ent.end.y); maxY = Math.max(maxY, ent.start.y, ent.end.y); paths.push(`<line x1="${ent.start.x}" y1="${-ent.start.y}" x2="${ent.end.x}" y2="${-ent.end.y}" stroke="black" stroke-width="1"/>`); } else if (ent.type === 'CIRCLE') { const cx = ent.center.x; const cy = -ent.center.y; const r = ent.radius; minX = Math.min(minX, cx - r); maxX = Math.max(maxX, cx + r); minY = Math.min(minY, cy - r); maxY = Math.max(maxY, cy + r); paths.push(`<circle cx="${cx}" cy="${cy}" r="${r}" fill="none" stroke="black" stroke-width="1"/>`); } else if (ent.type === 'LWPOLYLINE') { // 多段线特殊处理 const pts = ent.vertices.map(v => `${v.x},${-v.y}`); const closed = ent.shape === 'closed' || ent.closed; paths.push(`<polyline points="${pts.join(' ')}" fill="none" stroke="black" stroke-width="1" ${closed ? '' : ''}/>`); } // 其他实体如ARC、TEXT、INSERT可继续扩展 } const width = maxX - minX || 1; const height = maxY - minY || 1; const pad = 10; return ` <svg xmlns="http://www.w3.org/2000/svg" viewBox="${minX - pad} ${minY - pad} ${width + pad * 2} ${height + pad * 2}" width="${width + pad * 2}" height="${height + pad * 2}"> ${paths.join('')} </svg> `; }

这段代码我刻意写得精简,实际工程里还需要处理ARC、TEXT、INSERT块引用等,但整体套路是一致的:解析实体到SVG元素,统一坐标系,计算viewBox。

3.4 让TinyMCE接纳SVG节点:valid_elements配置和净化

直接editor.insertContent(svgMarkup)十有八九失败,因为TinyMCE的HTML过滤器会把SVG标签视作非法标签。要么整个<svg>被吞掉,要么里面的<line><path>被剥离后只剩一个空壳。

不同版本TinyMCE行为不太一样,我以TinyMCE 6为例,需要在初始化配置里显式声明允许SVG相关标签:

tinymce.init({ selector: '#editor', schema: 'html5', extended_valid_elements: 'svg[*],g[*],defs[*],line[*],circle[*],rect[*],ellipse[*],polyline[*],polygon[*],path[*],text[*],tspan[*],marker[*]', valid_children: '+body[svg],+div[svg]', paste_data_images: true });

但我说句实话,就算配置了这些,TinyMCE的sanitizer依然可能给你捣乱,尤其是老版本对SVG的处理非常不稳定。如果你不想跟它死磕,有一个更省心的方案:把生成的SVG字符串转成base64编码的data:image/svg+xml,以图片形式插入。

function svgToDataUrl(svgMarkup) { const encoded = encodeURIComponent(svgMarkup); return `data:image/svg+xml,${encoded}`; } // 插入时 const svgMarkup = dxfToSvg(dxfText); const dataUrl = svgToDataUrl(svgMarkup); editor.insertContent(`<img src="${dataUrl}" alt="DXF图纸预览" />`);

这个方法非常值得推荐。浏览器渲染<img>里的SVG data URL时,依然按矢量方式缩放,放大不糊。TinyMCE只把它当成普通图片,不会有任何过滤问题。代价是没办法在编辑器里选中单个图元做编辑,但如果你的目标只是让图纸在网页端“清晰展示、打印不糊”,这个方案已经打满分了。

3.5 用数据URL方案绕开编辑器过滤,又把矢量属性保住

我再把3.4说的这个方案展开一下,因为它是整个落地过程中最省心的一个点。很多团队花了大量时间配置TinyMCE的valid_elements,最后打开编辑器发现SVG还在,但打开浏览器F12一看,SVG里的onload事件、href属性全被静默处理了。这是产品设计上故意为之的XSS防护,你不能怪TinyMCE。真要强行解除过滤,等于给XSS攻击开了后门,在一个承载芯片图纸的企业内网系统里,这是绝对不可接受的。

所以“SVG转data URL插入为<img>”这个方案,从安全角度说是最干净的。SVG被浏览器当作图片资源解析,而不是被当作可执行的DOM节点插入,页面里不会出现可以被脚本操作的SVG对象。数据安全审计的时候也好解释:我们系统里没有直接渲染用户输入的SVG DOM,只把它当作图片展示。

从用户体验角度也说得过去:工程师需要的是“看一眼图纸、能缩放、能打印”,而不是在网页编辑器里重新编辑CAD图元。真要编辑,直接在CAD里打开源文件,比在网页里操作SVG不知道高到哪里去了。

3.6 完整接入TinyMCE的初始化示例

把前面的片段整合成一个相对完整的初始化配置:

import DxfParser from 'dxf-parser'; tinymce.init({ selector: '#editor', height: 600, schema: 'html5', extended_valid_elements: 'svg[*],g[*],line[*],circle[*],rect[*],polyline[*],polygon[*],path[*],text[*]', valid_children: '+body[svg],+div[svg]', paste_data_images: true, setup: (editor) => { editor.on('init', () => { // 拖拽DXF文件到编辑区域 editor.contentDocument.addEventListener('drop', (e) => { const files = e.dataTransfer.files; if (!files || files.length === 0) return; const dxfFile = Array.from(files).find((f) => f.name.toLowerCase().endsWith('.dxf')); if (!dxfFile) return; e.preventDefault(); e.stopPropagation(); const reader = new FileReader(); reader.onload = (ev) => { const dxfText = ev.target.result; const svgMarkup = dxfToSvg(dxfText); const dataUrl = 'data:image/svg+xml,' + encodeURIComponent(svgMarkup); editor.insertContent(`<img src="${dataUrl}" alt="DXF图纸预览" style="max-width:100%;" />`); }; reader.readAsText(dxfFile); }); }); } });

有人可能会问:为什么不在TinyMCE的paste事件里处理,而是监听drop?因为pasteclipboardData.items里常见的是图片,而普通文件的获取以拖拽为主,且paste事件在不同编辑器版本里处理文件的方式差异较大。drop事件在所有主流浏览器里都很稳定,代码逻辑也更清晰。

4. 生产环境落地时最常见的坑

代码写出来能在本地跑通,和真正在企业内网稳定运行一年,中间差的坑还不少。我把真实项目里踩过的问题整理在这里,按优先级排序。

4.1 明明插的是SVG,预览还是模糊

这是最让人困惑的坑。用了dxf-parser解析,生成了SVG,插入后图片放大还是很糊。排查下来90%的原因是:你生成的SVG本身分辨率就不足,或者你在转换过程里丢失了坐标精度。

具体来说,DXF文件里的坐标通常是浮点数,比如12345.6789,如果你在拼SVG字符串时做了四舍五入或者截断,图形在宏观上看着没问题,但放大到细节就会发虚。另外,如果viewBox设置不对,图片被CSS拉伸到某个固定宽度,浏览器要用插值算法重新采样,也会显得“糊”。

我的建议是:拼SVG时保留完整精度,不要主动截断浮点数;设置viewBox用原始坐标范围,widthheight用等比例值,不要让浏览器做非等比拉伸;如果图纸被CSS强制了max-width:100%,没问题,因为SVG的矢量特性决定了只要viewBox正确,怎么缩放都清晰。

4.2 中文标注乱码和字体缺失

CAD图纸里最重要的信息往往不是图形,而是标注文字。DXF里的TEXT和MTEXT实体会带字体信息,比如宋体、仿宋、SHX字体(如txt.shx)。浏览器不认识SHX字体,甚至对一些中文字体名字也可能匹配不到,于是文字就变成一串问号或者方块。

这个问题有两个常见解法。第一种是在生成SVG时,把text元素设置成CSS中的通用字体族,比如font-family="sans-serif",让浏览器自己挑一个好用的中文字体,但这样做会和原图纸的字体风格有偏差,对严格图纸来说不可接受。第二种更保险,是在CAD端就处理:导出DXF之前,在CAD里用TXTEXP这类炸开文本命令,把文字炸成线条轮廓。这样文本就变成了真正的LINELWPOLYLINE,不再依赖任何字体。缺点是不可编辑文字内容,但图纸的视觉还原度能做到百分之百。

如果图纸里已经有很多散落的SHX字体,别指望前端能解决,老老实实回去改CAD端的导出流程。

4.3 TinyMCE把SVG吃了,或者出现奇怪的自闭合标签

在老版本的TinyMCE里,比较常见的是<path d="..."/>被改写成<path d="...">,导致SVG渲染异常,因为HTML解析器对void元素和普通元素的处理方式不同。解决方式是升级到TinyMCE 6以上版本,或者放弃直接插入SVG DOM,改用data URL方案。

如果你有非常强的需求必须插入可编辑SVG DOM,除了配置extended_valid_elements之外,还要注意不要使用verify_html: false这种一刀切开关,那会让整个编辑器失去XSS防护。更稳妥的办法是给SVG起一个独立的命名空间前缀,或者把SVG包在自定义的<div contenteditable="false">容器里,让TinyMCE不去深度递归解析它。但说实话,这个方案绕来绕去,最后维护起来很心累,非必要不建议用。

4.4 数据安全和上传限制

芯片制造企业对数据安全要求极高,第2节里已经强调过。实际落地时还要注意几个具体问题:第一,用户上传的DXF文件里可能携带脚本或者恶意构造的实体,服务端必须做文件类型校验和大小限制,不能直接信任文件名后缀。第二,生成的SVG如果要在网页里直接展示,建议用DOMPurify之类的库对SVG内容做白名单清洗,把<script>onerror这类危险内容过滤掉。第三,企业内部做内容审计时,最好在数据库里同时保存原始DXF和转换后的SVG,不要只存svg丢源文件,否则后续版本追溯会非常痛苦。

4.5 大图纸性能:一次贴100MB的DWG怎么办

这是芯片企业最容易碰到的问题。一张复杂的版图或者封装框架图,CAD文件动辄上百MB,DXF导出来也有几十MB,前端解析直接卡死浏览器。

我的建议是分级处理:对于超大图纸,不要在浏览器里做解析,直接保存源文件,服务端用路线C的转换服务生成SVG预览图,返回给前端插入编辑器。对于中小图纸(几MB以内),前端解析完全够用。判断阈值可以在服务端做,文件超过10MB就自动转入异步转换队列。不要试图用一个方案覆盖所有图纸规模,那最后一定会两头不讨好。

实际生产里还有一个笨但有效的做法:让工程师在CAD里把需要贴到文档里的局部视图单独截取导出,不要导出整张总图。图纸局部通常会小一个数量级,前端解析速度飞快,文档打开也流畅。

5. 面向芯片制造场景的扩展思考

这个问题表面上是“TinyMCE怎么贴CAD图纸”,但往深了看,其实是芯片制造企业在文档协作链条上如何保持数据从设计到归档全程不降级的问题。

芯片厂里的图纸不只是DWG。版图设计环节会产生GDSII、OASIS格式,封装设计环节会用DWG/DXF,设备和产线布局图也大量走CAD。这些格式的共性是,它们都是重型工程格式,不可能直接在网页里原生渲染,都需要一层转换桥接。如果你已经为TinyMCE搭了一条“CAD图纸转SVG”的管线,其实顺手可以把它扩展成企业统一的图纸预览服务:支持DWG、DXF、PDF,甚至GDSII,所有业务系统共用这一套转换能力。这比每个系统各做各的好太多。

另外,从文档管理的角度看,TinyMCE里插入的SVG图纸不应该只是“一张图”。比较好的实践是把原始DXF/DWG文件作为附件挂到同一篇文档里,SVG只是预览载体。文档库里保留一份可编辑的原始文件,需要改图的人拿到附件就能修改,需要评审的人看网页里的SVG就够了。我见过一些企业只存SVG不存源文件,等到下游PCB设计需要改一个封装尺寸时,发现SVG没法还原出可编辑的DWG,整个流程卡死,教训非常深刻。

TinyMCE本身的插件开发能力也能做很多事。你可以写一个自定义按钮“插入CAD图纸”,点击后弹出文件选择框,上传DXF后立即解析并插入SVG,同时把原始文件信息写进一个隐藏字段,保存时随表单一起提交到后端。这样业务端几乎不用改流程,工程师上手也快。比起要求工程师每次先手动转SVG再上传,这样的体验会好很多。

最后聊一点个人的体会。做这类企业内部工具,真正难的不是技术,而是“流程通不通”。你技术方案做得再漂亮,工程师那边多一步操作,他就可能嫌麻烦,转头用截图软件截一张位图贴进去。所以落地时一定要把“操作简单”放在第一位。能自动做转换的就不要让用户手动转换;能靠拖拽完成就不要让用户点好几级菜单。我自己的经验是,先用路线B(CAD端导出SVG)把流程跑通,保证图纸质量,再逐步用路线A(前端解析DXF)把一些常规操作自动化,最后根据实际使用量决定要不要做后端转换服务。这个顺序踩坑最少,见效最快。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询