• 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的字节嘛保存的流对象里。

  • 相关阅读:
    [C++] 变量
    [C++] 算术类型
    [C++] 回调函数(转)
    [国嵌攻略][095][脚本编程技术]
    [国嵌攻略][094][守护进程设计]
    [国嵌攻略][093][并发服务器设计]
    [国嵌攻略][092][UDP网络程序设计]
    [国嵌攻略][091][TCP网络程序设计]
    [国嵌攻略][090][linux网络编程模型]
    [国嵌攻略][089][网络协议分析]
  • 原文地址:https://www.cnblogs.com/HelloQLQ/p/16289343.html
Copyright © 2020-2023  润新知