一、问题
在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()方法