4

PDFレポートにハイチャートチャートを含める必要があります。しかし、export.highcharts.comによって生成されたimage / pngを取得するにはどうすればよいですか?それは私がこれまでにしたことです:

ボタンをクリックすると、このajaxリクエストが発生します。

$.ajax({
   url: "Home/Teste",
   type: "POST",
   dataType: "html",
   data: { svgParam: myChart.getSVG() },
   success: function (data) {
       doStuff(data);
}});

サーバーで、リクエストを受け取り、次のように処理します。

[HttpPost]
[ValidateInput(false)]
public void Teste(string svgParam)
{
    // Create a request using a URL that can receive a post. 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://export.highcharts.com/");
    // Set the Method property of the request to POST.
    request.Method = "POST";

    // Create POST data and convert it to a byte array.
    string postData = string.Format("filename={0}&type={1}&width={2}&sgv={3}", "chart", "image/png", 1270, Server.UrlEncode(svgParam));

    byte[] byteArray = Encoding.UTF8.GetBytes(postData);

    // Set the ContentType property of the WebRequest.
    request.ContentType = "application/x-www-form-urlencoded; multipart/form-data";

    //User agent is based in a normal export.js request
    request.UserAgent = @"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0";

    // Set the ContentLength property of the WebRequest.
    request.ContentLength = byteArray.Length;
    // Get the request stream.
    Stream dataStream = request.GetRequestStream();
    // Write the data to the request stream.
    dataStream.Write(byteArray, 0, byteArray.Length);
    // Close the Stream object.
    dataStream.Close();
    // Get the response.
    WebResponse response = request.GetResponse();

    HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse();
    //This is here just to read the response.
    string msg;
    using (StreamReader sReader = new StreamReader(webResponse.GetResponseStream()))
    {
        msg = sReader.ReadToEnd();
    }
}

svgParamは、次のような内容のhtml文字列です: "

このsvgParamはasp.netで問題なく取得できます。ただし、export.highcharts.comからの応答は、te svgが送信されなかったかのように、常に同じです。

<body>
    <div id="top">
        <a href="http://www.highcharts.com" title="Highcharts Home Page"
            id="logo"><img alt="Highcharts Home Page"
            src="resources/Highcharts-icon-160px.png" border="0"></a>
        <h1>Highcharts Export Server</h1>
    </div>
    <div id="wrap">
        <h3>Oops..,</h3>
        <p>The manadatory svg POST parameter is undefined.</p>
    </div>
</body>

テストのために、次のようにこのWebRequestを受け取るために、アプリケーションに別のメソッドを作成しました。

[HttpPost]
[ValidateInput(false)]
public void Teste2(string filename, string type, string width, string svg)
{
    string whereIsMySvg = svg;
}

filenam、type、およびwidthパラメーターが受信されます。しかし、svgのものはnullです。エンコードしようとしましたが、エンコードせず、json文字列としてシリアル化し、コンテンツタイプを変更しました...そして何も、svgパラメーターが宛先に到達しませんでした。

何か案は?

4

1 に答える 1

7

コードをコピーして貼り付けたが、これが誤植ではない場合は、エクスポートサーバーに送信されるリクエストパラメーターの「svg」のスペルを間違えました。あなたは「sgv」を持っています。

于 2013-03-26T05:15:52.357 に答える