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

问题描述 投票:0回答:1

Question:

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


我有一个使用.NET的RichTextBox控件的遗留产品。使用它的表单将其输出保存在Microsoft专有的RTF format中。以下是它可以生成的输出的一个小例子:

{\\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}

我的C#.NET核心Web应用程序需要能够使用此存储的RTF在网页上显示“富文本编辑器”,能够更新值,并以传统仍然可以使用的格式保存产品。

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

理想情况下,我想:

  1. 使用以下任一方法将现有RTF转换为Markdown: 服务器端,使用C# 客户端,使用JS
  2. 将markdown与我找到的现有Rich Text Editing Web组件之一一起使用。
  3. 保存时,在保持之前将Web组件的降价转换为RTF

到目前为止,我尝试过:

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

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

javascript c# .net-core markdown rtf
1个回答
2
投票

很抱歉,您使用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);

由于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();
  }
}

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

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

© www.soinside.com 2019 - 2024. All rights reserved.