我在 github 上找到了这个有用的 repo,它是一个 kendoui 示例,它使用 Inkscape 通过将图表中的数据发布到 mvc 控制器来将 svg 输出为 pdf 或 png。
它会在 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();
中创建 png 文件,并从方法返回(app_data 图像的路径)。app_data
outFile
除了创建文件之外,是否可以在内存中执行所有操作并返回带有 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);
}
我不确定如何做到这一点以及是否可以做到。