Autodesk ACAD 2027图纸空间视口文本提取:含几何化文本
提取AutoCAD图纸空间视口内普通及几何化文本的Lisp方案
核心思路
针对需求,可通过Lisp脚本实现两步核心操作:
- 精准筛选图纸空间指定视口内的所有对象
- 分别处理普通文本(TEXT/MTEXT)与几何化文本(线条构成的字符):普通文本直接提取内容,几何化文本借助AutoCAD内置命令转换为可提取的文本对象后再获取内容
Lisp脚本示例
(defun c:ExtractViewportText (/ doc mspace pspace vp ent obj txtlst txtobj) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) ;; 切换到图纸空间 (vla-put-ActiveSpace doc acPaperSpace) (princ "\n请选择目标视口: ") ;; 让用户选择视口对象 (setq vp (car (entsel))) (if (and vp (eq (cdr (assoc 0 (entget vp))) "VIEWPORT")) (progn ;; 锁定视口防止操作偏移 (vla-put-Locked (vlax-ename->vla-object vp) :vlax-true) ;; 进入视口模型空间 (vla-put-ActiveSpace doc acModelSpace) (vla-ActiveViewport doc (vlax-ename->vla-object vp)) ;; 选择视口内所有对象 (setq ent (ssget "_X")) (if ent (progn (setq txtlst '()) (repeat (sslength ent) (setq obj (vlax-ename->vla-object (ssname ent (setq i (1- i))))) (cond ;; 处理普通文本对象 ((or (eq (vla-get-ObjectName obj) "AcDbText") (eq (vla-get-ObjectName obj) "AcDbMText")) (setq txtlst (cons (vla-get-TextString obj) txtlst))) ;; 处理几何化文本(线条/多段线构成) ((or (eq (vla-get-ObjectName obj) "AcDbLine") (eq (vla-get-ObjectName obj) "AcDbPolyline")) ;; 选中当前对象并调用RECOGNIZE命令转换为文本 (sssetfirst nil (ssadd (vlax-vla-object->ename obj))) (command "_.RECOGNIZE") ;; 检查转换后的文本对象 (setq txtobj (entlast)) (if txtobj (setq txtlst (cons (vla-get-TextString (vlax-ename->vla-object txtobj)) txtlst)))) ) ) ;; 将提取的文本输出到文件 (setq f (open "C:\\Viewport_Text_Output.txt" "w")) (foreach txt (reverse txtlst) (write-line txt f)) (close f) (princ (strcat "\n已提取" (itoa (length txtlst)) "条文本,保存至C:\\Viewport_Text_Output.txt")) ) (princ "\n视口内未检测到对象") ) ;; 切回图纸空间并解锁视口 (vla-put-ActiveSpace doc acPaperSpace) (vla-put-Locked (vlax-ename->vla-object vp) :vlax-false) ) (princ "\n未选择有效的视口对象") ) (princ) )
使用说明
- 将上述代码保存为
ExtractViewportText.lsp文件 - 在AutoCAD中输入
APPLOAD命令,加载该Lisp文件 - 输入命令
ExtractViewportText,按提示选择目标视口即可
注意事项
- 几何文本转换限制:
RECOGNIZE命令对几何文本的识别依赖字符轮廓的规范性,若线条构成的字符变形严重,转换准确率会下降 - 文件路径修改:脚本中默认输出路径为
C:\\Viewport_Text_Output.txt,可根据需求自行修改 - 视口锁定:脚本会临时锁定视口,操作完成后自动解锁,避免视口内对象偏移
补充方案
若RECOGNIZE命令无法满足几何文本的转换需求,可结合你已有的OCR方案,通过Lisp脚本将视口内的几何对象导出为高分辨率图片,再调用本地OCR工具提取文本:
- 使用
EXPORT命令将视口内对象导出为PNG/JPG格式(设置600DPI) - 通过Lisp的
vl-shell-execute函数调用Python OCR脚本处理图片
内容的提问来源于stack exchange,提问作者ctgarvey
相关产品推荐
相关产品推荐

