C#Response.Write pdf无法使用Android浏览器

时间:2011-07-06 17:08:01

标签: c# android reportviewer report

我目前在使用pdf导出的android环境方面存在很大问题。我正在使用报表查看器控件将报表呈现为一个字节数组。接下来我使用response.binarywrite方法将字节流输出到浏览器。这适用于每个浏览器以及iphone和ipad。但是,它不适用于Android。

Pdf表示它已损坏。当我在记事本中打开pdf时,我看到它正在导出我的整个页面html而不是报表查看器生成的字节数组。

代码:

    Warning[] warnings;
    string[] streamids;
    string mimeType;
    string encoding;
    string extension;
    string filename = "attachment; filename=Data.pdf";

    byte[] bytes = ReportViewer1.ServerReport.Render(
       "PDF", null, out mimeType, out encoding,
        out extension,
       out streamids, out warnings);

    Response.Buffer = true;
    Response.Clear();
    Response.ContentType = "application/pdf";
    Response.AddHeader("content-disposition", filename);
    Response.BinaryWrite(bytes);
    Response.Flush();
    Response.End();

3 个答案:

答案 0 :(得分:0)

您需要从页面中删除所有HTML(设计时)。

答案 1 :(得分:0)

根据公开Android issue 11422content-disposition的处理不符合RFC。尝试引用文件名值(filename="Data.pdf")并查看它是否正确保存。

此外,此StackOverflow answer建议除了内容类型外还设置MIME类型。

答案 2 :(得分:0)

如果在此代码之前有任何 HTML,那么它将被发送到浏览器,因为Response.Clear()仅清除缓冲的HTML输出,Response.Buffer仅在没有HTML的情况下有效输出了。

尝试阻止代码之前的任何输出(以某种方式)或将此代码移动到其自己的文件。然后摆脱输出缓冲代码。

PS:这可能有效,也可能无效;我没有机会测试它。 Android的内容处理也存在很多问题,因此您可能希望将MIME类型设置为GalacticCowboy建议。