[MSCHART]画像エクスポート機能


MSChartのエクスポート画像機能について


分類:c#
2012-03-13 14:44
376人が読む
コメント(0)
コレクション
通報する
MSchartは独自の画像をエクスポートする機能を持っていますが、パスは書くしかなく、自由にパスを選択してからエクスポートすることができず、お客様の使用に不便で、数日研究した後、いくつかの結論を出しました.
 1.SaveFileDialog
最初にネットで検索すると、SaveFileDialogクラスのShowDialog()は、ポップアップパス選択ボックスを実現し、パスを選択してchart 1にパスを渡すことをお勧めします.SaveImage(localFilePath);
コードは次のとおりです.
  public void ExportChart(Chart chart1, IWin32Window form1)
        {
            //SystemInformation.UserInteractive = true;
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.Title = "    ";
            saveFileDialog.Filter = "JPG  (*.jpg)|*.jpg|PDF  (*.pdf)|*.pdf|GIF  (*.gif)|*.gif|    (*.*)|*.*";
            //          
            saveFileDialog.FilterIndex = 2;
            //        
            saveFileDialog.RestoreDirectory = true;

            if (saveFileDialog.ShowDialog(form1) == DialogResult.OK)
            {
                if (!string.IsNullOrEmpty(saveFileDialog.FileName))
                {
                    string localFilePath = saveFileDialog.FileName.ToString();
                    chart1.SaveImage(localFilePath);
                }
            }

        }

 
  public void ExportChart(Chart chart1, IWin32Window form1)
        {
            //SystemInformation.UserInteractive = true;
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.Title = "    ";
            saveFileDialog.Filter = "JPG  (*.jpg)|*.jpg|PDF  (*.pdf)|*.pdf|GIF  (*.gif)|*.gif|    (*.*)|*.*";
            //          
            saveFileDialog.FilterIndex = 2;
            //        
            saveFileDialog.RestoreDirectory = true;

            if (saveFileDialog.ShowDialog(form1) == DialogResult.OK)
            {
                if (!string.IsNullOrEmpty(saveFileDialog.FileName))
                {
                    string localFilePath = saveFileDialog.FileName.ToString();
                    chart1.SaveImage(localFilePath);
                }
            }

        }


 
この過程で解決できない問題があり、SaveFileDialogはWindowsのみをサポートしています.Webページで選択パスボックスをポップアップするのではなく、Formsがサポートしていないと、エラーが表示されます.だからこの考えは殺された.
 
2.Response
2つ目は、ストリーム形式でピクチャをエクスポートすることですが、MSChartピクチャはコントロールピクチャであり、ファイル形式でローカルまたはサーバに保存されていないので、まず1つのピクチャをローカルにエクスポートし、ダウンロード機能を提供し、そのピクチャをお客様が指定したパスにダウンロードし、最後に、私たちの内部で指定したパスの下のピクチャを削除することが重要です.
コードは次のとおりです.
     
/// <summary>
        /// MSChart    
        /// </summary>
        /// <param name="fileName">   </param>
        /// <param name="chart1">  ID</param>
        public void ExportChart(string fileName,Chart chart1)
        {
            fileName += ".jpg";
            string basePath = string.Format("d:\\{0}", fileName);//         ,    ,            
            chart1.SaveImage(basePath);//    
            byte[] bytes = null;
            using (FileStream stream = new FileStream(basePath, FileMode.Open))
            {
                bytes = new byte[(int)stream.Length];
                stream.Read(bytes, 0, bytes.Length); //     
            }

            //             ,  Response   
            //System.Web.HttpContext.Current   ,        asp.net       System.Web.UI.Page  Response   
            System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
            System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;  filename=" +
                HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
            System.Web.HttpContext.Current.Response.BinaryWrite(bytes);
            System.Web.HttpContext.Current.Response.Flush();
            System.Web.HttpContext.Current.Response.End();
            File.Delete(basePath);  //         
        }