最近同事提出问题,在我来此公司以前,他们为客户作过一个打印管理系统,业务是这样的,须要打印的人员,须要先将打印的内容上传到服务器上,而后进行打印的申请,而后领导审批完成,能够进行打印,打印须要到专门的打印控制台,进行刷卡身份认证,而后就能看到被批复的那条能够打印的信息,以及须要被打印的文件,这个文件支持三种类型,word,excel,pdf。以前他们实现的时候,将word,excel全都转换成了pdf,而后统一使用pdf的静默打印,进行打印工做处理。而后若是待打印的文件不算小,那么转换成pdf这一过程是个不小的开销,果真,一天,同事来讲,客户打印一个48页的word文档,后台转换程序死在那了。。。。。我问了她一下,为何不直接打印,为何要转换成pdf呢(以前的系统是C#的代码,其实能够直接操做word API进行打印控制)她说,以前也是直接打印,可是客户的一个word文档,内容有超出页边距的,打印的过程当中,会弹出提示,问:页面超出页边距,是否要继续打印。这样的提示,没法去掉,须要人工进行干预才能够。 我这才明白原来是这样,其实也就是之前的开发人员,没有找到去掉word打印提示框的办法。或者说,并无仔细的去研究。而放弃了,选择了一个不太明智的办法,转换成pdf。 我先是百度了一下,果真一百度就找到了相对应的帖子,按照帖子的说法,主要在于word的application对象的DisplayAlerts属性。这个属性为false就不会有弹出的任何提示,警告框,嗯,看这个属性的字面意思也是这个做用,因而,编写测试代码,验证一下,我对C#环境不熟悉,因而直接文本写VBS,其实同样的,只要VBS能干的事情,C#也好,C++也好,都能干,都是调的COM组件而已,下面是测试代码:html
- printWord()
- Private sub printWord()
- Set wordObject = CreateObject("Word.Application")
- wordObject.Visible = False
- Set wordDocument = wordObject.Documents.Open("E:\超出打印区域.doc")
- wordObject.WordBasic.FilePrintSetup "778", 0
- wordObject.DisplayAlerts = False
- wordObject.PrintOut()
- wordObject.DisplayAlerts = True
- wordDocument.close
- set wordDocument = Nothing
- wordObject.Visible = True
- wordObject.Quit
- set wordObject = Nothing
- end Sub
将上面代码保存成后缀.vbs的文件,直接双击运行,获得如下效果:服务器
很明显,wordObject.DisplayAlerts = False 没有达到预期效果。仔细查看msdn,找到下面这个连接:http://support.microsoft.com/kb/163574/zh-cn 上面写的很清楚,最重点的一句话:要防止出现边距错误,您必须禁用后台打印以前发出的命令,可在打印文档。要打印的命令完成后,您能够从新启用后台打印。增长禁用后台打印的代码:
app
- printWord()
- Private sub printWord()
- Set wordObject = CreateObject("Word.Application")
- wordObject.Visible = False
- Set wordDocument = wordObject.Documents.Open("E:\超出打印区域.doc")
- wordObject.WordBasic.FilePrintSetup "778", 0
- wordObject.Options.PrintBackground = False
- wordObject.DisplayAlerts = False
- wordObject.PrintOut()
- wordObject.DisplayAlerts = True
- wordObject.Options.PrintBackground = True
- wordDocument.close
- set wordDocument = Nothing
- wordObject.Visible = True
- wordObject.Quit
- set wordObject = Nothing
- end Sub
重点就是wordObject.Options.PrintBackground = False,也就是说只有在这句代码生效以后,wordObject.DisplayAlerts = False的做用才会对‘要防止出现边距错误’这个提示起做用。ide