
1. 这个需求到底是怎么回事图纸里的公式要“活”起来机械行业的图纸只要造过设备的都知道图纸上从来不缺公式。法兰的螺栓孔分布圆直径、齿轮的模数齿数关系、减速机速比、传动轴扭距校核、液压缸推力计算……这些公式要么直接写在标题栏旁边的技术要求里要么藏在设计计算书里要么只在CAD文件里通过标注和表格体现。问题在于图纸是图纸网页是网页这两者之间隔着一条很深的“格式鸿沟”。我最早接触到“图纸公式转网页”这个需求是在做车间工艺文档数字化的时候。车间工人装配零件手里拿的应该是纸质图纸或者PDF但现场要查一个公式、算一个参数就得翻计算器或者打电话问技术部。领导的意思很明确把常用公式挂到内部网页上谁都能查谁都能算手机上也能用。听起来简单真正一动手才发现CAD图纸里的公式不是“文字”它是图形、是块、是OLE对象、是标注样式里的堆叠数字要转成网页得先把它从图纸里“抠”出来再变成一套浏览器能识别、能渲染、最好还能交互的东西。我就用某个跨部门协作的实际项目来讲讲这个完整过程包含公式怎么提取、怎么规范化、怎么通过一套网页组件发布上线以及我在这个过程中踩过的坑。这套方法对做机械设计的人、做企业IT支持的人、以及想把老图纸里的知识资产盘活的人都有参考价值。2. 先想清楚CAD图纸里的公式到底有几种形态2.1 第一种纯文本标注型公式这是最常见也最好处理的一类。CAD里用多行文字MTEXT或单行文字DTEXT写出来的公式比如“扭矩 T 9550 × P / n”。这种公式的本质就是文本字符串不同点在于CAD里可能有上下标、有特殊符号比如平方符号“²”、直径符号“⌀”、度“°”、希腊字母“μ”。转网页时关键是把这个文本的字符编码搞清楚别在转换过程中变成乱码。这类公式占图纸总公式量的五六成处理起来思路就是“当作字符串清洗”。2.2 第二种堆叠分数/分式结构型公式AutoCAD的多行文字编辑器里有个“堆叠”功能输入“1/2”再按堆叠按钮就会显示成上下结构的分数。这种公式一旦炸开或者转成低版本格式堆叠关系就会丢失变成一行“1/2”。所以从图纸导出DXF/DWG之后用程序读文本时只要看到“/”“^”“_”这类符号就要意识到可能存在堆叠表达式需要根据CAD的堆叠标记规则处理。DWG内部用“\S”控制符表示堆叠比如“1\S2;”在图形里显示为二分之一的结构这块转换软件通常不暴露给用户但你要知道有这回事。2.3 第三种块属性与参数表型公式很多规范图纸里公式不是散着写的而是放在一个标题栏、参数表或者技术要求块里。比如“模数m”、“齿数z”、“压力角α”属于齿轮参数表表里每行每列都是一个“属性”或“字段”。这类公式转网页时不能按纯文本处理因为它的“行和列”是有意义的网页端最好还原成表格结构让读者能看清每个参数代表什么。实践中我经常把这类内容从块属性值里导出再映射成网页表格。2.4 第四种字段与外部数据关联型公式再高级一点图纸里的公式不是手写的而是通过“字段FIELD”关联到模型的自定义属性或者Excel表格里的数据。比如工程图里的重量是关联到三维模型的密度和体积算出来的。这种公式转网页最麻烦因为公式的“值”不是固定数字它需要实时计算。例如某公司有台设备装配图标题栏里的总重是通过各零件重量汇总字段生成的转网页时如果只拍一张图纸截图永远只是某个时间点的值不具备动态性。这类我建议的处理方式是把字段对应到网页表单网页端接一个计算函数做到“输入参数、输出结果”这才是真正的网页化。2.5 第五种OLE嵌入对象型公式这种是你最不想遇到的。图纸里嵌了一个Excel工作表或者一个公式编辑器某些老图纸里嵌过MathType对象双击才能打开编辑。这种对象的本质不是DW图形数据而是一个Windows OLE包。处理它只有两条路要么在CAD里把对象炸开成线条和文字要么用自动化程序读取OLE里承载的源数据。我建议走后者因为炸开之后公式就变成曲线了没法再还原成字符。嵌入Excel的话可以用COM接口读它的单元格内容嵌入MathType对象的话说实话现在很多旧对象在新版本里打不开只能导出图片再用OCR识别识别准确率还看命。3. 公式提取阶段从DWG到结构化数据手把手操作3.1 程序化提取比手动复制高效一倍不止有人问我图纸不多的情况下是不是直接在CAD里打开、复制文字、粘贴到Word里就算提取完成图纸少于20张可以这么干图纸上千张手动复制会疯掉。我做过一次统计300张装配图、平均每张12处公式标注手动处理至少需要四五个小时还容易漏掉隐藏图层里的内容。改用程序批量提取第一版就跑出全部文本内容耗时8分钟。对于AutoCAD格式我常用的方案是使用Python库或者CAD二次开发接口遍历所有实体筛出TEXT、MTEXT、ATTRIB、INSERT里的属性内容把这些文字的插入坐标、字符串内容、图层名、所属图号一起导出成一份CSV。CSV的好处是后续清洗方便Excel、文本编辑器、数据库都能直接读。下面这份是我常用来提取MTEXT文本内容的一个简化示例写出来给大家看个流程import ezdxf doc ezdxf.readfile(drawing_2310.dxf) msp doc.modelspace() rows [] for e in msp: if e.dxftype() TEXT: rows.append([TEXT, e.dxf.text, e.dxf.insert.x, e.dxf.insert.y]) elif e.dxftype() MTEXT: # DXF中的MTEXT内容可能包含格式控制码需要去掉 clean e.text.replace(\\S, /).replace({, ).replace(}, ) rows.append([MTEXT, clean, e.dxf.insert.x, e.dxf.insert.y]) elif e.dxftype() INSERT: for att in e.attribs: rows.append([ATTRIB, att.dxf.text, att.dxf.insert.x, att.dxf.insert.y]) # 导出CSV with open(formulas_raw.csv, w, encodingutf-8-sig) as f: f.write(type,content,x,y\n) for r in rows: f.write(f{r[0]},{r[1]},{r[2]},{r[3]}\n)这个示例看着简单实际调试时我遇到的问题可不少。首先是MTEXT的格式控制码我们看到的公式文本“12²”在DXF里可能是“12{\H0.7x;\S3^2;}”要是不做清洗网页直接显示出来就是一堆语法符号跟看了密码似的。其次是字体映射图纸里用了大字体文件比如长仿宋体符号是“gbenor.shx”之类程序解析时会遇到字体名和字符集不一致的问题。我的建议是提取出来之后先用二进制方式另存为UTF-8编码的CSV避免Excel打开时中文乱码。CSV里每一行必须保留图号/图纸名称否则清洗完都不知道这条公式是从哪张图上来的。3.2 坐标定位的价值真别只知道文字内容提取公式时坐标信息看起来不重要实际上有大用处。图纸上位置相近的几行文字很可能属于同一个公式或同一组参数表。例如一张液压原理图旁边的“系统压力”、“流量”、“油缸内径”、“活塞杆直径”这些标注它们在图纸上集中出现在一个区域导出之后坐标相近按坐标聚一下类就能自动形成一个“参数组”。我实际处理时是这样做的先找到图纸里的图纸框线或者标题栏框线把图框区域外的文字剔除掉只保留图框内的公式然后把图框内的文字按Y坐标从大到小排序同一行Y坐标差小于50个单位的归为一组最后一行行转成结构化条目。这样清洗出来的公式网页端呈现时非常规整不会出现一条公式一条公式堆在那里像聊天记录一样。3.3 手动清洗八条经验照着做准没错自动提取之后还要人工过一遍我不是全手工操作而是把提取结果分给几个工程师用协同表格逐行核对。清洗过程中我总结了几条经验一是把所有空格统一转成半角空格。CAD里常见全角空格网页渲染时会造成换行和排版错误。二是直径符号统一有的图纸用“%%C”控制符有的直接用“⌀”HTML里一律用U2300字符。三是上下标处理文本里出现“^2”就转成HTML的“²”或者用“2”别留歧义。四是分数线处理CAD里“\S1/2;”就是“1/2”的堆叠网页端要转成MathJAX可识别的“\frac{1}{2}”。五是希腊字母统一小写比如μ和“u”在手写标注里经常混用网页里得统一。六是单位不可忽略公式单位单独存一列别跟在数值后面。七是公式编号要保留图纸上用“(1)”“(2)”编号的公式网页端也要能对应编号不然读者引用时说不清楚。八是来源图号绝不删除这是追溯原始设计的最短路径。4. 动易组件转网页的实操流程组件选型到发布上线4.1 先说“动易组件”是什么、能干什么“动易组件”这个名字在不同语境下指的东西不一样。在机械行业信息化场景里一种是在线文档/图纸网页化组件一种是动态网页发布程序包还有一种泛指的是各种支持DWG预览的WebCAD组件。这里按我实际项目中用的方式来理解一套能把结构化数据我们提取出的公式CSV转换生成静态/动态网页并且拉通检索、渲染、权限管理的网页应用组件。你可以把它理解成一个“文档转网页的流水线”输入是结构化文本输出是一套由HTML/CSS/JavaScript组成的在线公式库。这类组件核心解决三件事把非网页格式转成浏览器能直接显示的内容把公式从静态图变成能够被索引和检索的文本提供一套编辑界面让不懂网页代码的工程师也能维护内容。我去某行业技术交流群里聊过很多企业用这类组件的场景是设备说明书维护、工艺卡片的网页化、老图纸的数字化归档本质上都属于“图纸公式重获新生”的范畴。4.2 整体落地步骤拆解五步走第一步环境准备。装好Python环境、一个CAD解析库用于读取DXF/DWG、一个HTML模板框架以及我们需要专门提的动易组件。第二步提取规范化。把CAD图纸批量跑一遍输出CSV按上面说的规则清洗。第三步公式值计算逻辑梳理。纯展示的公式直接转成文本需要计算的公式另抽出来写成函数网页端做一个输入框交互。第四步组件转换配置。把CSV按组件要求的字段映射好——通常是“分类、公式名称、公式内容、变量说明、单位、示例计算、来源图号”这7个字段然后启动转换生成网页。第五步发布部署。本地测试渲染没问题后发布到内网服务器支持网页端和手机端正常访问。这五个步骤看起来平铺直叙其实每步都有不少细活下面把关键环节再说透一点。4.3 关键环节一公式转换成网页能识别的数学语言网页上显示公式最怕的就是用图片。有些工具可以把公式一键转成PNG方便是方便但检索不到、图片还容易破更致命的是公式内容改不了。我用的是MathJAX方案Web前端里最成熟的数学排版引擎之一只要把公式写成LaTeX/TeX格式它就会自动渲染成规整的数学排版。这样公式在网页源代码里仍然是人能读的文本搜索引擎和内部检索都能索引后期修改也方便。CAD提取出来的“TP×n/9550”这种格式正式转成LaTeX就是T\frac{P \times n}{9550}看着高级原理不复杂。我们只需要把提取文本按规则替换分数转\frac格式、乘号“×”转“\times”、根号“√”转“\sqrt{}”、上下标用“^”和“_”表示。这套转换我用一个映射函数实现遇到特殊符号查表替换就行。某些激进的做法是直接用大语言模型做公式语义转换把“扭矩等于功率乘转速除以9550”翻译成LaTeX但我不推荐在数据链条中完全依赖它因为生成结果不稳定小范围校验可以用大批量处理还是规则引擎稳。4.4 关键环节二动态计算公式的网页交互设计图纸公式转网页最高的目标是“可计算”。机械设计里一个公式很少是孤立数字往往是好几个输入变量牵一发而动全身。网页端如果只是显示一个静态公式读者还要自己拿计算器按一遍那价值就少了一半。我设计了一个标准交互模式每个公式页面这样组织最上方是公式名称然后是公式本体LaTeX渲染下面是“输入参数区”每个变量对应一个带默认值的输入框单位标注清楚再往下是“计算结果区”点一下“计算”按钮就给出结果最底部是“公式说明”和“来源图号”。实现起来前端用原生JavaScript写一个计算函数就够了不需要复杂框架。function torqueCalc() { const P parseFloat(document.getElementById(power).value); const n parseFloat(document.getElementById(speed).value); const T (9550 * P) / n; document.getElementById(result).innerText 输出扭矩 T T.toFixed(2) N·m; }这里面有个容易忽略的点单位换算。图纸公式经常用工程单位比如功率用kW转速用r/min力用kgf或N扭矩输出是N·m还是kgf·m。网页输入框里必须标明“单位”字段计算函数内部要统一转成国际单位制再计算。我没做好这件事的代价是某次转换一个液压系统压力的公式输入数值时混淆了MPa和bar结果网页计算出来的数值和工艺实际值差了十倍被工艺老师傅当场指出。4.5 关键环节三转换后的页面结构设计页面布局我建议采用三栏式。左侧是公式分类树按“机械传动”、“液压气动”、“结构强度”、“电机选型”、“材料力学”等大类组织中间是公式主体和计算器右侧是相关公式推荐和图纸预览。分类树的分类来源不要自己瞎起直接沿用图纸设计手册的分类体系这样工程师们找公式时能按熟悉路径浏览。每个公式页面最好加“同类图纸引用块”——就是列出所有出现过该公式的图号点击可以调用组件内置的DWG在线预览功能直观看到公式在图纸上的原貌。这个功能很讨喜因为网页上公式再清晰工程师还是习惯回图纸确认上下文比如这个公式是用在哪个剖视图里、哪个零件的校核上。4.6 关键环节四批量转换的组件配置示例如果你手头用的组件支持一套配置文件驱动转换那一定要用配置文件而不是在界面上一个个点。原因很现实图纸每次更新字段映射规则是稳定的配置一次之后后续更新图纸只需重跑一遍脚本。拿一个简化配置示例来说明[source] file formulas_clean.csv encoding utf-8-sig [mapping] category 分类 name 公式名称 formula 公式内容 variables 变量说明 unit 单位 example 示例计算 source_dwg 来源图号 [render] math_engine mathjax page_template formula_detail.html list_template formula_list.html [deploy] target_dir /var/www/formulas url_prefix /fc/这套配置的大致意思是从清洗后的CSV读取数据按mapping区的字段对应关系把内容绑定到模板里渲染生成分类列表页和详情页最后输出到Web服务器目录。组件之所以叫“动易”就在于它把这种“数据到页面”的转换做了固化我们使用者只要维护好数据和模板再来一百张图纸也不是什么大事。5. 常见问题与排查技巧我摔过的坑你别再摔5.1 公式内容乱码问题不一定在网页端有过一次网页上所有“⌀”直径符号全部显示成“”。第一反应以为是网页编码问题检查了一圈HTML的charset已经设置成UTF-8了还是不显示。最后排查到源头发现提取CSV的时候用的编码是系统默认的GBKExcel另存时符串被转成了别的东西数据源头已经坏了网页端再怎么修也没用。所以做事有个顺序问题先检查CSV文件本身用记事本看原始内容有没有“”或者“锟斤拷”这类典型乱码再去看网页端。干净数据进干净页面出脏数据进去了后面全是脏的。5.2 公式显示成源代码多半是Markdown/LaTeX转义问题MathJAX渲染有个前提页面中的“$”符或“\(”符必须正确嵌套。如果公式内容里含HTML的特殊字符比如小于号“”、大于号“”、与符号“”被浏览器先按HTML解析了MathJAX就彻底拿不到原始字符串结果页面上直接显示一堆LaTeX命令的原码。解决方法是组件转换时增加HTML实体转义这一步。公式里的“”转成“”“”转成“”让浏览器先不把它当成HTML标签。我最初没留意组件里的“自动实体化开关”公式只要出现“≤”就被截断很隐蔽的毛病。5.3 提取时图层冻结导致公式不全CAD图纸里不同系统尺寸标注、技术要求、参数表往往放在不同图层。有些人习惯把不用的图层冻结掉甚至关掉程序遍历时如果默认只读取可见图层无形中会漏掉大量公式。我的解决办法是读取每个图层的名称和开关状态但遍历实体时全部遍历只是记录实体的可见性标志清洗时再根据需要决定是否保留。处理某设备的老图纸时发现有个“技术要求-隐藏”图层里面放的是关键公式的旧版本修订记录不算正式发布内容但留着可以追溯设计演变挺有意思的。5.4 网页计算器结果与设计手册对不上先查单位再查系数用户反馈某个齿轮强度计算公式的网页计算结果和设计手册上的例题结果不一致。数值差了正好10倍。查了半天发现公式里有个系数“K”手册例题里K1.25网页端输入框默认值却是0.125工程师直接用默认值计算自然不会对。这个教训让我明白网页端的“默认值”必须用设计手册的典型例题值而不是随口填的经验值。默认值一错用户对整套系统都会失去信任。后来我把每个公式页面都加了一行“示例数据”直接标注“本组数据来自设计手册第几版第几章的表”用户心里有底多了。5.5 手机端显示公式太长被截断部署第1版时有工程师反馈手机上看公式总是只显示左边一半要横滑才能看完。机械公式虽然不算很长但在窄屏上一个分式加上下标字母串宽度超过屏幕很正常。解决方法是给公式容器加CSS的横向滚动兜底同时尽量把长公式按逻辑换行——MathJAX支持在等号处或加号处折行。另外排版时尽量用“行间公式”而不把公式硬塞进表格单元格单元格里公式换行很别扭。5.6 常见问题速查表现象可能原因应急处理长期修复网页显示“?”或“锟斤拷”源头CSV编码不对重新导出UTF-8编码文件提取脚本固定utf-8-sig输出直径/希腊字符消失字体映射缺失导出PDF对比映射字符清洗规则增加Unicode映射表公式渲染成源码HTML实体未转义查看转义开关是否正确转换模板增加实体化处理上下标格式丢失CAD堆叠标记被还原成纯文本检查公式文本中是否有“\S”清洗脚本增加堆叠语法解析计算结果和手册不一致默认值或单位错误核对例题参数每个公式登记“示例题来源”手机端公式显示不全容器宽度未适配CSS加overflow-x:auto响应式布局优化公式提取不全图层被冻结或关闭检查图层开关表遍历时忽略可见性过滤网页更新后旧数据还在缓存未清/输出目录未覆盖清理浏览器缓存部署脚本自动清理旧文件6. 发布之后的一些心得公式网页化只是第一步整套流程跑通之后我最有感慨的是CAD图纸里的公式转网页这件事真正难的从来不是“转换”本身而是“怎么让工程师愿意用、用起来顺手”。我在做这套系统时最初只做了公式静态展示工程师们反馈一般说“这和翻PDF有啥区别”。后来加了可计算功能使用量明显上来了因为计算器可以替代他们手边那个老旧的工程计算器。再后来加了“一键复制计算结果到工艺卡片”的功能——网页端算完直接把带单位的完整结果复制到剪贴板粘贴进工艺文档就行。这个功能看起来土但很实用内部培训时老师傅演示了一次就觉得“这玩意儿有用”。还有一点公式的来源追溯很重要。网页版本和图纸版本必须一一对应每当图纸改版网页公式就得跟着改。我建了一个“公式与图号映射表”每次图纸改版后运行一次差异检查把新增公式、删除公式、变更公式全标出来再决定是否更新网页端。这套机制看着繁琐但在图纸版本频繁迭代的企业里能避免网页内容和图纸脱节导致误用过期公式的严重后果。最后分享一个具体小技巧公式网页上线后不妨在详情页底部加一个“纠错反馈”入口。工程师用的时候发现哪里不对可以一键发起修订申请系统自动带上公式ID和当前页面URL直接进工单流程。这样一个简单的闭环让公式库不再是一次性产物而是跟着图纸更新、跟着使用反馈持续打磨的活文档。我在实际运行两个月后统计收到了40多条反馈其中三分之一是真实问题价值很高。机械行业数字化转型并不是把所有东西都搞得花里胡哨把老图纸里一个不起眼的公式变成网页上随手可查、输入即算的内容就是一件很实在的事。