程序控制打印word文档超出页边距的问题

最近同事提出问题,在我来此公司以前,他们为客户作过一个打印管理系统,业务是这样的,须要打印的人员,须要先将打印的内容上传到服务器上,而后进行打印的申请,而后领导审批完成,能够进行打印,打印须要到专门的打印控制台,进行刷卡身份认证,而后就能看到被批复的那条能够打印的信息,以及须要被打印的文件,这个文件支持三种类型,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

  
  
  
  
  1. printWord()  
  2.  
  3. Private sub printWord()   
  4.  
  5.     Set wordObject = CreateObject("Word.Application")  
  6.     wordObject.Visible = False 
  7.  
  8.     Set wordDocument = wordObject.Documents.Open("E:\超出打印区域.doc")  
  9.     wordObject.WordBasic.FilePrintSetup "778", 0  
  10.  
  11.     wordObject.DisplayAlerts = False 
  12.       
  13.     wordObject.PrintOut()  
  14.  
  15.     wordObject.DisplayAlerts = True   
  16.     wordDocument.close  
  17.     set wordDocument = Nothing 
  18.       
  19.     wordObject.Visible = True 
  20.     wordObject.Quit  
  21.     set wordObject = Nothing 
  22.  
  23. end Sub 

将上面代码保存成后缀.vbs的文件,直接双击运行,获得如下效果:服务器

很明显,wordObject.DisplayAlerts = False 没有达到预期效果。仔细查看msdn,找到下面这个连接:http://support.microsoft.com/kb/163574/zh-cn 上面写的很清楚,最重点的一句话:要防止出现边距错误,您必须禁用后台打印以前发出的命令,可在打印文档。要打印的命令完成后,您能够从新启用后台打印。增长禁用后台打印的代码:
app

  
  
  
  
  1. printWord()  
  2.  
  3. Private sub printWord()   
  4.  
  5.     Set wordObject = CreateObject("Word.Application")  
  6.     wordObject.Visible = False 
  7.  
  8.     Set wordDocument = wordObject.Documents.Open("E:\超出打印区域.doc")  
  9.     wordObject.WordBasic.FilePrintSetup "778", 0  
  10.  
  11.     wordObject.Options.PrintBackground = False 
  12.     wordObject.DisplayAlerts = False 
  13.       
  14.     wordObject.PrintOut()  
  15.  
  16.     wordObject.DisplayAlerts = True   
  17.     wordObject.Options.PrintBackground = True 
  18.  
  19.     wordDocument.close  
  20.     set wordDocument = Nothing 
  21.       
  22.     wordObject.Visible = True 
  23.     wordObject.Quit  
  24.     set wordObject = Nothing 
  25.  
  26. end Sub 

重点就是wordObject.Options.PrintBackground = False,也就是说只有在这句代码生效以后,wordObject.DisplayAlerts = False的做用才会对‘要防止出现边距错误’这个提示起做用。ide

相关文章
相关标签/搜索