これは非常に具体的な質問だと思いますが、SVG とテレリックの両方についての知識が限られているので、ここで説明します。
C# で RadHtmlChart を画像に変換しようとしています。まず、チャートの svg を取得するために、組み込みのテレリック関数を使用します。
var chartRendering = $find("<%=BarChart.ClientID %>").getSVGString();
サーバーにその文字列を取得したら、それを画像を表すメモリ ストリームに変換しようとします。これを行うには、https://github.com/vvvv/SVGを使用しています
XmlDocument xml = new XmlDocument();
xml.LoadXml(svgText);
SvgDocument svg = SvgDocument.Open(xml);
// Convert SVG document containing image to Stream
MemoryStream imageStream = new MemoryStream();
svg.Draw().Save(imageStream, ImageFormat.Png);
最後の行でコードが壊れ、次のエラーが表示されます:設定された ColorBlend オブジェクトが無効です。位置の最後の要素は 1.0 に等しくなければなりません。ColorBlend オブジェクトは、同じ数の位置とカラー値で構築する必要があります。位置は 0.0 から 1.0 の間である必要があり、1.0 は配列の最後の要素を示します。
奇妙なことは、これが一部のチャートでのみ発生し、他のチャートでは発生しないことです。ある特定のグラフで、グラフが 10 個以上の x 値であれば問題ないことに気付きました。ただし、値が 10 未満の場合は壊れます。また、一時ファイルを使用して同じことを試みて、svgと画像を同じ結果に保存しました。
アイデアが尽きたので、誰か提案はありますか?おそらく、C# で svg から画像を取得する別の方法です。私はinkscapeを見てきましたが、サーバーに.exeとしてインストールする必要があるため、使用できません。
編集:javascriptを使用して可能な解決策を見つけました。HTML5 である canvas 要素を使用しているため、私には機能しません。これは IE8 で機能する必要がありますが、他の誰かがこれに出くわした場合に備えて. ブラウザで SVG を画像 (JPEG、PNG など) に変換します。
解決策: HTML5 をサポートするすべてのブラウザーに上記の JavaScript メソッドを実装し、IE8 にはinkscape メソッドを実装することにしました。