如何在 Windows 10 UWP 中将 HTML 转换为 RTF,反之亦然?
How to convert HTML to RTF and vice versa in Windows 10 UWP?
我正在 Windows 10 UWP 中的 RichEditBox 控件上工作,以允许具有某种格式的用户 options.I 从服务器获取 HTML,我想将其转换为 RTF将其显示在 RichEditBox 中。同样,我想在用户完成编辑后再次将其转换为 HTML。我进行了搜索,但我得到了样本,但它们没有帮助。我发现其中一个正在为 RichTextBlock 工作,而不是 RichEditBox
我也试过下面 URL(RTF 到 HTML)但是它没有给出正确的输出
请某人建议如何使用 RichEditBox 实现我的要求,因为它是唯一允许格式化选项(如粗体、斜体、项目符号等)的控件
我在 this link 中找到了要转换的基本概念,我创建了以下方法将 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;
}
而且我还没有开始将 html 反向转换为 rtf,完成后,我也会 post 那个答案。
希望对您有所帮助。
谢谢,
努鲁。
我正在 Windows 10 UWP 中的 RichEditBox 控件上工作,以允许具有某种格式的用户 options.I 从服务器获取 HTML,我想将其转换为 RTF将其显示在 RichEditBox 中。同样,我想在用户完成编辑后再次将其转换为 HTML。我进行了搜索,但我得到了样本,但它们没有帮助。我发现其中一个正在为 RichTextBlock 工作,而不是 RichEditBox
我也试过下面 URL(RTF 到 HTML)但是它没有给出正确的输出
请某人建议如何使用 RichEditBox 实现我的要求,因为它是唯一允许格式化选项(如粗体、斜体、项目符号等)的控件
我在 this link 中找到了要转换的基本概念,我创建了以下方法将 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;
}
而且我还没有开始将 html 反向转换为 rtf,完成后,我也会 post 那个答案。
希望对您有所帮助。
谢谢,
努鲁。