将 Rtf 转换为 HTML [关闭]
Posted
技术标签:
【中文标题】将 Rtf 转换为 HTML [关闭]【英文标题】:Convert Rtf to HTML [closed] 【发布时间】:2010-10-01 03:47:23 【问题描述】:我们有一份水晶报告,需要以电子邮件的形式发送出去,但水晶报告生成的 html 非常丑陋,并且会导致一些电子邮件客户端出现问题。如果可能的话,我想将其导出为富文本并将其转换为 HTML。
有什么建议吗?
【问题讨论】:
发送PDF文件不是解决办法吗? 不,我们将其他文档作为 PDF 附件发送,但我们希望电子邮件有正文。我需要 HTML 的部分是正文。 我无法回答,因为这是题外话,但感谢GNU,我建议使用UnRTF。brew install unrtf
,然后是unrtf --html input.rtf > output.html
。
不知道为什么人们在 C# 问题中谈论随机命令行实用程序(或者这被认为是“离题”!?)——但简短的回答是:只需使用 @ 987654326@ 通过 NuGet,语法只是 var html = Rtf.ToHtml(rtf);
,它支持大量功能。如需更长的答案,请参阅:***.com/a/59572912/398630
如您所见,我在 10 多年前问过这个问题,当时 Nuget 甚至还不存在。感谢您的评论/回答。也不知道为什么/何时将其关闭为题外话,因为我显然是在寻求一种方法来做到这一点,而不是让图书馆使用。无论如何,祝大家有美好的一天。
【参考方案1】:
我不知道有什么库可以做到这一点(但我确信有很多库可以),但是如果您已经可以从水晶报表创建 HTML,为什么不使用 XSLT 来清理标记?
【讨论】:
XSLT 用于转换 XML,而不是 HTML。【参考方案2】:我认为您可以使用 .NET office 可编程性支持和 Visual Studio 办公工具将其加载到 Word 文档对象中。
然后使用文档实例重新保存为 HTML 文档。
我不知道怎么做,但我相信在没有任何第三方库的情况下完全在 .NET 中是可能的。
【讨论】:
字?他正试图摆脱不好的标记! ;) 哦,我忘了……但这应该可以控制结果标记吗? 通过有效地从 word 中导出它?我还没有使用过类似... 3 个版本的办公自动化... 但话虽如此,我对此表示怀疑。 我的意思是您可以在导出之前编辑 word 文档...比如删除某些类型的元素等。【参考方案3】:您可以尝试将其上传到谷歌文档,然后以 HTML 格式下载。
【讨论】:
【参考方案4】:如果您不介意自己动手,编写一个 RTF 到 HTML 转换器并不难。
编写一个通用的 RTF->HTML 转换器会有些复杂,因为您需要处理数百个 RTF 动词。但是,在您的情况下,您只处理 Crystal Reports 专门使用的那些动词。我敢打赌,Crystal 生成的标准 RTF 编码因报告而异。
我用 C++ 编写了一个 RTF 到 HTML 转换器,但它只处理基本格式,如字体、段落对齐等。我的翻译器基本上去除了它不准备处理的任何特殊格式。它花了大约 400 行 C++。它基本上扫描文本中的 RTF 标记并用等效的 HTML 标记替换它们。不在我列表中的 RTF 标签会被简单地删除。编写这样的转换器时,正则表达式函数非常有用。
【讨论】:
如果他已经在转换 Report->HTML,为什么还要费心从 RTF->HMTL 转换呢?他应该完全跳过 RTF,因为它不是必需的。【参考方案5】:Mike Stall 在这里发布了他用 c# 编写的代码:
http://blogs.msdn.com/jmstall/archive/2006/10/20/rtf_5F00_html.aspx
【讨论】:
这个几乎成功了。我本可以添加我需要的东西,但不值得。 是的,它是如此接近 - 但我认为 RTF 规范可能在他编写之后发生了变化......所以它破坏了我的文本。真可惜!【参考方案6】:我会在 CodeProject RTFConverter 上查看这个工具。这个人对程序的工作原理以及转换的详细信息进行了详细的分解。
Writing Your Own RTF Converter
【讨论】:
非常感谢。这很有用。希望这将解决我们遇到的问题。今天又出现了,时机刚刚好。 :-) 下载代码时确保所有项目都在 .NET 4 中【参考方案7】:MSDN 代码示例库中还有一个示例,名为 Converting between RTF and HTML,它允许您在 HTML、RTF 和 XAML 之间进行转换。
【讨论】:
我试过了,效果很好,但行首的空格有问题:在这种情况下,它只是留下 " " 而不是将其转换为 & nbsp;或添加一个 void SPAN 标签。因此,生成的 html 代码根本没有前导空格。 这很好用,但我注意到它在从 Xaml 转换为 HTML(RTF 到 HTML 过程的一部分)时错过了 CSS 边距属性的单位值 (px)。 ParseXamlThickness(string thickness) 方法中的简单修复只需在 switch 语句中的每个返回值中添加 '+ "px"'(没有单引号)。【参考方案8】:更新:
我回到家并尝试了以下代码,但它不起作用。对于任何想知道的人,剪贴板不只是像我希望的那样神奇地转换东西。相反,它允许应用程序以各种粘贴格式“上传”数据对象,然后粘贴(在我的比喻中是“下载”)程序被粘贴到指定其首选格式。我个人最终使用了之前推荐过的this code,它非常易于使用且非常有效。导入代码(在 VStudio 中,项目 -> 添加现有文件)后,您只需像这样将 html 转到 rtf:
return HtmlToRtfConverter.ConvertHtmlToRtf(myRtfString);
或相反的方向:
return RtfToHtmlConverter.ConvertHtmlToRtf(myHtmlString);
(以下是我之前的错误答案,以防有人对这个答案的年表感兴趣哈哈)
上述大多数答案(如果不是全部)都针对手头的问题提供了全面的、通常基于库的解决方案。 我离开了我的电脑,因此无法测试这个想法,但下面是一种替代的、廉价且模糊的 hack-y 方法。
private string HTMLFromRtf(string rtfString)
Clipboard.SetData(DataFormats.Rtf, rtfString);
return Clipboard.GetData(DataFormats.Html);
同样,我不完全确定这是否可行,但只是在我的 iPhone 上摆弄一些 html,我怀疑它会。文档是here。更深入的解释/文档 RE 剪贴板中数据模型的获取和设置可以找到here。
(是的,我完全知道我多年后才来到这里,但我认为这个问题仍然是一些人想要回答的问题)。
【讨论】:
嗯...如果您使用这种方法粘贴到 word 之类的程序中并将数据重新复制回剪贴板,它可能确实有效。 @BrainSlugs83 我同意!有点恶心的黑客,但是是的,它可以工作。以上是关于将 Rtf 转换为 HTML [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
我应该如何使用 OpenOffice 自动化将 HTML 文件转换为 RTF?
如何在 Delphi 中将带有图像的 RichText (RTF) 文档转换为 HTML?