不知道各位有沒有遇到一些需求是需要透過Office的automation自動化完成的需求呢?前陣子遇到一個需求是,客戶需要寫類似批次的作業,並且要透過Word開啟PDF檔案後在裡面做一些內容加工,可是沒想到!再開啟PDF文件時,Word會主動談出一個PDF轉換文件警告的視窗!
這篇文章就來告訴各位,我們要如何不讓他再次顯示出來!
前言
好久一段時間沒有發文章了,最近開始工作了,不過真沒想到一開始接觸的開發,就是每次開啟Visual Studio時,總是會在範本中出現的Office專案!以前總是覺得這個專案我應該這輩子不會有機會接觸到,沒想到…
再加上其實這部分算是屬於業界才會有的需求,所以學習時遇到相關問題,在網路上的相關技術文章也不算多,因此遇到許多Detail的問題真的要自己想辦法,接下來也會暫時把在專案開發中所遇到的所有狀況也努力記錄下來,讓各位可以參考 :)
情境解說
不知道各位有沒有遇到一些需求是需要透過Office的automation自動化完成的需求呢?前陣子遇到一個需求是,客戶需要寫類似批次的作業,並且要透過Word開啟PDF檔案後在裡面做一些內容加工,可是沒想到!再開啟PDF文件時,Word會主動談出一個PDF轉換文件警告的視窗@@ 如下:
好的,其實這也不難,只要按下「不要再顯示此訊息」就可以一勞永逸了,可是!總不可能每次拿到一台新的環境上,第一份文件打開後還要事先做一次這樣的動作吧…
其實這個是有解的!
以下提供兩種解法,如果再撰寫Office程式的各位有需要時,快速的搞定他吧!
實作方式
當初遇到這個問題時,就在想,這類的設定,應該有一個類似config的檔案在記錄吧,可是去Office的資料夾下怎麼翻都翻不到,很苦惱,後來想到,不對!Windows不是有機碼(Registry) 這玩意嗎?! 機碼就是用來記錄一些使用者操作資訊跟應用程式資訊的地方,所以說有可能以類似true or false的方式寫入吧!
一但提到了機碼,那麼在基碼中兩大項就有區分成Local Machine與Current User,是最常會去動到的部分,於是便開始測試,「如果是Current_User的話,那麼我切換另一個使用者登入,應該會再跳出一次視窗?」,果不其然真是如此!
便開始鎖定Current_User的資料夾下,結果非常巧的!真被我挖到了哈哈
Office使用者的相關設定選項路徑在:
HKEY_CURRENT_USER\\software\\Microsoft\\Office\\15.0\\Word\\Options下!
只要把DisablePdfWarning設為1即可!
附註:這邊我是使用Office 2013去做開發,所以使用的組件是15.0版本,不過其實Office能支援PDF轉Word也是到2010開始,而且2010還要另外安裝插件!
這樣便知道怎麼做囉!
方法如下,兩種方式可以挑選
1.撰寫登陸機碼的程式
string path = "software\\Microsoft\\Office\\15.0\\Word\\Options";
RegistryKey key = Registry.CurrentUser;
RegistryKey wordPath = key.CreateSubKey(path);
if (wordPath != null)
{
wordPath.SetValue("DisableConvertPdfWarning", 1);
Console.WriteLine("Done");
}
else
Console.WriteLine("Not Exist Key Folder");
Console.ReadKey();
2.製作佈署用安裝檔時,插入機碼路徑
完整的佈署與部署到IIS的步驟會再另外撰寫相關系列文章,一堆環境的測試,那個過程真是搞死人= =
本人是透過Windows Insatller去做佈署的,因為是開發2013增益集,所以使用Visual Studio 2013,而在2013上製作安裝檔案,可以下載Microsoft Visual Studio Installer Projects便可以開始使用在VS2010時好用的安裝檔製作囉!
設定路徑如下範例:
補充-如果想要開啟檔案時,強制彈出轉換檔案格式視窗,如下圖:
可以設定此機碼值:
ConfirmFileConversion為1即可!
後記
結果當我嘗試完後才發現篇官方文章有提到,就把他列在參考了
參考
文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝 =)
另外要轉載請附上出處 感謝