При работе с буфером обмена из C# выяснилось, что вставить туда HTML так, чтобы программы типа Word распознавали его не как текст, а именно как HTML не совсем просто, под катом пример.
Собственно, для вставки HTML в буфер, его нужно специальным образом подготовить. Вот таким методом:
\r\n\r\n"Собственно, для вставки HTML в буфер, его нужно специальным образом подготовить. Вот таким методом:
public static string PrepareHtmlToClippboard(string
html)
{
    Encoding enc = Encoding.UTF8;
    string begin = "Version:0.9\r\nStartHTML:{0:000000}\r\nEndHTML:{1:000000}"
        + "\r\nStartFragment:{2:000000}\r\nEndFragment:{3:000000}\r\n";
    string html_begin = "\r\n\r\n"
        + "
        + "
content=\"text/html; charset=" +
enc.WebName + "\">\r\n"
        + "HTML
clipboard \r\n
        + "";
    string html_end = "\r\n
\r\n\r\n";
    string begin_sample = String.Format(begin, 0, 0, 0, 0);
    int
count_begin = enc.GetByteCount(begin_sample);
    int
count_html_begin = enc.GetByteCount(html_begin);
    int
count_html = enc.GetByteCount(html);
    int
count_html_end = enc.GetByteCount(html_end);
    string html_total = String.Format(
        begin
        , count_begin
        , count_begin + count_html_begin +
count_html + count_html_end
        , count_begin + count_html_begin
        , count_begin + count_html_begin +
count_html
        ) + html_begin + html + html_end;
    return html_total;
}
Ну и вот так это можно использовать:
DataObject dataObj = new DataObject();
dataObj.SetData(DataFormats.Html, PrepareHtmlToClippboard("здесь HTML"));
dataObj.SetData(DataFormats.Text, "здесь текст, если приемник
не понимает html");
Clipboard.SetDataObject(dataObj, true);
Собственно все.
 
 
Комментариев нет:
Отправить комментарий