我目前在使用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();
答案 0 :(得分:0)
您需要从页面中删除所有HTML(设计时)。
答案 1 :(得分:0)
根据公开Android issue 11422,content-disposition
的处理不符合RFC。尝试引用文件名值(filename="Data.pdf"
)并查看它是否正确保存。
此外,此StackOverflow answer建议除了内容类型外还设置MIME类型。
答案 2 :(得分:0)
如果在此代码之前有任何 HTML,那么它将被发送到浏览器,因为Response.Clear()
仅清除缓冲的HTML输出,Response.Buffer
仅在没有HTML的情况下有效输出了。
尝试阻止代码之前的任何输出(以某种方式)或将此代码移动到其自己的文件。然后摆脱输出缓冲代码。
PS:这可能有效,也可能无效;我没有机会测试它。 Android的内容处理也存在很多问题,因此您可能希望将MIME类型设置为GalacticCowboy建议。