ASP.NET MVC 有 File(outPdfStream, "application/pdf" ) 返回膨胀字节?



在MVC控制器函数中,我有以下代码:

                EvoPdf.PdfConverter converter = new EvoPdf.PdfConverter();
            converter.LicenseKey = "e/MyLicenceKey+uT05+X65eb67e3t7Q==";
            converter.PdfDocumentOptions.BottomMargin = margin;
            converter.PdfDocumentOptions.TopMargin = margin;
            converter.PdfDocumentOptions.LeftMargin = margin;
            converter.PdfDocumentOptions.RightMargin = margin;
            var outPdfStream = new System.IO.MemoryStream();
            converter.SavePdfFromHtmlStreamToStream(stream, System.Text.Encoding.UTF8
                , ControllerContext.HttpContext.Request.Url.GetLeftPart(UriPartial.Authority), outPdfStream);
            Response.AddHeader("Content-Disposition", $"inline; filename={reportInfo.ReportName}");
            Response.Cache.SetCacheability(System.Web.HttpCacheability.Private);
           // System.IO.File.WriteAllBytes(@"c:testaaaa.pdf", bytes);
            return File(outPdfStream, "application/pdf");

Firefox可以接收PDF响应并正确显示。IE 10中的Adobe Reader XI插件抱怨"文件不是以‘%PDF’开头的。Local\EWH([b~rkqj)和Chrome抱怨格式不正确。当我通过Firefox保存PDF时,文件的大小约为2.6MB,然而,上面注释掉的代码将PDF保存为大小约为400k的aaaa.PDF。并且该文件可以在所有浏览器和PDF阅读器中打开并正确呈现。

显然,ASP.NET或IIS 7.5/8以某种方式膨胀/污染了400KB,这是Firefox可以容忍的,但其他人不能容忍的。通过VS调试器,我确信当函数返回时,字节/流大约是400KB,但不知何故,当响应离开IIS时,响应会变大几倍。

我使用的是MVC5和.NET 4.5,主机是Windows 7和Server 2012上的IIS EXpress、IIS 7.5、IIS8以及所有最新的修补程序。

这是一个非常常见的问题。

在将pdf内容写入响应之前,您应该使用response.clear()清除响应

然后应该调用Response.End()。

这将只向客户端发送pdf内容。

相关内容

  • 没有找到相关文章

最新更新