[讨论]如何在打开DWG的时候自动替换系统缺少的字体
<span class="Apple-style-span" style="FONT-SIZE: 14px; FONT-FAMILY: Arial;"> 最近研究这个一点头绪都没有。请朋友们指点下:<div> 说明中是这样的:</div><div><br/></div><div> 如果用户图形指定了当前系统中不存在的字体,AutoCAD 将自动用指定的替换字体替换该字体。 默认情况下,AutoCAD 使用<span class="Apple-converted-space"> simplex.shx 文件。 但用户也可以根据需要指定另一种字体。 使用 Preferences 对象的 AltFontFile 特性来设置替换字体的文件名。</div><p class="body">如果用户使用具有大字体的文字样式,可以使用 AltFontFile 特性映射其他字体, 此系统变量使用默认的txt.shx、bigfont.shx 字体文件对。</p><p class="body">但是AltFontFile只能修改前面的txt.shx,不能修改大字体(反正我没有成功。只能修改一个字体,不能同时输入两个。)</p><p class="body">使用字体映射表感觉不怎么现实,总有许多不知道的字体名,于是早早放弃了。</p><p class="body">目前想的方法是:在打开CAD图的时候beginopen里面使用objectDBX先读取及修改需要打开的图中的字体信息,但是这个时候其实这图已经在打开状态中,objectDBX不能使用open,也就得不到图里面的信息。感觉进了先有鸡还是先有蛋的循环中。</p><p class="body"> 了解的朋友们提供下思路撒,谢谢了</p></span></span> <p>有了初步的解决方案:就是在beginopen中调用一个外部程序(这个程序是监测CAD那个替换字体窗体的,如果检测到直接点击取消,原本的想法是先选择字体,然后点击确定的,但是操作过程中发现取得的listbox中的字体名字符串都是乱码,搞了一整晚没有搞定,于是采用迂回的方法,先进去CAD,然后再替换字体。),然后在endopen中再关闭这个外部程序。初步试用感觉还行,看不到替换字体的窗体出现了,但是看任务管理器中这个外部程序在这一段时间内内存一直占了25%,那打开图像比较大的话肯定会有影响。</p><p>还是想在CAD中直接解决这个字体替换的问题。朋友们有没有其他的方法或者思路啊。</p> <p>汗,字体的部分没怎么研究</p><p>在zfbj版主的空间看到了这样的方式,看看有没帮助</p><p>转载注明出处</p><p>AutoCAD中最烦人的事情之一就是字体问题,经常打开别人的图形都要字体替换,哪怕是你装了网上的常用字体还是那样,不知道从哪里来那么多的未知字体。<br/>如果你偷懒,直接在字体替换对话框出现的时候按Esc键,可能图形中有些文字显示不正常;如果你直接按下Enter键,那么得到的可能是一些不知道是不是日文的符号(因为默认的替换字体是bigfont.shx)。<br/>我几乎每天都要打开上百张图纸,每个图纸都花费几秒钟的时间去选择一般来说万能的gbcbig.shx字体,这样算起来一辈子要花的时间相当可观。<br/>OK,解决方案来了,在AutoCAD的Fonts文件夹中,复制一份gbcbig.shx文件,将它改名为agbcbig.shx,重新启动AutoCAD吧,以后遇到字体替换可以直接按下Enter键来完成替换了!! </p> <p>哈哈。终于<font face="Verdana" color="#da2549"><strong>lzh741206</strong><font color="#000000">注意到了本贴。谢谢回复</font></font></p><p><font face="Verdana">你所说的的确也是个方便的好方法。但是也需要人工干预才行。要是能够打开的时候自动替换字体就好了。个人感觉更加智能一点。</font></p><p><font face="Verdana">我比较倾向于使用objectDBX,但是搞不定,在打开dwg之前无法知道将要打开哪个dwg文件。</font></p> 可以考虑<font face="Verdana">objectDBX做个批处理替换的宏</font> <p>恩,<font face="Verdana" color="#da2549"><strong>lzh741206版</strong><font color="#000000">说的是。但是这个只能在未打开的时候使用objectDBX来批量修改各图的替换字体。这个也是一种处理方法。对于图很多的话,这个方法非常方便。</font></font></p><p><font face="Verdana" color="#da2549"><font color="#000000">但是要是图比较少的话,我更倾向于能够在打开的过程中修改替换字体。于是我在beginopen里面使用objectDBX(因为这个时候已经得到需要替换字体的dwg文件名了),但是可惜的是,这个时侯objectDBX不能使用open打开(我想是这个时候此图已经算打开了吧,所以不能用objectDBX open).</font></font></p><p><font face="Verdana">所以现在比较矛盾,我想打开dwg的时候不出现替换字体对话框,那就必须在打开这个dwg之前替换掉里面的字体,但如果我不打开某个dwg,我又怎么知道要替换哪个dwg中的字体呢。。。。。。感觉挺难的</font></p><p><font face="Verdana">再次感谢<strong><font color="#da2549">lzh741206</font></strong>版的帮助。</font></p><p><strong><font face="Verdana" color="#da2549"></font></strong></p>字体替换
<p>//一般可在打开文件事件中调用</p><p>思路如下:</p><p>1.得到CAD所有支持路径</p><p>2.得到这些路径下的字体文件名,分别将大字体和常规字体放入列表中</p><p>3.得到本图中的所有字体样式</p><p>4.查找字体样式的字体是否在 大字体和常规字体放入列表中 存在</p><p>5.不存在时用指定字体替换</p><p>QQ 420021327 共同研究进步</p> <p>我是这样处理的: 加我QQ 420021327 共同研究<br/></p><p>//此三行可放在CAD启动时<br/>Database dbFont = ArxHlb.CADEntAdd.Getdb(filePath, System.IO.FileShare.ReadWrite, false);<br/>Autodesk.AutoCAD.Interop.AcadApplication cadApp = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication as Autodesk.AutoCAD.Interop.AcadApplication;<br/>ArxHlb.CADFonts cadf = new ArxHlb.CADFonts(cadApp);<br/> <br/>ArxHlb.CADFonts.CheckRepFonts(dbFont, "simplex.shx", "hztxta.shx");//加我QQ 420021327 共同研究<br/>dbFont.SaveAs(dbFont.Filename, DwgVersion.Current);</p><p>//打开文件</p> 这里有你要的答案;http://bbs.mjtd.com/thread-93031-1-1.html 感谢【KAIXIN】版主。
不过看了下,里面提到的那个替换字体代码的就是我写的。。囧
感觉有一段内存保存了用户选择的替换字体的字体名,因为打开同一张图,一开始替换过后第二次打开不再出现对话框,但是一直没找到这个内存位置,看了段时间加密解密,头大,于是放弃。
暂时就先打开CAD再替换了。打开CAD前直接点图就替换的难度蛮大得。
页:
[1]
2