kucha007 发表于 2022-11-9 11:40:01

【K:StyleNonBoldSong】非黑宋规整

本帖最后由 kucha007 于 2023-6-10 07:09 编辑

最早是根据文字样式名称修改,见此贴:http://bbs.mjtd.com/thread-186303-1-1.html

现在是获取文字样式的字体名称,如果不是黑体宋体或形字体(ltypeshp.shx),就规整为设置的标准字体。

;如果不成功则抓取错误,如果成功就执行程序
(defun K:CatchApply (fun args / result)
(if
    (not
      (vl-catch-all-error-p
      (setq result (vl-catch-all-apply
                      (if (= 'SYM (type fun)) fun (function fun))
                      args
                  )
      )
      )
    )
    result
)
)
函数部分:
;(字体)非黑宋规整为标准字体
(defun K:StyleNonBoldSong (FNam BFNam Width / TmpDoc obj FindFlag TypeFace Bold Italic Charset PitchandFamily)
(setq TmpDoc (vla-get-activedocument (vlax-get-acad-object)))
(vlax-for obj (vla-get-textstyles TmpDoc)
      (if
      (and
            (not (vl-string-search "|" (vla-get-Name obj)))
            (not (vl-string-search "$" (vla-get-Name obj)))
      );排除外部参照的字体样式
      (progn
          (setq FindFlag Nil)
          (K:CatchApply 'vla-Getfont (list obj 'TypeFace 'Bold 'Italic 'Charset 'PitchandFamily))
          (if (eq TypeFace "")
            (if (/= (vla-get-fontfile obj)"ltypeshp.shx");线型形文件
                  (setq FindFlag T)
            )
            (if (not (wcmatch (strcase TypeFace) "**宋**,**FANGSONG**,**黑体**,**SIMHEI**"))
                (setq FindFlag T)
            )
          )
          (if FindFlag
            (progn
                (K:CatchApply 'vla-setfont (list obj FNam "false" "false" 1 0));TTF
                (K:CatchApply 'vla-put-fontfile (list obj FNam));SHX
                (K:CatchApply 'vla-put-bigfontfile (list obj BFNam));大字体
                (K:CatchApply 'vla-put-width (list obj Width));宽度因子
            )
          )
      )
      )
)
(princ)
)

用法:

(K:StyleNonBoldSong "仿宋_GB2312" nil 0.8);TTF
(K:StyleNonBoldSong "txt" nil 0.8);SHX:不使用大字体
(K:StyleNonBoldSong "gbenor" "gbcbig" 0.8);SHX:使用大字体




其它:
;获取TTF字体名称
(vla-Getfont obj 'TypeFace 'Bold 'Italic 'Charset 'PitchandFamily)
(princ TypeFace)

;打印所有字体样式名称(defun C:TT ()
    (vlax-for TS (vla-get-textstyles (vla-get-activedocument (vlax-get-acad-object)))
      (princ (strcat "\n" (vla-get-Name TS)))
    )(princ)
)
;打印非外部参照的字体样式名称(defun C:TT ()
    (vlax-for TS (vla-get-textstyles (vla-get-activedocument (vlax-get-acad-object)))
      (if (not (vl-string-search "|" (vla-get-Name TS)))
             (princ (strcat "\n" (vla-get-Name TS)))
      )
    )(princ)
)

;打印非外部参照的字体样式所使用的字体名称
(vlax-for TS (vla-get-textstyles (vla-get-activedocument (vlax-get-acad-object)))
    (if (not (vl-string-search "|" (vla-get-Name TS)));排除外部参照
          (progn
          (setq FontNam (vla-get-fontfile (vlax-ename->vla-object (tblobjname "style" (vla-get-Name TS)))))
          (princ (strcat "\n" FontNam))
      )
    )
)(princ)


panliang9 发表于 2022-11-9 19:05:06

谢谢楼主分享!

中国梦 发表于 2022-11-9 20:56:31


谢谢楼主分享!

w379106181 发表于 2022-11-11 10:08:26

谢谢楼主分享!

bai2000 发表于 2022-11-18 20:10:36

好像哪里有点问题?不能过滤黑体(包括:黑体.ttf   simhei.ttf)

kucha007 发表于 2022-11-18 23:49:38

bai2000 发表于 2022-11-18 20:10
好像哪里有点问题?不能过滤黑体(包括:黑体.ttf   simhei.ttf)

我没问题唉,麻烦提供处理失败的文件看看哈

LIULISHENG 发表于 2023-4-18 07:33:02

谢谢楼主分享!

jackAqwq 发表于 2023-6-9 14:33:55

提示参数过多誒

kucha007 发表于 2023-6-10 07:09:39

jackAqwq 发表于 2023-6-9 14:33
提示参数过多誒

嗯嗯,下面用法忘记改了,再看一下
页: [1]
查看完整版本: 【K:StyleNonBoldSong】非黑宋规整