将格式化文本复制到剪贴板,但字体除外

时间:2011-11-28 01:55:41

标签: .net html formatting clipboard rtf

我正在尝试以编程方式生成格式化文本并将其复制到剪贴板,以便将其粘贴到电子邮件中。我想要复制的唯一格式是换行符和粗体文本。我希望它使用电子邮件的当前或默认字体。

  

许可: XXXXX
  许可密钥: XXXXX

我对HTML的尝试在Windows Live Mail中产生了正确的格式,但是它有自己选择的字体。

Dim Text As String =
    "Version:0.9" & vbCrLf &
    "StartHTML:00000097" & vbCrLf &
    "EndHTML:00000343" & vbCrLf &
    "StartFragment:00000243" & vbCrLf &
    "EndFragment:00000308" & vbCrLf &
    "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"">" & vbCrLf &
    "<HTML><HEAD><TITLE>Software License</TITLE></HEAD><BODY>" & vbCrLf &
    "<!--StartFragment -->" & vbCrLf &
    "<P><B>Licensed to:</B> XXXXX<BR /><B>License key:</B> XXXXX</P>" & vbCrLf &
    "<!--EndFragment -->" & vbCrLf &
    "</BODY></HTML>"
Clipboard.SetText(Text, TextDataFormat.Html)

我尝试在写字板上正确粘贴RTF,但在Windows Live Mail中粘贴简单无效。

Dim Text As String =
    "{\rtf1\ansi " &
    "\b Licensed to:\b0  XXXXX\par " &
    "\b License key:\b0  XXXXX\par " &
    "}"
Clipboard.SetText(Text, TextDataFormat.Rtf)

有没有人知道将有限格式复制到剪贴板的解决方案。

1 个答案:

答案 0 :(得分:4)

这是特定于格式的(在某些方面特定于应用程序)。您已经了解了如何针对两种情况执行此操作,但应该了解为什么它正常工作:

当您尝试从应用程序(例如,outlook)中的剪贴板粘贴数据时,该应用程序首先查询剪贴板以查看可用的格式,并将为其选择“最佳”格式(由Outlook确定)开发者)。如果没有可用于该应用程序的格式,那么它就好像剪贴板上没有数据一样。这解释了为什么wordpad可以处理RTF数据,但实时邮件却没有。

您可以(并且应该)做的事情是将数据以多种格式放在剪贴板上,以允许其他应用进行选择。

不使用Clipboard.SetText(),而是使用Clipboard.SetDataObject(),并使用多种格式填充DataObject

Dim htmlText as String = ''your working html
Dim rtfText as String = ''your working rtf

Dim data As New DataObject()
data.SetText(htmlText, TextDataFormat.Html)
data.SetText(rtfText, TextDataFormat.Rtf)
''and possibly:
data.SetText(plainText, TextDataFormat.Text)


Clipboard.SetDataObject(data)