如何在Delphi中将带有图片的RichText(RTF)文档转换为HTML?

3

我一直在尝试寻找一个免费的(最好是开源的)组件或库,它可以将带有嵌入式图像的RTF文件转换为HTML文件和图像文件,或者更好的是HTML和图像流。

完美的解决方案,无论它是DLL库还是Delphi组件,都应该使用回调函数将数据流传递到IStream/TStream,以便我能够将图像转换并保存为所选格式,并返回图像文件的相对名称,以便RTF解析器将其包含在生成的HTML文件中。当然,如果代码开源,保留原始格式也是不错的选择。

我已经发现了商业解决方案,但由于将一个文档类型转换为另一个文档类型的相对简单的转换价格相当高,并且这两种格式都已经存在20年,这表明必须存在已有的库(本地而非托管)来进行此类转换。

如果我找不到解决方案,我可能会将this代码转换为Delphi DLL,并使其可用,但也许已经有人这样做了?

编辑:

我们决定使用前面提到的.Net RtfConverter 编译为DLL,从中生成Delphi TLB单元,并强制客户安装嵌入在安装程序中的.Net框架。现在转换非常顺利,这是时候从Delphi转向.Net了...

1
RTF规范并不简单,转换也不像看起来那么直接。实际的RTF文档比简短的文本片段加粗和斜体更为复杂。需要考虑Unicode、本地化、多种字体、CSS、页眉页脚、段落格式、表格、嵌套表格等等。并非所有商业软件工具都值得他们所收取的费用。我没有编写过这样的工具,但使用过一款价值499美元的工具,现在有一个托管代码版本(100% C#)可供使用。 - Tim
也许“简单”并不是这种转换的正确描述,但RTF标签列表相当有限,Windows和Delphi都有处理国际字符的功能。以Unicode格式保存带有<和>字符转义的HTML文件也是我考虑的一种可能性。我在问题中提到的库是使用托管C#代码的工作解决方案,我试图尽可能减少应用程序的依赖性。 - too
商用 RTF 转 HTML 转换器的价格从约 $130 (无版税)起 - 包括完整的 Delphi 源代码。 - mjn
mjn:您是否想发布一篇关于这个商业Delphi转换器的参考文章?如果没有免费的开源Delphi/C++转换器可用,而将http://www.codeproject.com/KB/recipes/RtfConverter.aspx转换为Delphi将会有问题,那么我肯定会把它作为最后的选择。 - too
3个回答

3
如果您可以使用Microsoft Office打开RTF文件,并在后台将其保存为HTML,则我认为这是最佳解决方案。只需使用OLE在后台启动Microsoft Word实例,加载RTF文件,然后将其导出为HTML即可...

2
不幸的是,这需要在计算机上安装价值几百美元/英镑/...的商业产品。 - too
我完全同意这一点,但是大多数用户倾向于安装Office,因此如果你的目标客户有Office套件,那么我建议选择它,否则你将不得不搜索更多并自己实现... - user497849
根据太多的截止日期和其他因素,@PA 可以被称为“两个问题”或者是一个(永久/临时)的“胜利”。 - user497849
我可能会假设客户已经安装了Office套件,但是为了进行转换,不管是否保证兼容性和转换质量(如果您认为Word生成的HTML是兼容和高质量的),对Office的依赖可能被视为不必要的复杂性,而且在两种格式存在20年之后,应该存在一种替代的本地代码转换器。也可能是RTF -> DOC -> HTML路径,因为DOC更受欢迎。 - too
1
@too,您可能也想看看Open Office套件,它可能有一些*.DLL文件可以进行转换。 - user497849

3
一款商业RTF转HTML 4.01/HTML5和各种XHTML的转换器是ScroogeXHTML for Delphi。版本5.0包括改进的图片支持,提供了WMF转PNG转换示例代码。(我是这个组件及其Java平台对应组件的开发人员)。

谢谢提供链接。我会再等一段时间,看看是否有可能的免费解决方案,如问题所述,并备用ScroogeXHTML,因为它看起来很有前途。您有计划包括表格/列表支持吗? - too
支持简单的有序和无序列表,但是表格在内部中间文档表示中不适合,需要进行重大重新设计(但正在考虑中)。 - mjn

-2

附言:我是这个产品的开发者。

这是一个商业的 .Net 库,用于将 RTF 转换为 HTML 3.2、4.01、XHTML 1.01 和 HTML 5。它支持转换带有表格和嵌套表格、有序和无序列表、在 HTML 中嵌入图像、Unicode、特殊的 HTML 符号等内容。

以下是 C# 的示例代码:

        SautinSoft.RtfToHtml r = new SautinSoft.RtfToHtml();
        r.OutputFormat = SautinSoft.RtfToHtml.eOutputFormat.HTML_5;
        r.ImageStyle.IncludeImageInHtml = true;
        r.ConvertFile(@"d:\document.rtf",@"d:\html5.htm");

链接已经失效。作者自2012年以来就没有在SO上出现过了。这个答案应该被删除。 - kjhughes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接