芯片制造文档用KindEditor排版,工程师习惯了把CAD图纸截图贴进正文,或者把dwg文件作为附件挂到文章里。等到质量体系要统一收口图纸、或者新产线建设需要把工艺文件里的设备布局图、治具图全部迁移到工程图库时,麻烦一下就上来了:一个几千字的芯片制造文档正文里,图纸链接和CAD附件会被富文本编辑器处理成各种各样的格式,靠人工打开文档、右键图片另存、再在CAD里重画,效率完全没法看。
这篇内容就把我实际走过的一条链路完整分享出来:从KindEditor生成的HTML正文里把CAD图纸识别出来、批量下载,再按图片类图纸和DWG/DXF文件类图纸分别转存。整个过程不需要改系统,不需要开发特权,纯粹靠导出正文和几个脚本就能跑完。另外,针对很多人问到的“新装CAD打开图纸会很多线”,我也会把排查经验一并整理出来,因为图纸转存后第一步验证就是打开看,这个坑不解决,后面全是浪费时间。
1. 先搞清楚一件事:KindEditor里的“图纸”到底以什么形态存在
1.1 一个让我下决心写脚本的现场
之前接到一个活儿:某条封装产线的SOP文档要全部换版,旧文档里有将近3000张设备治具图、贴片坐标图、局部放大图需要迁移到工程图库服务器。文档系统本身是基于Java那套常见的自研CMS做的,正文编辑器就是KindEditor。我最初的方法很笨,登录后台打开一篇文档,找到里面的图片,鼠标右键“图片另存为”,遇到dwg附件还要先下载到本地再用CAD打开另存。第一天干了四个小时,处理了不到30篇,照这个速度,3000张图纸得干到明年去。
后来我切到后台数据库看了一眼表结构,发现KindEditor其实并没有把图纸本身存成什么特殊格式,它就是在content字段里存了一段HTML。那些看起来规规矩矩排在正文里的图纸,无非就是img标签、a标签或者内嵌的base64数据。图纸能不能被自动化转存,关键不是KindEditor这个编辑器怎么操作,而是你有没有办法把一整段HTML内容拿出来做结构化解析。
1.2 KindEditor正文里图纸的三种常见形态
我把经历过的文档系统翻了一遍,KindEditor里保存的图纸资源基本只有下面这三种形态,判断方法很简单,直接看HTML源码就行。
第一种,是上传后插入的图片,也就是img标签。KindEditor上传图片后,默认会在正文里生成一段类似<img src="/uploadfile/2024/0901/xxx.png" style="width: 600px; height: 400px;">的代码。这种图占了绝大多数,芯片制造文档里的工艺截图、显微镜照片、设备面板指示图基本都是这个格式。只要能从src属性里拿到图片的URL,下载就完成了百分之八十。
第二种,是作为附件插入的CAD原始文件。很多工程师会在KindEditor工具栏里点“插入附件”,然后把dwg或dxf上传上去。这种情况下正文里通常是一个a标签,比如<a href="/uploadfile/2024/0901/xxx.dwg" target="_blank">治具图纸下载</a>。判断标准就是href里带有.dwg、.dxf这类后缀。这种附件是真正的CAD可编辑文件,也是最需要优先转存的对象。
第三种,是直接粘贴进来的截图。这种情况最隐蔽,工程师从CAD里复制一个区域,粘贴到KindEditor正文里,如果编辑器配置了base64存储,content里会出现<img src="data:image/png;base64,iVBORw0K...">这么一长串字符串。这类图片并没有真正上传到服务器目录,它们只是躺在了数据库字段里。后面转存时,需要用正则把base64内容单独解码出来写成本地文件,不能像前两种那样直接按URL下载。
1.3 判断哪些图值得“转存”
不是所有从正文里抠出来的图片都有必要转成CAD格式。我在第一轮批量处理时就犯过这个错,把公司Logo、表格截图、人员签名扫图全部当成图纸下载下来,结果图库目录里堆了一堆无意义的文件。
后来我定了一套分类规则,根据扩展名和插入上下文来判断:
| 资源类型 | 常见扩展名 | 能否再编辑 | 转存策略 |
|---|---|---|---|
| 工艺截图、设备照片 | png / jpg / gif | 不能 | 原样下载,作为参考图归档 |
| 上传的CAD附件 | dwg / dxf | 可以 | 直接下载,按工程图归档 |
| 上传的PDF图纸 | 有限 | 下载保存,需要改图时再导入CAD | |
| 粘贴产生的base64图片 | png(内嵌) | 不能 | 解码成图片文件后,判断是否矢量化 |
| 其他附件 | xlsx / docx / pptx | 不涉及CAD | 跳过,走各自归档流程 |
关键点在于:KindEditor只是个网页编辑器,它没有解析DWG或者DXF的能力。你在KindEditor的编辑框里看到一张图,不代表那是一个CAD文件,它可能只是位图预览。所谓“快速转存CAD图纸”,在绝大多数企业系统里的真实语义是:把文档中引用的CAD资源完整抠出来,再按图纸类型做下一步处理。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 把文档正文从系统里“端出来”:导出HTML的方式决定了自动化能不能跑通
2.1 先确认正文存在哪个字段,导出时注意编码
KindEditor整合进不同系统后,正文内容可能存放在不同的地方。有的是单独的文章表content字段,有的是放在流程表单的某个字段里,还有的是直接存成了HTML文件。我建议先在后台数据库里做一次侦查,找到你目标文档所在的数据表,把一条记录完整SELECT出来看。
以常见的文档表结构为例,可以这样查询:
sql复制SELECT id, doc_no, title, content
FROM cms_article
WHERE module = 'chip_process'
AND title LIKE '%治具%'
LIMIT 50;
最关键的是编码问题。数据库连接要显式加上UTF-8字符集参数,不然中文文档标题导出到本地后,在脚本里打开会出现乱码。如果是从MySQL导出的,执行SQL前先设置:
sql复制SET NAMES utf8mb4;
导出到本地文件时,我习惯直接让SQL客户端把结果存成.sql或.csv文件,但CSV方案很容易踩坑:E
