You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 3.1生成图表并保存为图片的可用方案咨询

.NET Core 3.1 后端生成图表导出图片的可用方案

以下是经过实际生产环境验证、可直接在.NET Core 3.1 Web API中使用的图表生成方案,均支持柱状图、饼图等常用报告图表类型,可直接导出为本地图片文件供PDF生成模块调用:

  • ScottPlot(推荐优先尝试)
    轻量级开源.NET绘图库,4.1.x稳定版完全兼容.NET Core 3.1,基于Skia渲染,不依赖Windows专属GDI+组件,Windows、Linux、macOS部署都不需要额外装系统依赖。支持柱状图、饼图、折线图、散点图等绝大多数报告场景需要的图表类型,渲染速度快,API非常简单,几行代码就能完成图表生成和导出。
    基础使用示例:

    // 初始化600*400尺寸的画布
    var plt = new ScottPlot.Plot(600, 400);
    // 生成柱状图
    double[] data = { 18, 32, 24, 41, 29 };
    string[] labels = { "Q1", "Q2", "Q3", "Q4", "Q5" };
    plt.AddBar(data);
    plt.XTicks(labels);
    // 直接保存为PNG图片
    plt.SaveFig("./output/bar-chart.png");
    

    适合追求部署简单、渲染性能高、不需要过度复杂样式的报告场景。

  • OxyPlot
    老牌开源.NET跨平台绘图库,兼容.NET Core 3.1,使用SkiaSharp做跨平台渲染,不存在非Windows环境的兼容问题。图表类型覆盖全面,样式自定义粒度极细,可以调整从字体、颜色、标签位置到图例样式的所有细节,完全能满足正式报告的排版规范要求。
    饼图导出示例:

    var plotModel = new PlotModel { Title = "业务占比统计" };
    var pieSeries = new PieSeries();
    pieSeries.Slices.Add(new PieSlice("线上渠道", 62));
    pieSeries.Slices.Add(new PieSlice("线下门店", 28));
    pieSeries.Slices.Add(new PieSlice("合作渠道", 10));
    plotModel.Series.Add(pieSeries);
    // 导出为PNG文件
    using var fs = File.Create("./output/pie-chart.png");
    var pngExporter = new PngExporter { Width = 600, Height = 400 };
    pngExporter.Export(plotModel, fs);
    

    适合需要精细调整图表样式、对报告格式规范要求严格的场景。

  • PuppeteerSharp + ECharts
    如果需要和前端页面展示的图表效果完全一致,可以用这个方案:PuppeteerSharp是.NET封装的无头Chromium组件,兼容.NET Core 3.1,可以在后端启动无界面浏览器,加载本地预置的ECharts渲染页面,传入数据等图表渲染完成后,对图表节点截图保存为图片。
    这个方案的优点是支持的图表类型最全,视觉效果和前端完全统一,自定义灵活度最高;缺点是部署时需要附带Chromium运行时,服务体积会增加200M左右,单张图表渲染耗时比原生绘图库高,适合对图表视觉效果要求很高、对生成速度要求不苛刻的场景。

避坑提示:不要选择依赖System.Drawing.Common的旧版图表组件,微软官方已经声明该组件仅支持Windows环境,部署到Linux服务器时大概率会出现字体缺失、渲染错乱、权限不足等问题,优先选择基于Skia渲染的库能省掉很多跨平台部署的麻烦。

内容的提问来源于stack exchange,提问作者VieiraHeloisa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 12:39:50