ClipBord 複製 Html winform

剪貼板針對不同的數據格式,在組織剪貼板內容時,有不同的格式要求。最簡單的是,複製一般的.txt文本內容。使用方法
ClipBord.Clear();
ClipBord.SetText(str);
複製 Html,需要把原本的Html內容在包裝一層。
0
在StartFragment和EndFragment之間的內容就是你自己的Html內容了。頭部的鍵值對,鍵必須一樣,值需要自己計算。
之間可以是Html內容,也可以是整個Html標籤包含的內容,還包括Html標籤。
我在網上找了個現成的方法,已經實驗過了,是可以得:
 
public string HtmlFData(string html)

        {

            StringBuilder sb = new StringBuilder();

            Encoding encoding = Encoding.UTF8; //Encoding.GetEncoding(936);

            string Header = @"

Version: 1.0

StartHTML: {0:000000}

EndHTML: {1:000000}

StartFragment: {2:000000}

EndFragment: {3:000000}

";

            string HtmlPrefix = @"

<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN"">
<!--StartFragment-->
";

            string HtmlSuffix = @"
<!--EndFragment-->
";



            // Get lengths of chunks

            int HeaderLength = encoding.GetByteCount(Header);//注意這裏這樣做,不直接取字符長度,是中文utf8佔3字節,不是unicode的英文下的1字節

            HeaderLength -= 16; // extra formatting characters {0:000000}

            int PrefixLength = encoding.GetByteCount(HtmlPrefix);

            int HtmlLength = encoding.GetByteCount(html);

            int SuffixLength = encoding.GetByteCount(HtmlSuffix);



            // Determine locations of chunks

            int StartHtml = HeaderLength;

            int StartFragment = StartHtml + PrefixLength;

            int EndFragment = StartFragment + HtmlLength;

            int EndHtml = EndFragment + SuffixLength;



            // Build the data

            sb.AppendFormat(Header, StartHtml, EndHtml, StartFragment, EndFragment);

            sb.Append(HtmlPrefix);

            sb.Append(html);

            sb.Append(HtmlSuffix);

            return sb.ToString();

        }

  

然後,複製到剪貼板的代碼:
var data = HtmlFData(strHtml);

                MemoryStream sMem = new MemoryStream();

                byte[] byteHtml = Encoding.UTF8.GetBytes(data);

                sMem.Write(byteHtml, 0, byteHtml.Length);
                sMem.Flush();

                var dataObject = new DataObject();
                dataObject.SetData(DataFormats.Html, sMem);

                Clipboard.SetDataObject(dataObject);
                ...
                 sMem.Close();

注意如果你直接用SetText這個api,並設置了Html格式,中文是會亂碼的,所以這裏用內存流把字符轉爲了utf-8的字節嘛保存的流對象裏。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章