最近同事提出問題,在我來此公司以前,他們爲客戶作過一個打印管理系統,業務是這樣的,須要打印的人員,須要先將打印的內容上傳到服務器上,而後進行打印的申請,而後領導審批完成,能夠進行打印,打印須要到專門的打印控制檯,進行刷卡身份認證,而後就能看到被批覆的那條能夠打印的信息,以及須要被打印的文件,這個文件支持三種類型,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