C# 如何在Windows10UWP中将HTML转换为RTF,反之亦然?
我正在Windows 10 UWP中使用RichEditBox控件,以允许用户使用一些格式选项。我正在从服务器获取HTML,我想将其转换为RTF以在RichEditBox中显示。类似地,我想在用户完成编辑后再次将其转换为HTML。我做了一个搜索,但我得到了样本,但他们没有帮助。我发现其中一个是为RichTextBlock工作,而不是为RichEditBox工作 我也尝试了下面的URL(RTF到HTML),但它没有给出正确的输出C# 如何在Windows10UWP中将HTML转换为RTF,反之亦然?,c#,windows-10-universal,C#,Windows 10 Universal,我正在Windows 10 UWP中使用RichEditBox控件,以允许用户使用一些格式选项。我正在从服务器获取HTML,我想将其转换为RTF以在RichEditBox中显示。类似地,我想在用户完成编辑后再次将其转换为HTML。我做了一个搜索,但我得到了样本,但他们没有帮助。我发现其中一个是为RichTextBlock工作,而不是为RichEditBox工作 我也尝试了下面的URL(RTF到HTML),但它没有给出正确的输出 有人请建议如何使用RichEditBox实现我的要求,因为它是唯
有人请建议如何使用RichEditBox实现我的要求,因为它是唯一允许粗体、斜体、项目符号等格式选项的控件。我找到了要转换的基本概念,并创建了以下方法将rtf转换为html。它可以正确转换文本格式选项 下面是将rtf转换为html的方法,您可以根据需要进行编辑
public static string ConvertToHtml(RichEditBox richEditBox)
{
string text, strColour, strFntName, strHTML;
richEditBox.Document.GetText(TextGetOptions.None, out text);
ITextRange txtRange = richEditBox.Document.GetRange(0, text.Length);
strHTML = "<html>";
int lngOriginalStart = txtRange.StartPosition;
int lngOriginalLength = txtRange.EndPosition;
float shtSize = 11;
// txtRange.SetRange(txtRange.StartPosition, txtRange.EndPosition);
bool bOpened = false, liOpened = false, numbLiOpened = false, iOpened = false, uOpened = false, bulletOpened = false, numberingOpened = false;
for (int i = 0; i < text.Length; i++)
{
txtRange.SetRange(i, i + 1);
if (i == 0)
{
strColour = txtRange.CharacterFormat.ForegroundColor.ToString();
shtSize = txtRange.CharacterFormat.Size;
strFntName = txtRange.CharacterFormat.Name;
strHTML += "<span style=\"font-family:" + strFntName + "; font-size: " + shtSize + "pt; color: #" + strColour.Substring(3) + "\">";
}
if (txtRange.CharacterFormat.Size != shtSize)
{
shtSize = txtRange.CharacterFormat.Size;
strHTML += "</span><span style=\"font-family: " + txtRange.CharacterFormat.Name + "; font-size: " + txtRange.CharacterFormat.Size + "pt; color: #" + txtRange.CharacterFormat.ForegroundColor.ToString().Substring(3) + "\">";
}
if (txtRange.Character == Convert.ToChar(13))
{
strHTML += "<br/>";
}
#region bullet
if (txtRange.ParagraphFormat.ListType == MarkerType.Bullet)
{
if (!bulletOpened)
{
strHTML += "<ul>";
bulletOpened = true;
}
if (!liOpened)
{
strHTML += "<li>";
liOpened = true;
}
if (txtRange.Character == Convert.ToChar(13))
{
strHTML += "</li>";
liOpened = false;
}
}
else
{
if (bulletOpened)
{
strHTML += "</ul>";
bulletOpened = false;
}
}
#endregion
#region numbering
if (txtRange.ParagraphFormat.ListType == MarkerType.LowercaseRoman)
{
if (!numberingOpened)
{
strHTML += "<ol type=\"i\">";
numberingOpened = true;
}
if (!numbLiOpened)
{
strHTML += "<li>";
numbLiOpened = true;
}
if (txtRange.Character == Convert.ToChar(13))
{
strHTML += "</li>";
numbLiOpened = false;
}
}
else
{
if (numberingOpened)
{
strHTML += "</ol>";
numberingOpened = false;
}
}
#endregion
#region bold
if (txtRange.CharacterFormat.Bold == FormatEffect.On)
{
if (!bOpened)
{
strHTML += "<b>";
bOpened = true;
}
}
else
{
if (bOpened)
{
strHTML += "</b>";
bOpened = false;
}
}
#endregion
#region italic
if (txtRange.CharacterFormat.Italic == FormatEffect.On)
{
if (!iOpened)
{
strHTML += "<i>";
iOpened = true;
}
}
else
{
if (iOpened)
{
strHTML += "</i>";
iOpened = false;
}
}
#endregion
#region underline
if (txtRange.CharacterFormat.Underline == UnderlineType.Single)
{
if (!uOpened)
{
strHTML += "<u>";
uOpened = true;
}
}
else
{
if (uOpened)
{
strHTML += "</u>";
uOpened = false;
}
}
#endregion
strHTML += txtRange.Character;
}
strHTML += "</span></html>";
return strHTML;
}
publicstaticstringconverttohtml(RichEditBox-RichEditBox)
{
字符串文本、strColour、strftname、strHTML;
richEditBox.Document.GetText(TextGetOptions.None,out text);
ITextRange txtRange=richEditBox.Document.GetRange(0,text.Length);
strHTML=“”;
int lngOriginalStart=txtRange.StartPosition;
int lngOriginalLength=txtRange.EndPosition;
浮点数shtSize=11;
//txtRange.SetRange(txtRange.StartPosition,txtRange.EndPosition);
bool bOpened=false,liOpened=false,numbLiOpened=false,iOpened=false,uOpened=false,BULLOTOPENED=false,numberingOpened=false;
for(int i=0;i ”;
}
#区域子弹
if(txtRange.ParagraphFormat.ListType==MarkerType.Bullet)
{
如果(!已打开)
{
strHTML+=“”;
bullet=true;
}
如果(!liOpened)
{
strHTML+=“- ”;
liOpened=正确;
}
if(txtRange.Character==Convert.ToChar(13))
{
strHTML+=“
”;
liOpened=假;
}
}
其他的
{
如果(已打开)
{
strHTML+=“
”;
错误=错误;
}
}
#端区
#区域编号
if(txtRange.ParagraphFormat.ListType==MarkerType.LowercaseRoman)
{
如果(!numberingOpened)
{
strHTML+=“”;
numberingOpened=true;
}
如果(!numbLiOpened)
{
strHTML+=“”;
numbLiOpened=正确;
}
if(txtRange.Character==Convert.ToChar(13))
{
strHTML+=“ ”;
numbLiOpened=假;
}
}
其他的
{
如果(打开编号)
{
strHTML+=“”;
numberingOpened=false;
}
}
#端区
#粗体区域
if(txtRange.CharacterFormat.Bold==FormatEffect.On)
{
如果(!bOpened)
{
strHTML+=“”;
bOpened=真;
}
}
其他的
{
如果(已打开)
{
strHTML+=“”;
bOpened=假;
}
}
#端区
#斜体区域
if(txtRange.CharacterFormat.Italic==FormatEffect.On)
{
如果(!iOpened)
{
strHTML+=“”;
i=真;
}
}
其他的
{
如果(已启用)
{
strHTML+=“”;
IOPEND=假;
}
}
#端区
#区域下划线
if(txtRange.CharacterFormat.Underline==UnderlineType.Single)
{
如果(!uOpened)
{
strHTML+=“”;
uOpened=真;
}
}
其他的
{
如果(uOpened)
{
strHTML+=“”;
uOpened=假;
}
}
#端区
strHTML+=txtRange.Character;
}
strHTML+=“”;
返回strHTML;
}
我还没有开始html到rtf的反向转换,一旦我完成了,我也会发布这个答案
希望这有帮助
谢谢
努鲁尔 如果你有钱购买第三方图书馆,那将是微不足道的。搜索文档转换器。你能推荐一些吗?我只使用了[text control](www.textcontrol.com/html5),但这远远不止是一个转换器。看看Aspose,gnosticeWill检查一下,但我不想为此付费。@Kinjan我也处于同样的情况,你们有转换器吗?