437271963 发表于 2025-7-7 18:29:02

字体样式没有字体,自动替换并显示文字

本帖最后由 437271963 于 2025-7-9 18:28 编辑

fonts文件里面是常用的字体,如果碰到字体库里面没有的字体,就会显示不全,或提示替换字体样式。

通过网盘分享的文件:AutoCAD_fonts.7z
链接: https://pan.baidu.com/s/1vbU0jPTi3ZiOipjtaxTqYg?pwd=fdq4 提取码: fdq4
--来自百度网盘超级会员v1的分享

;;如果字体库里面没有找到字体,就修改常规字体为tssdeng.shx;如果有大字体,并且没有找到就修改为hztxt.shx字体
;;自动-修改-字体样式;
(defun ZXFonts_25 ( / ff1 ff3 tr1 tr2 txt)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(vl-load-com)
(setq ff1 "D:\\AutoCAD_fonts\\fonts\\");字体路径;【压缩包解压到D盘,这样路径才不会出错。】
(vlax-for txt (vla-get-textstyles (vla-get-activedocument (vlax-get-acad-object)))
(setq tr1 (vla-get-fontfile txt) tr2 (strcase tr1) ff3 (strcat ff1 tr1));取得常规字体
(if (and (/= tr1 "")
         (/= tr2 "TSSDENG.SHX")
         (vl-string-search ".SHX" tr2 0);确认是形字体
         (null (findfile ff3));这个字体库里面没有找到
      )
   (vla-put-fontfile txt "tssdeng.shx");修改大字体规格
)
(setq tr1 (vla-get-bigfontfile txt) tr2 (strcase tr1) ff3 (strcat ff1 tr1));取得大字体
(if (and (/= tr1 "");不为空
         (/= tr2 "HZTXT.SHX")
         (vl-string-search ".SHX" tr2 0);形字体
         (null (findfile ff3));这个字体库里面没有找到
      )
   (vla-put-bigfontfile txt "Hztxt.shx");修改大字体
)
)
(princ)
)
(ZXFonts_25)
;;自动修改大字体文件;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1、压缩包放到D盘解压
2、命令OP,添加以下路径:
   D:\\AutoCAD_fonts
   D:\\AutoCAD_fonts\\fonts

3、上移路径到顶
4、命令appload,把【自动修改字体样式.lsp】添加到启动项

5、以后打开图纸就可以完整显示文字内容,并且不会有提示【替换字体】。

修正了一下自动加载程序,代码如下:
(defun ZXFonts_252 ( / tr1 tr2 txt)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(vl-load-com)
(vlax-for txt (vla-get-textstyles (vla-get-activedocument (vlax-get-acad-object)))
(setq tr1 (vla-get-fontfile txt) tr2 (strcase tr1));字体名称
(if (and (/= tr1 "")
         (vl-string-search ".SHX" tr2 0);确认是形字体
         (null (findfile tr1));这个字体库里面没有找到
      )
   (vla-put-fontfile txt "tssdeng-改.shx");修改常规字体名称
)
(setq tr1 (vla-get-bigfontfile txt) tr2 (strcase tr1));取得大字体
(if (and (/= tr1 "")
         (vl-string-search ".SHX" tr2 0);确认是形字体
         (null (findfile tr1));这个字体库里面没有找到
      )
   (vla-put-bigfontfile txt "Hztxt-改.shx");修改大字体
)
)
(princ)
)
(ZXFonts_252)


22693766 发表于 2025-11-17 15:37:26

你有种再说一遍 发表于 2025-7-7 18:54
这个功能一直是一个伪需求,
遇到没有的字体,应该去服务器(或者本机某个文件夹)上面检索一次,
如果有就放 ...

画图目的是为了看, 不是为了好看,
发给其他人打开都是乱码,只有你能看别人看不了.

每个人都自己定义个自定义字体, 那还怎么干活.
至于你说的"用字体来设计个家具", 这种行为应该受到谴责.

除了一些特殊符号这种还能理解, 为了好看把cad弄得这么麻烦, 好看应该去搞效果图去.

437271963 发表于 2025-7-7 19:32:28

kozmosovia 发表于 2025-7-7 19:22
都写代码了,而且还有7Z,还不如直接再Gitee上建一个公共项目,将7Z里面的SHX/TTF都保存在里面,代码里如果 ...

25年,在图纸上经常可以看到使用了钢筋【%%284】是635钢筋,网上没有找到,只能自己来解决。然后整合了所知道的资源,由于形字体tssdeng+hztxt目前看着比较完美,才提出这个功能,是为缺少字体的人员使用的。
程序先检测,看看字体库有没有字体,如果没有,就进行替换操作。

你有种再说一遍 发表于 2025-7-7 18:54:13

本帖最后由 你有种再说一遍 于 2025-7-7 18:55 编辑

这个功能一直是一个伪需求,
遇到没有的字体,应该去服务器(或者本机某个文件夹)上面检索一次,
如果有就放字体文件夹载入,以此保证CAD环境的纯洁,实现过后删除.
如果还没有,你的替换成某个字体,是会造成形文件丢失的,因此就不应该替换.除非你确保别人图纸没有使用形文件,但是你都确保了,为什么不确保字体肯定有呢?

437271963 发表于 2025-7-7 19:01:38

你有种再说一遍 发表于 2025-7-7 18:54
这个功能一直是一个伪需求,
遇到没有的字体,应该去服务器(或者本机某个文件夹)上面检索一次,
如果有就放 ...

你测试一下,如果有“?”的字体,就上传来。
1、CAD形字体要使用我上传的。
2、设置按我的要求来。

你有种再说一遍 发表于 2025-7-7 19:03:48

437271963 发表于 2025-7-7 19:01
你测试一下,如果有“?”的字体,就上传来。
1、CAD形字体要使用我上传的。
2、设置按我的要求来。

形文件是大家都可以做的啊,怎么叫用你上传的,你到底听懂了没

437271963 发表于 2025-7-7 19:08:10

你有种再说一遍 发表于 2025-7-7 19:03
形文件是大家都可以做的啊,怎么叫用你上传的,你到底听懂了没

这个hztxt.shx大字体,基本上可以显示所有中文;
常规字体tssdeng.shx基本上可以显示我知道的钢筋字体;
所以才提出缺少字体就自动使用这两个字体来替换。

你有种再说一遍 发表于 2025-7-7 19:10:30

437271963 发表于 2025-7-7 19:08
这个hztxt.shx大字体,基本上可以显示所有中文;
常规字体tssdeng.shx基本上可以显示我知道的钢筋字体;
...

你应该找到可以替换的映射关系,
而不是缺失就替换,
我给你举个极端例子,形文件是可以放家具的,
你要是替换了,连家具都没有了,嘻嘻

437271963 发表于 2025-7-7 19:12:06

你有种再说一遍 发表于 2025-7-7 19:10
你应该找到可以替换的映射关系,
而不是缺失就替换,
我给你举个极端例子,形文件是可以放家具的,


所以,替换之前会检查,如果字体库里面有这个字体,就不会替换。

kozmosovia 发表于 2025-7-7 19:22:25

都写代码了,而且还有7Z,还不如直接再Gitee上建一个公共项目,将7Z里面的SHX/TTF都保存在里面,代码里如果本地没有找到就尝试网络自动下载到CAD的Font目录里。这样不需要分享7Z的地址,也不需要为了一个SHX就得去把整个7Z下载下来再手动解压找到SHX复制到本地。

wflmllds 发表于 2025-7-7 20:28:15

试试好用不
页: [1] 2
查看完整版本: 字体样式没有字体,自动替换并显示文字