首页 > 解决方案 > 尝试使用 memorystream 显示 PDF 时无法评估表达式错误

问题描述

我正在尝试生成我的 SharePoint 页面的 PDF,但不断收到“无法评估表达式,因为代码已优化或本机框架位于调用堆栈之上”。错误。我要以正确的方式做这件事吗?

protected void btnDownload_Click(object sender, EventArgs e)
        {

            try
            {
                SPSite spBtnSite = new SPSite(SPContext.Current.Site.Url);
                SPWeb btnSPWeb = SPContext.Current.Web;
                string doclibURL = string.Empty;
                using (MemoryStream ms = new MemoryStream())
                {
                    using (var pdfWriter = new PdfWriter(ms))
                    {
                        ConverterProperties properties = new ConverterProperties();
                        pdfWriter.SetCloseStream(false);
                        PdfDocument pdfDocument = new PdfDocument(pdfWriter);

                        //For setting the PAGE SIZE
                        pdfDocument.SetDefaultPageSize(iText.Kernel.Geom.PageSize.A4);
                        Document document1 = new Document(pdfDocument, pdfDocument.GetDefaultPageSize(), false);
                        using (var document = HtmlConverter.ConvertToDocument(hidText.Text, pdfDocument, properties))
                        {

                        }
                        ms.Position = 0;
                        byte[] bytesInStream = ms.ToArray(); // simpler way of converting to array
                        ms.Close();

                        if (bytesInStream != null)
                        {
                            Page.Response.Clear();
                            Page.Response.ClearHeaders();
                            Page.Response.ClearContent();
                            Page.Response.ContentType = "application/pdf";
                            Page.Response.AddHeader("content-length", bytesInStream.Length.ToString());
                            Page.Response.BinaryWrite(bytesInStream);
                            Page.Response.End();
                        }
                    }

                }
            }
            catch (Exception ex_btnSubmit_Click)
            {
                Exceptions.SaveException(UserID, ex_btnSubmit_Click.Message, ex_btnSubmit_Click.StackTrace, (ex_btnSubmit_Click.InnerException != null) ? ex_btnSubmit_Click.InnerException.Message : "");
            }
        }

标签: c#pdfsharepointmemorystream

解决方案


ThreadAbortException上了Response.End()。根据这个,你应该使用HttpContext.Current.ApplicationInstance.CompleteRequest而不是Response.End()


推荐阅读