我不知道这一定是重要的,但我正在使用Infragistics iggrid为我的网格和他们的Reports东西导出为PDF。
我遇到的根本问题是我要导出的数据是在浏览器中,我希望我不必创建要下载的服务器端文件。我们在屏幕上有一个用户点击下载PDF的图标。
所以我在客户端上做的是收集所有数据。这必须在客户端完成,因为我想在用户对数据进行排序,过滤和按列排序时导出数据(否则我只能收集数据服务器端,这会使这更简单)。然后我通过POST将数据发送到服务器。
在服务器端,我生成PDF文件。现在,显然,我可以保存PDF服务器端并重定向到生成的文件,但这增加了我宁愿避免的临时文件的维护(但最糟糕的情况是,我可以去那里。现在只需钓鱼选项)
我尝试返回数据base64编码然后执行:
window.open("data:application/pdf;base64," + encodedData);
这不起作用(至少在IE中),因为URL限制有点超过2K。
我尝试在这里使用downloadDataURI javascript函数:http://code.google.com/p/download-data-uri/
但这似乎只适用于Chrome(即使在评论了webkit检查后),我显然也不够聪明,无法找出原因。
我确定我错过了一些不需要创建服务器端文件的明显可能性,但我只是没有看到它。 (免责声明:我的女儿今天早上可怕地把我吵醒了,所以答案可能非常微不足道,明天我大脑工作的时候会感到愚蠢。)
答案 0 :(得分:2)
在服务器端,我生成PDF文件。现在,显然,我可以 保存PDF服务器端并重定向到生成的文件,但那 添加临时文件的维护,我宁愿避免(但是 最坏的情况,我可以去那里。现在就去钓鱼吧。
您无需将其保存在服务器上。您可以简单地将PDF文件(我假设您将某种Stream或byte [])传输给用户。您需要做的就是
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "filename.pdf");
Response.BinaryWrite(bytes);
Response.Flush();
Response.Close();
Response.End();
这将提示用户保存文件或在Adobe Reader中打开它。该文件根本不会在服务器上创建。