2

在我们的应用程序中,我们需要从 Application 获取 PDF 并且应该显示在 IE9[8 或 7] 上,Application 在 ASP.Net MVC 3 中,PDF 文件来自 SSRS,基于用户标准 SSRS 将返回 PDF 并且在标签中显示在浏览器上。

当我们在 Visual Studio 2010 中以调试模式运行应用程序并在 IIS7.5 中托管应用程序时,一切正常。但是,一旦我们在没有调试器的情况下访问应用程序,PDF 就不会在 Object Tag 中呈现或加载,甚至 Adob​​e AtiveX PDF Viewer 也不会出现。

因此,要找出问题所在,从 IE9 开发人员工具栏捕获网络日志并得知 URL:http://myhostname/Home/GetProfile/11 结果:已中止类型:启动器:ActiveX 控件初始化。

如果我在 Chrome 中访问相同的应用程序,chrome 加载 PDF 没有任何问题,但 IE9 无法加载 PDF。

下面是代码。

标准页面

    <body>
        <div>
            <form id ="frmReport" method="get" action='@Url.Action("Report","Home")' 
target="iReport">
            <input type="text" />
            <input type="submit" value="Click"/>
            </form>
            <iframe id="iReport" name="iReport"></iframe>
        </div>
    </body>

在上面的 iReport iframe 将获得具有对象标签的结果 HTML

报告查看器 html 代码。

    <div id="reportContainer">
    @{string urlPDF = "http://myhostname" + @Url.Action("GetProfile", 
              "Home", new { Id = "11" });
      <object id = "pdfView" height="600px" width="100%" 
type='application/pdf' data='@urlPDF'>
      </object>}
    </div>

MVC 应用程序中的代码。

public FileStreamResult GetProfile(string Id)
{
    var contentDisposition = new ContentDisposition
    {
        FileName = "Profile.pdf",
        Inline = true
    };
    Response.AppendHeader("Content-Disposition", contentDisposition.ToString());
    byte[] bytes = ReportStore.GetProfileInByte(Id);
    MemoryStream ms = new MemoryStream(bytes);
    return new FileStreamResult(ms, MediaTypeNames.Application.Pdf);
}

在 pf FileStreamResult 中尝试了 FileContentResult,问题是一样的。

谁知道IE9有什么问题?我跟踪了服务器响应的请求没有任何问题区域的应用程序,但是 IE9-PDF ActiveX 没有处理内容呈现,有人知道可能是什么原因吗?

不仅如此,当我在我们的几台机器上尝试时,结果同样令人失望。机器有 IE9 和 Adob​​ePDFReder 9\10。使用 VS.Net 调试器的任何地方都可以正常工作,但是一旦从调试器中出来,事情就会开始失败。

谢谢

4

0 回答 0