明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6862|回复: 10

[讨论]如何在打开DWG的时候自动替换系统缺少的字体

[复制链接]
发表于 2009-9-21 11:06:00 | 显示全部楼层 |阅读模式
    最近研究这个一点头绪都没有。请朋友们指点下:
    说明中是这样的:

    如果用户图形指定了当前系统中不存在的字体,AutoCAD 将自动用指定的替换字体替换该字体。 默认情况下,AutoCAD 使用 simplex.shx 文件。 但用户也可以根据需要指定另一种字体。 使用 Preferences 对象的 AltFontFile 特性来设置替换字体的文件名。

如果用户使用具有大字体的文字样式,可以使用 AltFontFile 特性映射其他字体, 此系统变量使用默认的txt.shx、bigfont.shx 字体文件对。

但是AltFontFile只能修改前面的txt.shx,不能修改大字体(反正我没有成功。只能修改一个字体,不能同时输入两个。)

使用字体映射表感觉不怎么现实,总有许多不知道的字体名,于是早早放弃了。

目前想的方法是:在打开CAD图的时候beginopen里面使用objectDBX先读取及修改需要打开的图中的字体信息,但是这个时候其实这图已经在打开状态中,objectDBX不能使用open,也就得不到图里面的信息。感觉进了先有鸡还是先有蛋的循环中。

    了解的朋友们提供下思路撒,谢谢了

 楼主| 发表于 2009-9-23 10:25:00 | 显示全部楼层

有了初步的解决方案:就是在beginopen中调用一个外部程序(这个程序是监测CAD那个替换字体窗体的,如果检测到直接点击取消,原本的想法是先选择字体,然后点击确定的,但是操作过程中发现取得的listbox中的字体名字符串都是乱码,搞了一整晚没有搞定,于是采用迂回的方法,先进去CAD,然后再替换字体。),然后在endopen中再关闭这个外部程序。初步试用感觉还行,看不到替换字体的窗体出现了,但是看任务管理器中这个外部程序在这一段时间内内存一直占了25%,那打开图像比较大的话肯定会有影响。

还是想在CAD中直接解决这个字体替换的问题。朋友们有没有其他的方法或者思路啊。

发表于 2009-9-23 11:19:00 | 显示全部楼层

汗,字体的部分没怎么研究

在zfbj版主的空间看到了这样的方式,看看有没帮助

转载注明出处

AutoCAD中最烦人的事情之一就是字体问题,经常打开别人的图形都要字体替换,哪怕是你装了网上的常用字体还是那样,不知道从哪里来那么多的未知字体。
如果你偷懒,直接在字体替换对话框出现的时候按Esc键,可能图形中有些文字显示不正常;如果你直接按下Enter键,那么得到的可能是一些不知道是不是日文的符号(因为默认的替换字体是bigfont.shx)。
我几乎每天都要打开上百张图纸,每个图纸都花费几秒钟的时间去选择一般来说万能的gbcbig.shx字体,这样算起来一辈子要花的时间相当可观。
OK,解决方案来了,在AutoCAD的Fonts文件夹中,复制一份gbcbig.shx文件,将它改名为agbcbig.shx,重新启动AutoCAD吧,以后遇到字体替换可以直接按下Enter键来完成替换了!!

 楼主| 发表于 2009-9-23 12:48:00 | 显示全部楼层

哈哈。终于lzh741206注意到了本贴。谢谢回复

你所说的的确也是个方便的好方法。但是也需要人工干预才行。要是能够打开的时候自动替换字体就好了。个人感觉更加智能一点。

我比较倾向于使用objectDBX,但是搞不定,在打开dwg之前无法知道将要打开哪个dwg文件。

发表于 2009-9-23 16:42:00 | 显示全部楼层
可以考虑objectDBX做个批处理替换的宏
 楼主| 发表于 2009-9-23 17:40:00 | 显示全部楼层

恩,lzh741206版说的是。但是这个只能在未打开的时候使用objectDBX来批量修改各图的替换字体。这个也是一种处理方法。对于图很多的话,这个方法非常方便。

但是要是图比较少的话,我更倾向于能够在打开的过程中修改替换字体。于是我在beginopen里面使用objectDBX(因为这个时候已经得到需要替换字体的dwg文件名了),但是可惜的是,这个时侯objectDBX不能使用open打开(我想是这个时候此图已经算打开了吧,所以不能用objectDBX open).

所以现在比较矛盾,我想打开dwg的时候不出现替换字体对话框,那就必须在打开这个dwg之前替换掉里面的字体,但如果我不打开某个dwg,我又怎么知道要替换哪个dwg中的字体呢。。。。。。感觉挺难的

再次感谢lzh741206版的帮助。

发表于 2010-5-13 16:41:00 | 显示全部楼层

字体替换

//一般可在打开文件事件中调用

思路如下:

1.得到CAD所有支持路径

2.得到这些路径下的字体文件名,分别将大字体和常规字体放入列表中

3.得到本图中的所有字体样式

4.查找字体样式的字体是否在 大字体和常规字体放入列表中 存在

5.不存在时用指定字体替换

QQ 420021327 共同研究进步

发表于 2010-5-19 12:19:00 | 显示全部楼层

我是这样处理的:   加我QQ 420021327  共同研究

//此三行可放在CAD启动时
Database dbFont = ArxHlb.CADEntAdd.Getdb(filePath, System.IO.FileShare.ReadWrite, false);
Autodesk.AutoCAD.Interop.AcadApplication cadApp = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication as Autodesk.AutoCAD.Interop.AcadApplication;
ArxHlb.CADFonts cadf = new ArxHlb.CADFonts(cadApp);
           
ArxHlb.CADFonts.CheckRepFonts(dbFont, "simplex.shx", "hztxta.shx");//加我QQ 420021327  共同研究
dbFont.SaveAs(dbFont.Filename, DwgVersion.Current);

//打开文件

发表于 2012-4-15 10:04:11 | 显示全部楼层
这里有你要的答案;
http://bbs.mjtd.com/thread-93031-1-1.html
 楼主| 发表于 2012-4-29 23:24:25 | 显示全部楼层
感谢【KAIXIN】版主。
不过看了下,里面提到的那个替换字体代码的就是我写的。。囧
感觉有一段内存保存了用户选择的替换字体的字体名,因为打开同一张图,一开始替换过后第二次打开不再出现对话框,但是一直没找到这个内存位置,看了段时间加密解密,头大,于是放弃。
暂时就先打开CAD再替换了。打开CAD前直接点图就替换的难度蛮大得。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 16:29 , Processed in 0.171269 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表