最近被要求在一个项目中写一个简单的编辑器,并且要融入WORD的艺术字功能,咋看通过COM方式应该比较容易搞定,于是打开BAIDU,GOOGLE搜寻了一遍,只能感叹如此多的条条目目都是一样的COPY版而已。发现网上版本最多的就是两种版本:
1.WORD 97和VB6.0的组合
2.使用API GDI功能模拟艺术字的效果
我是一个懒人,本着从简原则,第二种方案直接放弃,因此选用第一种方案,在优快云的下载找到的6.0代码如下
通过代码,原理还是比较简单的,通过COM方式构建一个WORD,插入艺术字后通过系统的剪粘板复制出来,然后SHOW出来。
不过当移植到VB.NET时,这段代码就不能执行成功了,起初以为是OFFICE版本问题,不过在不同版本OFFICE之间,VB6.0的EXE都可以顺利执行。可见问题的症结点不在这里,通过DEBUG猛然发现 Clipboard对象在执行COPY之后还是空的,无奈手动执行了一遍复制黏贴操作,没有问题,无奈又揣着这个问题去百度,GOOGLE了一把,终于终于在一篇“substitute way to extract Shapes as images from MS Word documents“文中找到了答案,原来是在WORD中的SHAPE是有类型的,而我们插入的艺术字没有定义这样一个类型,通过CLIPBOARD后,由于类型不明确,所以对象是空的,解决的办法就是将WORD 中的SHAPE进行类型转换,代码参考了该文的VSTO代码,实例代码如下
至此,VB.NET艺术字顺利搞定。