使用MemoryStream导出KendoUI图表

时间:2013-09-30 09:58:54

标签: kendo-ui kendo-asp.net-mvc inkscape

我在github上找到了这个有用的回购,这是一个kendoui示例,使用Inkscape将svg输出为pdf或png,方法是将图表中的数据发布到mvc控制器。

Github repo

它会在App_Data文件夹中创建一个临时的svg文件和png,如果你对留在那里的文件感到满意,那就没问题。

主要的善良发生在这段代码中

 private string DoExport(string svgFile, ExportFormat format)
    {
        var extension = format == ExportFormat.PNG ? "png" : "pdf";
        var outFile = TempFileName() + "." + extension;

        // Full list of export options is available at
        // http://tavmjong.free.fr/INKSCAPE/MANUAL/html/CommandLine-Export.html
        var inkscape = new Process();
        inkscape.StartInfo.FileName = INKSCAPE_PATH;
        inkscape.StartInfo.Arguments =
            String.Format("--file \"{0}\" --export-{1} \"{2}\" --export-width {3} --export-height {4}",
                          svgFile, extension, outFile, WIDTH, HEIGHT);
        inkscape.StartInfo.UseShellExecute = true;
        inkscape.Start();

        inkscape.WaitForExit();

        return outFile;
    }

运行inkscape.Start();后,会在app_data文件夹中创建png文件,并从该方法返回outFile(app_data图像的路径)。

而不是创建文件是否可以在内存中执行所有操作并使用actionresult返回图像?

[HttpPost]
    public ActionResult _Export(string svg, ExportFormat format)
    {
        var svgText = HttpUtility.UrlDecode(svg);
        var svgFile = TempFileName() + ".svg";
        System.IO.File.WriteAllText(svgFile, svgText);

        var outFile = DoExport(svgFile, format);
        var attachment = "export" + Path.GetExtension(outFile);

        return File(outFile, MimeTypes[format], attachment);
    }

我不知道该怎么做以及是否可以这样做。

0 个答案:

没有答案