一、問題
在word轉換成圖片時,遇到word文件內容copy到剪切板后,使用但剪切板內容獲取值為null。本人之前介紹的C#操作word文檔和轉換成圖片隨筆中WordtoImage()方法出現問題。
document.Content.CopyAsPicture(); //拷貝到粘貼板 IDataObject data = Clipboard.GetDataObject();//Q:null?
二、解決方案
(1)在winform中把這個方法放入一個按click事件中。
之前介紹的word轉換成圖片,是編寫winform項目的一個demo,這個剪切板值可以正常獲取值。但是把這個方法封裝成一個靜態幫助類時,這里就會出錯。
這里給出word轉換成圖片,在winform中按鈕click事件的方法代碼:
private void btnWordToIamge_Click(object sender, EventArgs e) { List<Bitmap> offbmList = new List<Bitmap>(); Bitmap[] wordbm; string OutputPath = @"************";//圖片保存路徑 wordbm = wordDocement.WordtoImage(filepath); int i = 0; foreach (var item in wordbm) { i++; item.Save(OutputPath + i.ToString() + "." + "Jpeg", ImageFormat.Jpeg); } }
這里WordtoImage()方法已在我的博客 C#操作word文檔和轉換成圖片 給出,這里就不在重復,這里只是解決Clipboard為null問題。
二、在線程中使用單線程單元,
對於STA和MTA,本人剛剛接觸,看了些許的資料,同時轉載一一篇STA和MTA的區別的文檔,勉強理解點。
針對把WordtoImage()方法和word操作方法一起封裝后,剪切板無法得到值,在外部調用WordtoImage()方法時需開啟線程....等
話不多說直接上代碼:
Thread th_wordprocess = new Thread(new ThreadStart(WordOperate));
th_wordprocess.SetApartmentState(ApartmentState.STA);//這句是關鍵 th_wordprocess.Start();
然后在WordOperate(),調用WordtoImage()方法