程序控制打印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

相關文章
相關標籤/搜索