我有以下控制台程序:
using System.Windows.Forms;
[STAThread]
public static void Main(string[] args)
{
var text = Clipboard.GetText();
Console.WriteLine("Input Text: " + text);
Clipboard.SetText(text, TextDataFormat.Html);
Console.WriteLine("Output Text: " + Clipboard.GetText());
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
输入/输出如下所示:
Input Text: <table><tr><td>Hello, world!</td></tr></table>
Output Text:
Exiting...
所需的输入/输出应如下所示:
Input Text: <table><tr><td>Hello, world!</td></tr></table>
Output Text: <table><tr><td>Hello, world!</td></tr></table>
Exiting...
基本上,我想要一个控制台程序将存储为剪贴板中的纯文本的HTML数据转换为实际的HTML数据并将其放回剪贴板中,以便我可以将其直接粘贴到Outlook电子邮件中,它将格式化为表格而不是的文字。但我不明白为什么Clipboard.SetText()
调用消隐了剪贴板而不是将文本放在具有正确数据类型的剪贴板中。如何更改程序以达到所需的输出?
答案 0 :(得分:2)
使用GetText的other overload,因为您指定了TextDataFormat
:
Clipboard.GetText(TextDataFormat.Html))
答案 1 :(得分:0)
知道了。显然,即使Outlook使用HTML格式的邮件格式,您也不能只将HTML粘贴到其中并将其呈现为表格。相反,您必须将纯文本转换为RTF格式,然后将其粘贴到Outlook中。显然,在.NET中将HTML转换为RTF并没有很好的解决方案,您必须使用Windows窗体库中的WebBrowser控件和RichTextBox。这是代码:
[STAThread]
public static void Main(string[] args)
{
//string input = "<table><tr><td>Hello, world!</td></tr></table>";
string input = Clipboard.GetText();
ConvertToRTF(input);
string text = Clipboard.GetText(TextDataFormat.Rtf);
Clipboard.SetText(text,TextDataFormat.Rtf);
}
public static void ConvertToRTF(string html)
{
RichTextBox rtbTemp = new RichTextBox();
WebBrowser wb = new WebBrowser();
wb.Navigate("about:blank");
wb.Document.Write(html);
wb.Document.ExecCommand("SelectAll", false, null);
wb.Document.ExecCommand("Copy", false, null);
rtbTemp.SelectAll();
rtbTemp.Paste();
rtbTemp.Copy();
}