Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将Rtf转换为HTML_C#_Html_Rtf - Fatal编程技术网

C# 将Rtf转换为HTML

C# 将Rtf转换为HTML,c#,html,rtf,C#,Html,Rtf,我们有一个crystal报告,我们需要将其作为电子邮件发送出去,但是crystal报告生成的HTML非常难看,并且会导致一些电子邮件客户端出现问题。我想将其导出为富文本,并在可能的情况下将其转换为HTML 有什么建议吗?我不知道有任何库可以这样做(但我确信有很多库可以这样做),但是如果您已经可以从crystal report创建HTML,为什么不使用XSLT来清理标记呢?我认为您可以使用.NET office可编程性支持和Visual Studio tools for office将其加载到Wo

我们有一个crystal报告,我们需要将其作为电子邮件发送出去,但是crystal报告生成的HTML非常难看,并且会导致一些电子邮件客户端出现问题。我想将其导出为富文本,并在可能的情况下将其转换为HTML


有什么建议吗?

我不知道有任何库可以这样做(但我确信有很多库可以这样做),但是如果您已经可以从crystal report创建HTML,为什么不使用XSLT来清理标记呢?

我认为您可以使用.NET office可编程性支持和Visual Studio tools for office将其加载到Word文档对象中

然后使用文档实例重新保存为HTML文档


我不知道怎么做,但我相信在没有任何第三方库的情况下完全可以在.NET中实现。

您可以尝试将其上载到google文档,并将其作为HTML下载。

如果您不介意弄脏您的双手,编写RTF到HTML转换器并不困难

编写通用RTF->HTML转换器会有点复杂,因为您需要处理数百个RTF谓词。然而,在您的案例中,您只处理Crystal Reports专门使用的动词。我敢打赌Crystal生成的标准RTF编码在不同的报告中没有太大的差异


我在C++中编写了一个RTF到HTML转换器,但是它只处理基本的格式,如字体、段落对齐等。我的翻译基本上删掉了不准备处理的任何特殊格式。它大约有400行C++。它基本上扫描文本中的RTF标记,并用等效的HTML标记替换它们。不在我的列表中的RTF标签被简单地去掉。编写这种转换器时,正则表达式函数非常有用。

Mike Stall发布了他用c#编写的一个转换器的代码,如下所示:


我会在CodeProject RTFConverter上查看此工具。这家伙给出了一个伟大的细分程序如何工作以及转换的细节


MSDN代码示例库中还有一个名为的示例,允许您在HTML、RTF和XAML之间进行转换。

更新: 我回到家,尝试了下面的代码,但它不起作用。对于任何想知道的人来说,剪贴板不仅仅像我希望的那样神奇地转换东西。相反,它允许应用程序对具有各种粘贴格式的数据对象进行排序“上传”,然后粘贴(在我的比喻中是“下载”)要粘贴的程序指定其首选格式。我个人最终使用了,这是以前推荐的,它非常容易使用并且非常有效。导入代码(在VStudio中,Project->Add Existing Files)后,只需将html转换为rtf,如下所示:

return HtmlToRtfConverter.ConvertHtmlToRtf(myRtfString);
或相反方向:

return RtfToHtmlConverter.ConvertHtmlToRtf(myHtmlString);
(以下是我之前的错误答案,以防有人对这个答案的时间顺序感兴趣哈哈) 上述大多数答案(如果不是全部的话)都提供了全面的、通常基于库的解决方案。 我远离我的电脑,因此无法测试这个想法,但有一种替代的、廉价的、隐晦的黑客方法,那就是下面的方法

private string HTMLFromRtf(string rtfString)
{
            Clipboard.SetData(DataFormats.Rtf, rtfString);
            return Clipboard.GetData(DataFormats.Html);         
}
同样,我也不完全确定这是否可行,但只是在我的iPhone上乱搞一些html,我怀疑它会。文件是。关于剪贴板中数据模型的获取和设置,可以找到更深入的解释/文档


(是的,我很清楚几年后我就在这里了,但我想这是一个有些人仍然想要回答的问题)。

发送PDF文件不是一个解决方案?不,我们发送其他文档作为PDF附件,但我们希望电子邮件有一个正文。我需要HTML的部分是主体。我无法回答,因为这是关闭主题,但感谢,我建议使用
brew安装unrtf
,然后
unrtf--html input.rtf>output.html
。不知道为什么人们在C#问题中谈论随机命令行实用程序(或者以什么方式认为这是“离题的”!?),但简短的回答是:只需通过NuGet使用
RtfPipe
,语法就是
var html=rtf.ToHtml(rtf),并且它支持大量功能。要想得到更详细的答案,请看:正如你所看到的,我在10多年前提出了这个问题,当时Nuget根本不存在。谢谢你的评论/回答。我也不知道为什么/什么时候关闭了这个话题,因为我显然是在寻求一种方法来完成它,而不是一个图书馆来使用。不管怎样,祝你们大家好,有话吗?他正试图摆脱坏的标记!;)哦,我忘了。。。但是,通过有效地从word导出结果标记no?,应该可以对结果标记进行一些控制?我还没有使用办公自动化在像。。。3个版本。。。不过,我对此表示怀疑。我的意思是你可以在导出word文档之前对其进行编辑。。。例如删除某些类型的元素等。如果他已经在转换Report->HTML,为什么还要从RTF->HMTL转换呢?他应该完全跳过RTF,因为它是不需要的。这个几乎奏效了。我本来可以添加我需要的东西,但这不值得努力。是的,它离我很近-但我认为RTF规范可能已经改变,因为他写了它。。。所以它弄坏了我的文本。真遗憾!谢谢。这是有用的。希望这能解决我们遇到的问题。它今天又出现了,正是时候。:-)XSLT用于转换XML,而不是HTML。我试过了,效果很好,但行首的空格有一个问题:在这种情况下,它只留下“”而不是将其转换为符号和+nbsp;或添加空白跨度标记。因此,生成的html代码根本没有前导空格。这很好地工作,但我注意到在从Xaml转换为html(RTF转换为html过程的一部分)时,它忽略了CSS边距属性的单位值(px)。方法ParseXamlThickness(字符串厚度)中的简单修复只需将“+”px“”(无单引号)添加到开关st中的每个返回值