我已经在网站上看到很多关于RTF到HTML的帖子以及其他一些关于一些HTML到RTF转换器的帖子,但我真的试图全面细分被认为是最广泛使用的广告产品,开源产品或人们建议回家种植。如果您认为这是一个重复的问题,请道歉,但我正在尝试创建一个产品矩阵,以查看我们的应用程序最可行的内容。我也认为这对其他人有帮助。
转换器将用于ASP.NET 2.0应用程序(我们将很快升级到3.5但仍然坚持使用WebForms),使用SQLServer 2005(即将于2008年)作为数据库。
通过阅读一些帖子,SautinSoft似乎很受欢迎,因为它是一个商业组件。您是否建议将HTML转换为RTF的其他商业组件?价格确实很重要,但即使价格昂贵,也请列出来。
对于开源,我读到OpenOffice.org可以作为服务运行,以便它可以转换文件。但是,这似乎只是基于Java的。我想,我需要某种互操作才能使用它?什么.NET开源组件(如果有的话)用于将HTML转换为RTF?
对于家庭成长,XSLT是XHTML的一种方式吗?如果是这样,您建议使用什么组件生成XHTML?否则,你推荐其他家庭成长的复仇者。
另外,请注意我目前对RTF到HTML的关注度不高。如果一个商业组件提供这个并且价格仍然相同,那很好,否则请不要提及它。
答案 0 :(得分:1)
它的价值和没有特别的顺序。
前一段时间我想导出到RTF,然后从RTF导入有问题的RTF,由MS Word操纵。
第一个问题是RTF不是开放标准。它是一个内部MS标准,因此他们会在他们喜欢的时候改变它,并且通常不担心兼容性。目前RTF的版本是1.3到1.9,它们都是不同的。在内部,他们使用缇进行测量只是为了衡量。
我买了关于这个主题的O'Reilly口袋书,帮助和阅读了很多很好的MS文档,但每个版本都有很多和很多。
由于使用正则表达式进行操作编码RTF的方式非常艰苦,需要仔细处理和集中测试并开始工作。我使用内置正则表达式的Mac编辑器,因此我可以稳定地测试每个部分并将其构建到代码中。
由于版本的数量,版本之间也存在很多不兼容性,但是有很多共性,最终它很难/很容易到达我想要的地方(经过大约一周的阅读和数周的编码)并制作一个非常简单的版本。
我从来没有找到过商业解决方案,但由于预算的原因我不得不免费使用,以便减少很多,但要非常谨慎地选择一个,以确保它能满足您的需求并获得支持。
我不认为你来自HTML / XML / XHTML,我正在转换CSV格式,它是RTF。
我不确定我是否会建议DIY或购买。可能在平衡DIY,但你自己的情况将决定。
编辑:从内容到RTF的一件事比反之亦然。
BTW并没有批评MS Fior的RTF版本,嘿,这是他们的专有,所以他们可以做他们喜欢的事情。答案 1 :(得分:0)
我刚刚遇到了这个WYSIWYG富文本编辑器(RTE),它也有一个HTML到RTF转换器,Cute Editor for .NET。有没有人对这个组件有任何经验?我对基于Web的RTE的主要经验是CKEditor(fckEditor)和TinyMCE,但据我所知,CKEditor和TinyMCE没有内置的HTML到RTF转换器。
答案 2 :(得分:0)
我建议你自己做,因为任务并不那么复杂。首先,将一种Xml格式转换为另一种Xml格式的最简单方法是使用Xslt。在C#中转换Xml文档非常简单。
这是一篇很好的msdn博客文章,可以帮助您入门。迈克甚至提到用手来处理第三方更容易。
实际上,我已经回答了这个问题here。猜猜这是重复的。
答案 3 :(得分:0)
由于我需要在Web应用程序上实现一些带有富文本格式的mailmerge功能,我认为分享我的经验会很好。
基本上,我探索了两种选择:
Google Docs API效果很好。问题是,当您上传带有分页符的HTML文档时,如下所示:
<p style="page-break-before:always;display:none;"/>
并要求Google转换RTF中的文档,您将失去所有符合我要求的中断。但是,如果分页符不是您的问题,您可以检查此解决方案。
XSLT解决方案的工作原理......
如果您直接引用MSXML3 COM对象,绕过System.Xml类,它可以正常工作。否则我无法使它工作。此外,它似乎尊重除了基本格式和标签之外的所有内容,而忽略了文本颜色,大小等。但是,它尊重分页符。 :-)
这是我写的一个快速库,使用tidy.net强制HTML进行XHTML转换。希望能帮助到你。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ADDS.Mailmerge
{
public class XHTML2RTF
{
MSXML2.FreeThreadedDOMDocument _xslDoc;
MSXML2.FreeThreadedDOMDocument _xmlDoc;
MSXML2.IXSLProcessor _xslProcessor;
MSXML2.XSLTemplate _xslTemplate;
static XHTML2RTF instance = null;
static readonly object padlock = new object();
XHTML2RTF()
{
_xslDoc = new MSXML2.FreeThreadedDOMDocument();
//XSLData.xhtml2rtf is a resource file
// containing XSL for transformation
// I got XSL from here:
// http://www.codeproject.com/KB/HTML/XHTML2RTF.aspx
_xslDoc.loadXML(XSLData.xhtml2rtf);
_xmlDoc = new MSXML2.FreeThreadedDOMDocument();
_xslTemplate = new MSXML2.XSLTemplate();
_xslTemplate.stylesheet = _xslDoc;
_xslProcessor = _xslTemplate.createProcessor();
}
public string ConvertToRTF(string xhtmlData)
{
try
{
string sXhtml = "";
TidyNet.Tidy tidy = new TidyNet.Tidy();
tidy.Options.XmlOut = true;
tidy.Options.Xhtml = true;
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xhtmlData)))
{
StringBuilder sb = new StringBuilder();
using (MemoryStream sw = new MemoryStream())
{
TidyNet.TidyMessageCollection messages = new TidyNet.TidyMessageCollection();
tidy.Parse(ms, sw, messages);
sXhtml = Encoding.UTF8.GetString(sw.ToArray());
}
}
_xmlDoc.loadXML(sXhtml);
_xslProcessor.input = _xmlDoc;
_xslProcessor.transform();
return _xslProcessor.output.ToString();
}
catch (Exception exc)
{
throw new Exception("Error in xhtml conversion. ", exc);
}
}
public static XHTML2RTF Instance
{
get
{
lock (padlock)
{
if (instance == null)
{
instance = new XHTML2RTF();
}
return instance;
}
}
}
}
}
答案 4 :(得分:0)
TL; DR:我建议尽可能使用OpenXml
格式和HtmlToOpenXml
nuget程序包。
Microsoft Word COM
我并没有对此主题进行太多搜索,因为我的用例是使用服务器上的功能,这使得COM组件不是一个很好的选择。
XHTML2RTF
作为@IAmTimCorey mentioned,您可以使用此代码项目库。
缺点是:
Windows Forms Web浏览器
作为@Jerry mentioned,您可以使用Windows窗体WebBrowser
控件。
缺点是:
不支持的功能包括:
del
元素)DevExpress
来自devexpress support center的“ Paul V”的代码示例。 (03.02.2015)
public String ConvertRTFToHTML(String RTF)
{
MemoryStream ms = new MemoryStream();
StreamWriter writer = new StreamWriter(ms);
writer.Write(RTF);
writer.Flush();
ms.Position = 0;
String output = "";
HtmlEditorExtension.Import(HtmlEditorImportFormat.Rtf, ms, (s, enumerable) => output = s);
return output;
}
public String ConvertHTMLToRTF(String Html)
{
MemoryStream ms = new MemoryStream();
var editor = new ASPxHtmlEditor { Html = html };
editor.Export(HtmlEditorExportFormat.Rtf, ms);
ms.Position = 0;
StreamReader reader = new StreamReader(ms);
return reader.ReadToEnd();
}
或者您可以使用this example中所示的RichEditDocumentServer
类型。
未知实际支持的内容。
缺点是:
不支持的功能包括:
del
元素)Sautinsoft
public string ConvertHTMLToRTF(string html)
{
SautinSoft.HtmlToRtf h = new SautinSoft.HtmlToRtf();
return h.ConvertString(htmlString);
}
public string ConvertRTFToHTML(string rtf)
{
SautinSoft.RtfToHtml r = new SautinSoft.RtfToHtml();
byte[] bytes = Encoding.ASCII.GetBytes(rtf);
r.OpenDocx(bytes );
return r.ToHtml();
}
缺点是:
使用知识库:
DIY
如果您只想支持有限的功能,则可以编写自己的转换器。如果支持的功能集太大,我不建议这样做。
我有一个小的sample project here,但目前仅出于教育目的。
OpenXml
如果您的用例还可以使用OpenXml format,则可以使用HtmlToOpenXml nuget package。它免费且确实支持我测试过其他解决方案的所有功能。
The project基于Microsoft的Open Xml SDK,并且似乎很活跃。
public static byte[] ConvertHtmlToOpenXml(string html)
{
using (var generatedDocument = new MemoryStream())
{
using (var package = WordprocessingDocument.Create(generatedDocument, WordprocessingDocumentType.Document))
{
var mainPart = package.MainDocumentPart;
if (mainPart == null)
{
mainPart = package.AddMainDocumentPart();
new Document(new Body()).Save(mainPart);
}
var converter = new HtmlConverter(mainPart);
converter.ParseHtml(html);
mainPart.Document.Save();
}
return generatedDocument.ToArray();
}
}