我有一个 C# Web 应用程序,它使用以下命令生成 SVG 代码拉斐尔·JS http://www.raphaeljs.com,然后我需要将其转换为 PNG 以实现用户之间的一般互操作性(请参阅我之前的问题在这里 https://stackoverflow.com/questions/5898029/problems-converting-vml-to-svg-in-net also)
问题在于,Internet Explorer 生成的是 RVML 代码,而不是看似标准的 SVG 代码。我的解决方案可以在 Firefox 和其他浏览器中成功运行Inkscape 的命令行实用程序 http://inkscape.modevia.com/inkscape-man.html将普通 SVG 文件转换为 PNG。但 Inkscape 不会从 RVML 转换。
因此,除了重写我的应用程序以避免 RahaelJs 之外,接下来要做的合乎逻辑的事情是在通过 Inkscape 运行之前将 RVML 转换为 SVG。为此,我发现本文 http://www.xmlfiles.com/articles/cynthia/xslt/default.asp,并使用了页面顶部附近的代码示例。我用来转换 RVML 文件的 XSL 文件是矢量转换器 http://sourceforge.net/projects/vectorconverter/您可以下载并查看。
我应该提到没有运行时错误 - 所有文件都输出在正确的位置,即来自服务器端 XSLT 转换的 XML -> SVG,以及来自 Inkscape 转换的 SVG -> PNG。
总结一下情况,当通过 Firefox 浏览时 - 没问题 - 当通过 Internet Explorer 浏览时,由 XML->SVG 转换生成的 SVG 文件输出有效的 SVG 文件,但 SVG 标签内没有实际内容。我的问题是其他人是否成功完成了这项任务,或者是否有人对我做错了什么有任何建议?
Thanks
是的,我们在一个项目中做了完全相同的事情。问题是 RapahelJS 生成的 VML 应该稍微改变一下,以适应 VectorConverter 方案(顺便说一句,我们使用了该工具的第二个版本中包含的方案)。以下是我们在实际转型之前所做的更改:
string clearedVml = new Regex("<rvml.*/rvml:group>")
.Match(rafaelOutputVml)
.Value
.Replace("rvml:", "v:")
.Replace("class=rvml", "")
.Replace("filterMatrix", "");
之后,转换结果应插入以下标记中:
private const string vmlFormat =
@"
<?xml version=""1.0""?>
<HTML xmlns:v = ""urn:schemas-microsoft-com:vml"" xmlns=""http://www.w3.org/1999/xhtml"">
<HEAD>
<STYLE>v\:* {{
BEHAVIOR: url(#VMLRender)
}}
</STYLE>
</HEAD>
<BODY>
{0}
</BODY>
</HTML>
";
...
var sReader = new StringReader( String.Format( vmlFormat ,clearedVml ).Trim() );
现在才应该执行到 SVG 的实际转换。
希望能帮助到你
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)