微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HighChart 导出为 pdf、jpg 和 png 功能不起作用

如何解决HighChart 导出为 pdf、jpg 和 png 功能不起作用

我正在尝试使用 asp.net 以 jpg、png 和 pdf 格式导出高图。但它给了我 空错误。 这是页面的 aspx 侧:

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ChartExport.aspx.cs" Inherits="ChartExport" ValidateRequest="false" %>
<html>
    <head>
        <Meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <Meta charset="utf-8" />
        <Meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
        <link href="/Scripts/jqueryui/jquery-ui.css" rel="stylesheet" />
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" />  
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" />
        <%: System.Web.Optimization.Styles.Render("~/Content/Font.css") %>
        <%: System.Web.Optimization.Styles.Render("~/Content/artone.css") %>
        <%: System.Web.Optimization.Styles.Render("~/Content/artoneMenu.css") %>
        <link id="clientTheme" runat="server" type="text/css" rel="stylesheet" />
        <script src="/Scripts/jquery/jquery.min.js"></script>
        <script src="/Scripts/jqueryui/jquery-ui.js"></script>
        <script src="/Scripts/Highcharts-6.1.4/code/highcharts.js"></script>

        <script src="/Scripts/Highcharts-6.1.4/code/modules/exporting.js"></script>
    </head>
    <body>
        <form>
            <div style="text-align:center;margin-top:50px;">
                
                <span class="filter_fontsize chartfilters"><%=Title %></span>
                <br />
                <asp:Literal ID="svgChart" runat="server"></asp:Literal>
            </div>
        </form>
    </body>
</html>

这是页面的 aspx.cs 一侧:

    protected override void OnInit(EventArgs e)
    {
    }
    protected override void OnLoad(EventArgs e)
    {
        ArtBase art = new ArtBase();
        var css = CssthemeHelper.GetCsstheme(art.CurrentHealthPlanId);
        var themePath = string.Format("{0}?v={1}",css,Guid.NewGuid().ToString());
        clientTheme.Attributes.Add("href",themePath);
        BindRequest();
        LoadPageData();
    }
    protected override void LoadPageData()
    {
        var svg = new XmlDocument();

        if (string.IsNullOrEmpty(Scale)) {
            svgChart.Text = SVG;
            return;
        }
        svg.LoadXml(SVG);
        float scale = float.Parse(Scale);
        scale = scale > 0f ? scale : 1f;
        var svgHeight = float.Parse(svg.DocumentElement.GetAttribute("height")) * scale;
        var svgWidth = float.Parse(svg.DocumentElement.GetAttribute("width")) * scale;
        svg.DocumentElement.SetAttribute("width",svgWidth.ToString());
        svg.DocumentElement.SetAttribute("height",svgHeight.ToString());
        svgChart.Text = svg.OuterXml;
    }
    #endregion

    protected override void Render(HtmlTextWriter writer)
    {
        if (Type.ToLower().Contains("pdf"))
        {
            ExportPdf();
            return;
        }
        if (Type.ToLower().Contains("svg"))
            ExportSvg();

        Exportimage();

    }
    private void ExportSvg() {
        Response.Clear();
        Response.ClearHeaders();
        response.addheader("Content-Type",Type);
        Response.AppendHeader("content-disposition",string.Format("attachment;filename={0}.svg",FileName));
        byte[] data = System.Text.ASCIIEncoding.UTF8.GetBytes(SVG);
        Response.OutputStream.Write(data,data.Length);
        Response.End();
    }
    private void ExportPdf() {
        // base.Render(writer);
        TextWriter myWriter = new StringWriter();
        HtmlTextWriter htmlWriter = new HtmlTextWriter(myWriter);
        base.Render(htmlWriter);

        // instantiate a html to pdf converter object
        HtmlToPdf converter = new HtmlToPdf();
        converter.Options.pdfpageOrientation = pdfpageOrientation.Landscape;
        converter.Options.EmbedFonts = true;
        // create a new pdf document converting the html string of the page
        PdfDocument doc = converter.ConvertHtmlString(
            myWriter.ToString(),Request.Url.AbsoluteUri);
        //save pdf document
        doc.Save(Response,false,string.Format("{0}.pdf",FileName));
        
        // close pdf document
        doc.Close();
    }

    private void Exportimage() {

        TextWriter myWriter = new StringWriter();
        HtmlTextWriter htmlWriter = new HtmlTextWriter(myWriter);
        base.Render(htmlWriter);
        var converter = new HtmlToImage();
        var image = converter.ConvertHtmlString(myWriter.ToString(),Request.Url.AbsoluteUri);
        var imageFormat = Type.Contains("png") ? ImageFormat.Png : ImageFormat.Jpeg;
        Response.Clear();
        Response.ClearHeaders();
        response.addheader("Content-Type",string.Format("attachment;filename={0}.{1}",FileName,imageFormat.ToString()));
       
        image.Save(Response.OutputStream,imageFormat);
        Response.End();
    }

}

在渲染函数中,Type 变量给出了 null 异常。看起来图表路径尚未加载到此变量中。有人可以帮助我在哪里犯错误吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。