设置文本后剪贴板为空
本文关键字:剪贴板 置文本 | 更新日期: 2023-09-27 18:31:41
我有以下控制台程序:
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()
调用会清空剪贴板,而不是将文本放在具有正确数据类型的剪贴板中。如何更改程序以达到所需的输出?
使用 GetText 的其他重载,因为您要指定TextDataFormat
:
Clipboard.GetText(TextDataFormat.Html))
知道了。显然,即使Outlook是HTML格式的邮件格式,您也不能只是将HTML粘贴到其中并将其呈现为表格。相反,您必须将纯文本转换为富文本格式,然后将其粘贴到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();
}