C# 如何在Windows10UWP中将HTML转换为RTF,反之亦然?

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实现我的要求,因为它是唯

我正在Windows 10 UWP中使用RichEditBox控件,以允许用户使用一些格式选项。我正在从服务器获取HTML,我想将其转换为RTF以在RichEditBox中显示。类似地,我想在用户完成编辑后再次将其转换为HTML。我做了一个搜索,但我得到了样本,但他们没有帮助。我发现其中一个是为RichTextBlock工作,而不是为RichEditBox工作

我也尝试了下面的URL(RTF到HTML),但它没有给出正确的输出


有人请建议如何使用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我也处于同样的情况,你们有转换器吗?