通过编程方式,PowerPoint将文本框导出为EMF之后,字体发生变化,何解?

梦想家起飞 2009-11-18 10:39:07
用的是Office自动化编程,日文系统,.NET编程环境。

对Shape.TextFrame设定了AutoSize等属性,
对Shape.TextFrame.TextRange.Text设定了文本,
对Shape.TextFrame.TextRange.Font设定了字体名称、大小、样式等,
※字体为"MS Gothic",12pt,Blue,Underline。

通过Shape.Export函数将文本框导出为EMF文件,
发现只要符合以下条件,原本设定的"MS Gothic"在实际生成的EMF中变成了"PMingLiu"。

1、Vista+Office2007
※Win2K+Office2003无此问题
2、至少包含一个比较复杂的汉字,例如“華”等
※如果都是简单汉字的话无此问题,例如“日”等
3、字数达到或超过6个

据本人猜测,可能是内部GDI函数对文字的字符集或代码页的判断有误,
因为"MS Gothic"针对的是CP932,"PMingLiu"针对的是CP935。。

本帖最大只能放100分,如果能帮忙找出原因或者提供回避方法,另外再发帖给分。
如果需要提供更详细的信息,请回帖提问,谢谢。
...全文
405 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
梦想家起飞 2009-12-09
  • 打赏
  • 举报
回复
该问题不仅影响PowerPoint,也影响Excel,
不止在Vista下有问题,在WindowsXP下页有问题。
梦想家起飞 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wingtrace 的回复:]
经过调查意外地解决了。。
[/Quote]

很遗憾地说,其实那个办法不能解决问题。。
后来客户去咨询了MS,MS说设定日文字体的时候用Font.Name属性是不对的,
应该用Font.NameFarEase属性,否则就算强行将LanguageID改成日语,
所用的也依然是日语的缺省字体(MS PGothic),而不是代码里面设置的
MS Gothic。MS没说这是个BUG,只是在KB里面也有记录,KB号记不得了。。

※因为MS Gothic和MS PGothic只是等宽与非等宽的区别,在文字比较少,
而且不包含空格的时候,是很难看出来差别的,但是一旦包含大量的空格,
用MS PGothic的总宽度明显要比MS Gothic短得多。。。
LPR_Pro 2009-11-19
  • 打赏
  • 举报
回复
学习
雪影 2009-11-19
  • 打赏
  • 举报
回复
mark 学习了
梦想家起飞 2009-11-18
  • 打赏
  • 举报
回复
确实,从ms和msdn的网站上也找不出什么有用的信息。
而且通过调查发现,Shape.Export其实是一个没有任何文档记载的函数,
MSDN的forum上有人讨论,宣称它实际上是一个不被支持的函数。。。

解决这种问题,看来真的得靠经验和运气了。。

[Quote=引用 1 楼 tttyd 的回复:]
mark
这种问题原因多多,尤其是系统环境问题,不好诊断
[/Quote]
雪影 2009-11-18
  • 打赏
  • 举报
回复
mark
这种问题原因多多,尤其是系统环境问题,不好诊断
梦想家起飞 2009-11-18
  • 打赏
  • 举报
回复
经过调查意外地解决了。。

无奈之余尝试着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关于字体和文本处理的一些
工作原理,在此聊表谢意吧。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧