c#的回应.写pdf不与Android浏览器工作

本文关键字:Android 浏览器 工作 不与 pdf 回应 | 更新日期: 2023-09-27 18:01:27

我目前有很大的问题与android环境与pdf导出。我使用报表查看器控件将报表呈现为字节数组。接下来我将使用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();

c#的回应.写pdf不与Android浏览器工作

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

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

此外,这个StackOverflow答案建议设置mime类型除了内容类型。

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

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

PS:这可能工作,也可能不工作;我还没机会测试一下。此外,Android的内容处理有很多问题,所以您可能希望将MIME类型设置为GalacticCowboy建议的