通过编程方式,PowerPoint将文本框导出为EMF之后,字体发生变化,何解? 本帖最后由 wingtrace 于 2009-11-18 10:44:16 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 确实,从ms和msdn的网站上也找不出什么有用的信息。而且通过调查发现,Shape.Export其实是一个没有任何文档记载的函数,MSDN的forum上有人讨论,宣称它实际上是一个不被支持的函数解决这种问题,看来真的得靠经验和运气了。。 经过调查意外地解决了。。无奈之余尝试着DEBUG跟踪TextRange的各种属性,看有没有异样的地方,发现在调用Shape.TextFrame.TextRange.Text设定文本之后,TextRange.LanguageID变成了msoLanguageIDTraditionalChinese,而设定文本前它是正常的msoLanguageIDJapanese。至于为什么TextRange.Text接收文本之后会改变TextRange.LanguageID,应该是对设定进来的文本的代码页发生了误判,在全日文系统以及全日文输入的情况下不应该发生这样的问题才对,或许是PowerPoint2007的BUG,或许是Vista的BUG,那就不得而知了。。btw,本次BUG调查中Feng Yuan的《Windows图形编程》一书起了很大作用,没有它我也不会深入地去了解EMF的构造以及GDI关于字体和文本处理的一些工作原理,在此聊表谢意吧。 很遗憾地说,其实那个办法不能解决问题。。后来客户去咨询了MS,MS说设定日文字体的时候用Font.Name属性是不对的,应该用Font.NameFarEase属性,否则就算强行将LanguageID改成日语,所用的也依然是日语的缺省字体(MS PGothic),而不是代码里面设置的MS Gothic。MS没说这是个BUG,只是在KB里面也有记录,KB号记不得了。。※因为MS Gothic和MS PGothic只是等宽与非等宽的区别,在文字比较少,而且不包含空格的时候,是很难看出来差别的,但是一旦包含大量的空格,用MS PGothic的总宽度明显要比MS Gothic短得多 该问题不仅影响PowerPoint,也影响Excel,不止在Vista下有问题,在WindowsXP下页有问题。 socket接收数据掉包问题,请教高手? vista里面出现的ntdll.dll异常 ATL中有void参数的函数怎么写 VC2005中的Class Wizard在什么地方呢? 累了,停下来,听一首歌 CSDN的网页怎么保存啊? DAO问题 一个关于拨号的问题? 动态2维数组定义,有问题求教,谢谢! 求救,如何读取字符数组中数据 关于MFC 分裂窗口滚动条的问题
而且通过调查发现,Shape.Export其实是一个没有任何文档记载的函数,
MSDN的forum上有人讨论,宣称它实际上是一个不被支持的函数解决这种问题,看来真的得靠经验和运气了。。
发现在调用Shape.TextFrame.TextRange.Text设定文本之后,
TextRange.LanguageID变成了msoLanguageIDTraditionalChinese,
而设定文本前它是正常的msoLanguageIDJapanese。至于为什么TextRange.Text接收文本之后会改变TextRange.LanguageID,
应该是对设定进来的文本的代码页发生了误判,在全日文系统以及全日文输入
的情况下不应该发生这样的问题才对,或许是PowerPoint2007的BUG,
或许是Vista的BUG,那就不得而知了。。btw,本次BUG调查中Feng Yuan的《Windows图形编程》一书起了很大作用,
没有它我也不会深入地去了解EMF的构造以及GDI关于字体和文本处理的一些
工作原理,在此聊表谢意吧。
很遗憾地说,其实那个办法不能解决问题。。
后来客户去咨询了MS,MS说设定日文字体的时候用Font.Name属性是不对的,
应该用Font.NameFarEase属性,否则就算强行将LanguageID改成日语,
所用的也依然是日语的缺省字体(MS PGothic),而不是代码里面设置的
MS Gothic。MS没说这是个BUG,只是在KB里面也有记录,KB号记不得了。。※因为MS Gothic和MS PGothic只是等宽与非等宽的区别,在文字比较少,
而且不包含空格的时候,是很难看出来差别的,但是一旦包含大量的空格,
用MS PGothic的总宽度明显要比MS Gothic短得多
不止在Vista下有问题,在WindowsXP下页有问题。