如何将 RTF 字符串转换为 Markdown 字符串(并返回)(C# .NET Core 或 JS)
How do I convert an RTF string to a Markdown string (and back) (C# .NET Core, or JS)
问题:
如何在 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 Core Web App 需要能够使用这个存储的 RTF 在网页上显示 "Rich Text Editor",能够更新值,并以仍然可以保存的格式保存由遗留产品使用。
不幸的是,我找不到 existing/modern 可以使用 RTF 作为输入的 Web 组件。大多数似乎使用降价或自定义 JSON 格式。
理想情况下,我想:
- 使用以下任一方法将现有的 RTF 格式转换为 Markdown:
- 服务器端,使用 C#
- 客户端,使用JS
- 将 Markdown 与我找到的现有富文本编辑 Web 组件之一结合使用。
- 保存时,在保存之前将 Web 组件的 markdown 转换为 RTF
到目前为止,我已经尝试过:
- 按照此 CodeProject 文章创建自定义 RTF -> HTML 转换器:Writing Your Own RTF Converter
- 我可以让它在 .NET Framework 项目中运行,但不能在 .NET Core 中运行
- 使用这个 NuGet 包:RtfPipe
- 在 .NET Core 项目中引发空引用错误
- 使用这个节点模块:rtf-to-html
- 仅支持 RTF 的一小部分,创建整个 HTML 文档而不是 string/subset,中断我的特定示例
注意: 我试过的东西来自 RTF -> Html 因为我找不到 RTF -> Markdown 的任何东西。我的希望是,如果必须的话,我可以做:RTF -> HTML -> Markdown(反之)作为最后的手段。
对于您在 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,我没有任何好的建议。
免责声明:我是 RtfPipe 和 BracketPipe 开源项目的作者
问题:
如何在 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 Core Web App 需要能够使用这个存储的 RTF 在网页上显示 "Rich Text Editor",能够更新值,并以仍然可以保存的格式保存由遗留产品使用。
不幸的是,我找不到 existing/modern 可以使用 RTF 作为输入的 Web 组件。大多数似乎使用降价或自定义 JSON 格式。
理想情况下,我想:
- 使用以下任一方法将现有的 RTF 格式转换为 Markdown:
- 服务器端,使用 C#
- 客户端,使用JS
- 将 Markdown 与我找到的现有富文本编辑 Web 组件之一结合使用。
- 保存时,在保存之前将 Web 组件的 markdown 转换为 RTF
到目前为止,我已经尝试过:
- 按照此 CodeProject 文章创建自定义 RTF -> HTML 转换器:Writing Your Own RTF Converter
- 我可以让它在 .NET Framework 项目中运行,但不能在 .NET Core 中运行
- 使用这个 NuGet 包:RtfPipe
- 在 .NET Core 项目中引发空引用错误
- 使用这个节点模块:rtf-to-html
- 仅支持 RTF 的一小部分,创建整个 HTML 文档而不是 string/subset,中断我的特定示例
注意: 我试过的东西来自 RTF -> Html 因为我找不到 RTF -> Markdown 的任何东西。我的希望是,如果必须的话,我可以做:RTF -> HTML -> Markdown(反之)作为最后的手段。
对于您在 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,我没有任何好的建议。
免责声明:我是 RtfPipe 和 BracketPipe 开源项目的作者