如何将 RTF 字符串转换为 Markdown 字符串(并返回)(C# .NET Core 或 JS)

Dan*_*own 2 javascript c# markdown rtf .net-core

题:

如何在 C# 或 JS 中将 RTF 字符串转换为 Markdown 字符串(并返回),理想情况下不包装 exe?


我有一个使用 .NETRichTextBox控件的旧产品。使用它的表单以 Microsoft 专有的RTF 格式保存其输出。这是它可以生成的输出的一个小例子

{\\rtf1\\ansi\\ansicpg1252\\uc1\\htmautsp\\deff2{\\fonttbl{\\f0\\fcharset0 Times New Roman;}{\\f2\\fcharset0 GenericSansSerif;}}{\\colortbl\\red0\\green0\\blue0;\\red255\\green255\\blue255;}\\loch\\hich\\dbch\\pard\\plain\\ltrpar\\itap0{\\lang1033\\fs18\\f2\\cf0 \\cf0\\ql{\\f2 {\\ltrch Some content here }\\li0\\ri0\\sa0\\sb0\\fi0\\ql\\par}\r\n}\r\n}
Run Code Online (Sandbox Code Playgroud)

我的 C# .NET Core Web App 需要能够使用这个存储的 RTF 在网页上显示一个“富文本编辑器”,有能力更新值,并以仍然可以被遗留使用的格式保存产品。

不幸的是,我无法找到可以使用 RTF 作为输入的现有/现代 Web 组件。大多数似乎使用降价或自定义 JSON 格式。

理想情况下,我想:

  1. 使用以下任一方法将现有的 RTF 转换为 Markdown:
    • 服务器端,使用 C#
    • 客户端,使用 JS
  2. 将 markdown 与我发现的现有富文本编辑 Web 组件之一结合使用。
  3. 保存时,在持久化之前将 Web 组件的 Markdown 转换为 RTF

到目前为止,我已经尝试过:

  • 按照此 CodeProject 文章创建自定义 RTF -> HTML 转换器:编写您自己的 RTF 转换器
    • 我可以让它在 .NET Framework 项目中工作,但不能在 .NET Core 中工作
  • 使用这个 NuGet 包:RtfPipe
    • 在 .NET Core 项目中引发空引用错误
  • 使用这个节点模块:rtf-to-html
    • 仅支持一小部分 RTF,创建整个 HTML 文档而不是字符串/子集,打破我的具体示例

注意:我尝试过的东西来自 RTF -> Html,因为我找不到任何关于 RTF -> Markdown 的内容。我希望如果必须的话,我可以这样做:RTF -> HTML -> Markdown(反过来)作为最后的手段。

erd*_*mke 5

对于您在RtfPipe和 .Net Core 中遇到的空引用错误,我们深表歉意。这些错误的解决方案现已记录在项目中,涉及包括 NuGet 包System.Text.Encoding.CodePages和注册代码页提供程序。

#if NETCORE
  // Add a reference to the NuGet package System.Text.Encoding.CodePages for .Net core only
  Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
#endif
var html = Rtf.ToHtml(rtf);
Run Code Online (Sandbox Code Playgroud)

由于 HTML 从技术上讲是 Markdown,因此您可以到此为止。否则,您也可以使用我的BracketPipe库将 HTML 转换为 Markdown 。代码看起来像。

using BracketPipe;
using RtfPipe;

private string RtfToMarkdown(string source)
{
  using (var w = new System.IO.StringWriter())
  using (var md = new MarkdownWriter(w))
  {
    Rtf.ToHtml(source, md);
    md.Flush();
    return w.ToString();
  }
}
Run Code Online (Sandbox Code Playgroud)

Markdig是一个很好的从 Markdown 到 HTML 的库。但是,对于从 HTML 到 RTF,我没有任何好的建议。

免责声明:我是RtfPipeBracketPipe开源项目的作者